Welcome to my blog

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

Comments 0

There are no comments yet.

Leave a reply