[戻る]
新着表示

Re^3: C30で24Fの入出力 投稿者:坂本 准一 投稿日:2018/01/22(Mon) 07:51:25 No.1099

有難うございました。
PIC24F活用ガイドブックを何度か読み返してみたのですがそれに関する記述が見つかりませんでした。
C30に関する詳細がわかる書籍などありましたら教えてください。

Re^2: C30で24Fの入出力 投稿者:坂本 准一 投稿日:2018/01/22(Mon) 07:42:46 No.1098

> レジスタに16ビットで直接代入します。
>
>   LATA = 0x000F; 
> data = PORTA;
>
>  など
>
>
> > C30で24FのI/Oポートにまとめて8ビット分入出力するする方法がわかりません。
> > CCSではoutput_b()やinput_b()で8ビットまとめて入出力できたのですが。。

Re^6: 暴走リセットできません 投稿者:bit2033 投稿日:2018/01/21(Sun) 22:39:20 No.1097

スミマセン、質問に間違いがありました。m(_ _)m
× RTCCハードリセットも受け付けされず
○ MCLRハードリセットも受け付けされず

通常はMCLRピンに5Vを印加しておいて、一瞬GNDに落とし、再び5Vを印加すると、リセット再起動する機能のことです。

さて、暴走後のリセット方法は不明なので、暴走が発生しないようにあれこれやってみたところ、対策できましたので報告します。
結論は、スターターリレーのコイル側に、おまじないのダイオードを1個付けただけです。ダイオードは手持ち在庫の1000V1Aです。
あら不思議という感じで、ぴたっと治まったのです。そのダイオードを付けたり外したり、何回も確認したので間違いありません。たった10円くらいの電子パーツです。
ちなみに、メーター別電源化は既に試していました。(GNDは共通で。)リン酸鉄リチウムバッテリー3.3Aは高かったのに、直りませんでした。

kkkさん、通りがかりさん、ありがとうございました。

Re: C30で24Fの入出力 投稿者:gokan 投稿日:2018/01/21(Sun) 21:31:32 No.1096

レジスタに16ビットで直接代入します。

  LATA = 0x000F; 
data = PORTA;

 など


> C30で24FのI/Oポートにまとめて8ビット分入出力するする方法がわかりません。
> CCSではoutput_b()やinput_b()で8ビットまとめて入出力できたのですが。。

Re: エラーの原因 投稿者:gokan 投稿日:2018/01/21(Sun) 21:28:56 No.1095

#define文には;は要りません。



> 使用しているコンパイラは、C18です。
>
>
> 次のエラーの原因が分からず困っています。
>
> エラー: [1130] pointer operand required for '*' operator
>
>
> このエラーが発生している場所は、★印の3ヵ所です。
>
> PID制御用の変数を#defineで定義しています。
> Kp, Ki, Kdの所だけ、エラーが発生しますが、理由が分かりません。
> DELTA_Tの所は、エラーとなりません。
>
> #define DELTA_T 0.01; //10msec
> #define Kp 2.0; //PID係数
> #define Ki 0.0; //PID係数
> #define Kd 0.0; //PID係数
>
> また、次のように変数を定義するとエラーは発生しませんが、
> DELTA_Tだけが「Out of scope」となってしまいます。
> //static signed double DELTA_T=0.01; //処理周期 10msec
> //static signed double Kp=2.0; //PID係数
> //static signed double Ki=0.0; //PID係数
> //static signed double Kd=0.0; //PID係数
>
>
> void main(void){
>
> 省略
>
> }
>
>
>
> void pid(void)
> {
> diff[0]=diff[1];
> diff[1]=sensor_val-target_val;
> integral+=(diff[1]+diff[0])/2.0*DELTA_T; //○
>
> p=Kp*diff[1]; //★
> i=Ki*integral; //★
> d=Kd *(diff[1]-diff[0])/DELTA_T; //★
>
> mv=p+i+d;
> PWM(mv);
>
> }

C30で24FのI/Oにまとめて入出力 投稿者:坂本 准一 投稿日:2018/01/20(Sat) 13:02:01 No.1094

C30で24FのI/Oポートにまとめて8ビット分入出力するする方法がわかりません。
CCSではoutput_b()やinput_b()で8ビットまとめて入出力できたのですが。。

エラーの原因 投稿者:PIC初心者 投稿日:2018/01/19(Fri) 10:55:16 No.1093

使用しているコンパイラは、C18です。


次のエラーの原因が分からず困っています。

エラー: [1130] pointer operand required for '*' operator


このエラーが発生している場所は、★印の3ヵ所です。

