softdev:pic18
文書の過去の版を表示しています。
PIC18
PIC18と、PIC12/16とは、構成が違っているようで、コンパイラも別であった。HITECH-Cなら、for C18を新たにダウンロードする。また、PICkit3もファームウェアダウンロードが必要(これはIDEが自動でやる)。PIC18を使ったりPIC16を使ったりすると、毎回ダウンロードが発生する。そんなに時間がかからないから別に良いんだけど。
コンフィグbit
Delay
サンプルで用意されていたDelay関数が無くなっちゃった。あるのか知れんけど。よくわからんから重宝してたのですが、で、includeフォルダをみたら、delays.hと言うのがあった。わたしも、あんまりよくわかってないので、行き当たりばったりでよくないんですが。
/* C18 cycle-count delay routines. */ /* Passing 0 (zero) results in a delay of 2560 cycles. */ void Delay10TCYx(unsigned char); /* Passing 0 (zero) results in a delay of 25,600 cycles.*/ void Delay100TCYx(unsigned char); /* Delay1KTCYx * Passing 0 (zero) results in a delay of 256,000 cycles. */ void Delay1KTCYx(unsigned char); /* Passing 0 (zero) results in a delay of 2,560,000 cycles. */ void Delay10KTCYx(unsigned char);
で、なんがしか時間待ちするようであるので、オシロの波形で確認したところ、PIC18F1320で8MHz内蔵タイマで下表の結果だった。
Function | Results |
---|---|
Delay1KTCYx(1) | 510us |
Delay10KTCYx(1) | 5.1ms |
Delay100TCYx(1) | 66us |
Delay100TCYx(10) | 550us |
Delay100TCYx(100) | 5.2ms |
Delay10TCYx(1) | 19.2us |
Delay10TCYx(10) | 79us |
Delay10TCYx(20) | 146us |
Delay10TCYx(100) | 670us |
計測にPort出力のH/Lと、反転するのにif文を使っているので、その処理分追加されているので、よくわからない(条件分岐せずにポートの出力をすると670nsぐらい)けど、小さい時間は誤差が大きいようだ。内蔵タイマを4MHz設定にすると、時間は半分だった。
以上から、1TCYx=510ns(@8MHz)と思われる。8MHzは周期125nsから、TCY=4/Fosc というのがデータシートに書かれていたので、本来1TCYx=500nsとなるのかな。
なので、引数がcharなので
void DelayMs(int t){ if(t<128){ Delay1KTCYx(t*2); } else if(t<1275){ Delay10KTCYx(t/5); }
softdev/pic18.1329642474.txt.gz · 最終更新: 2013/07/15 20:28 (外部編集)