スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) | スポンサー広告 | トラックバック(-) | コメント(-)

PIC12F1822をTimer1 だけ低クロックで使う方法

例えば,Timer1をかなりゆっくりした周期で回したいと思ったとき。
下のコードみたいに書いているのですが,
if文でDelay増やすのをなんとかできないかなと思って
Timer1だけ別のClockを使う事を思いついたのです。
12F1822には32kHzの内蔵Clockが別に入っているので出来んじゃない?と。

知っている人には当たり前すぎる情報かもしれませんが,
ハマったのでメモしておきます。

void interrupt isr(void) {
    if (TMR1IF == 1) {
    TMR1H = 0x3C;
    TMR1L = 0xd5; //3caf = 50msec by 32MHz
    CLRWDT();

    if (Timer1Delay > 0) {
        Timer1Delay--;
        TEST_LED = Timer1Delay % 20 / 10;  //0.5秒ごとに点滅
    } else {
        Timer1_Function(); //TImer1割り込みでやらせたい機能のCall
        Timer1Delay = DELAY;
    }
    TMR1IF = 0;
}

さて,結果は。

PIC12F1822でMainClockと別にTimer1だけ内蔵Clockで32kHzにすることは出来ません。
という結論になりました。

マニュアルの59ページによると,32.768 kHzの水晶発振子を外付けすれば良いそうです。
いやいや,I/Oが2Pin減っちゃうじゃんか,と

で,179ページにTimer1関連の概略回路図
(FIGURE 21-1:TIMER1 BLOCK DIAGRAM)が有るのですが,
外部Clockか,Foscか容量検知のオシレータしかつながっていません。
Fsoc="Systemで使っているClock"なので,Timer1だけ内蔵32kHzというのは
出来ないようです・・・。

12F1822のデータシートは下記で入手できます。
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544839

2012/07/25(水) | Timer1利用 | トラックバック(0) | コメント(0)

«  |  HOME  |  »

コメントの投稿














管理者にだけ表示を許可する

トラックバック

トラックバックURL
http://picalittle.blog.fc2.com/tb.php/14-71ddcd2a
 |  HOME  | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。