PID制御用の変数を#defineで定義しています。
Kp, Ki, Kdの所だけ、エラーが発生しますが、理由が分かりません。
DELTA_Tの所は、エラーとなりません。

#define DELTA_T 0.01; //10msec
#define Kp 2.0; //PID係数
#define Ki 0.0; //PID係数
#define Kd 0.0; //PID係数

また、次のように変数を定義するとエラーは発生しませんが、
DELTA_Tだけが「Out of scope」となってしまいます。
//static signed double DELTA_T=0.01; //処理周期 10msec
//static signed double Kp=2.0; //PID係数
//static signed double Ki=0.0; //PID係数
//static signed double Kd=0.0; //PID係数


void main(void){

省略

}



void pid(void)
{
diff[0]=diff[1];
diff[1]=sensor_val-target_val;
integral+=(diff[1]+diff[0])/2.0*DELTA_T; //○

p=Kp*diff[1]; //★
i=Ki*integral; //★
d=Kd *(diff[1]-diff[0])/DELTA_T; //★

mv=p+i+d;
PWM(mv);

}

Re^5: 暴走リセットできません 投稿者:通りがかり 投稿日:2018/01/19(Fri) 09:14:42 No.1092

そこまでやっているのであれば、効果は見込めません。
残りの対策は電線やチップ自体(シールドケース)にシールド、電源を別電源、ノイズ発生源から遠ざける等です。
EMC対策は際限なく難しいですよ。

> コメントありがとうございます。
> ケースは上面を除き、アルミ板製です。GNDはアルミケースに接地してあります。
> 上面は透明アクリル板なので、アルミ板で覆ってどうなるかテストしてみようと思います。
> ノイズの発生元はセルスターターリレーかな?ノイズを抑えるのはあきらめていたのですが、もう少しいろいろと試してみたいと思いました。ただし今時期は車庫内が寒いので億劫です。比較的あたたそうな休日になると思います。
>
> > 通り掛かりで失礼します。
> > ノイズが一定で小さければ、コンデンサ、フェライトコアで改善できます。
> > 大き過ぎる場合、ケースに入れて内側をガッチリと
> > アルミや銅テープでノイズ対策するくらいでないとダメです。

Re^4: 暴走リセットできません 投稿者:bit2033 投稿日:2018/01/18(Thu) 21:16:05 No.1089

コメントありがとうございます。
ケースは上面を除き、アルミ板製です。GNDはアルミケースに接地してあります。
上面は透明アクリル板なので、アルミ板で覆ってどうなるかテストしてみようと思います。
ノイズの発生元はセルスターターリレーかな?ノイズを抑えるのはあきらめていたのですが、もう少しいろいろと試してみたいと思いました。ただし今時期は車庫内が寒いので億劫です。比較的あたたそうな休日になると思います。

> 通り掛かりで失礼します。
> ノイズが一定で小さければ、コンデンサ、フェライトコアで改善できます。
> 大き過ぎる場合、ケースに入れて内側をガッチリと
> アルミや銅テープでノイズ対策するくらいでないとダメです。

Re^3: 暴走リセットできません 投稿者:通りがかり 投稿日:2018/01/17(Wed) 20:07:25 No.1081

通り掛かりで失礼します。
ノイズが一定で小さければ、コンデンサ、フェライトコアで改善できます。
大き過ぎる場合、ケースに入れて内側をガッチリと
アルミや銅テープでノイズ対策するくらいでないとダメです。

> > 以前にPICで車外温度計を作った時に同じような症状が出たことがありますが対処としてエンジンスタート後20秒程度の遅延を取って
> > PIC回路に電源を入れる様にする事で100%暴走はなくなりました。
> > 遅延回路はトランジスタで別回路としました。
> > 暴走の原因は多分強烈なノイズだと思います。
>
> コメントありがとうございます。
> 僕も原因はノイズだと思って、コンデンサーを沢山付けてみたり、フェライトコアを付けてみたりしましたが、改善されませんでした。
> しょうがないので、現在は、そのメーターに別スイッチを付けて、暴走した場合は、メーター電源を入れ直すようにしています。
> しかし、そのメーターには、電源オン時にゼロからスタートする距離カウンターと、電源オン時からの経過時間表示をさせていますので、アイドリングストップによるエンジン再始動(セルモータを回して)で暴走した場合、ゼロに戻ることになってしまいます。
> 暴走が発生しないようにするのは別として、暴走した場合に、ウォッチドックタイマーが発動しないのと、RTCCハードリセットが効かないのは悩みます。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |

- WebForum -