PIC12F629 に関する Tips

[戻る]

今まで PIC16F84 を使って何度か遊んだことはあったのですが、 あまり入出力数が必要ない回路を組むにあたって、 外部に発振子等が要らないことに魅力を感じ 今更ながら 12F629 を使ってみました。

概要は 16F84 と同じなんですが、微妙な所で違ってましたので、 気づいた点を忘れないよう書きとめておきます。

  1. 初期設定

    プログラム頭の初期設定は以下の通り (MPLAB の場合)

    list p=PIC12F629
    #include <p12f629.inc>
    

  2. 名称

    I/O が 5 個しかないため、16F84 に比べ名称が変わっている (MPLAB の場合)。

    PIC16F84PIC12F629
    TRISA, TRISBTRISIO
    PORTA, PORTBGPIO

  3. 内部発振モード

    内部発振には RC 発振を用いており、その周波数に個体差がある。 校正値が 3fff に書かれている。プログラム初期設定時にバンク 1 で

    call   0x3ff
    movwf  OSCCAL
    
    と書く必要がある。

    また、焼きこみプログラムによっては全メモリを一括して焼きこむため、 校正値が上書きされてしまう。その場合は、一度全メモリを読んで 3fff に何が書き込まれているかを知り, その下二桁を を retlw の引数にして

    org   0x3ff
    retlw 0x34
    end
    
    と書くとよい。

  4. 入出力

    4 ピン (GP3/MCLR) は入力専用

    また、

    bsf GPIO, 0
    bcf GPIO, 2
    nop
    bcf GPIO, 0
    bsf GPIO, 2
    
    といったフレーズのコードがどうしても上手く動かなくて悩んだことがあった。 オシロで調べたら 2 行目の GPIO2 を L にした瞬間、GPIO0 も L になっていた。 原因は不明。 結局 RAM 領域にバッファを作り、その値を毎回 GPIO へコピーすることで対処した。

  5. 焼きこみ

    焼きこみは この方法 で出来た。 ここで記載された icprog を使う場合、

    にすると、とりあえず動いた (GPIO0〜5 すべて I/O として使う場合)。


2006.6