一人もくもく会 α verでサービス開始しました。

PIC24FJ64GB002でLED点灯

PIC24FJ64GB002でLED点灯。
初の16bit。
USBホストのために買ったのだが折角なので試しておく。

しかしこれがなかなかうまく行かなかった。
まずひとつの原因が、8ビットのものとは違って、
データシートを見ると最小限の回路の指定があり、
この通りに組む必要があるらしい。
適当にpickitやledと接続するだけだとダメみたい。
面倒だから専用のテスト用基板を作った方が良さげ。

上記は理解できたのだが、どうしてもLEDが点灯しない。
色々試してたら点灯した。
どうもまだ回路図を正しく読む力が無いようで、余分な線を外したら動いた。

同じく回路図読めない人のために見難いけど画像を貼っときます。
回路図はネットにいっぱいあるのでそっちを参考にして下さい。

コンデンサが一個なくて電解になっちゃってて違うんだけど…。

プログラムはほとんどサンプルのまま。
(サンプルあったんだな…初めて気づいた)
色々試してるうちに、プライマリオシレータとインターナルオシレータの
違いが分からなかったので念のため内部のものにしてある。

#include <xc.h>

_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & ICS_PGx2)
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_NONE & FNOSC_FRCPLL)

/*
 * 
 */
void delay(void) {
    long i = 65535;
    while(i--)
        ;
}

int main(void) {
    CLKDIV = 0;
    TRISA = 0;
    TRISB = 0;
    
    // Setup PortA IOs as digital
    AD1PCFG = 0xffff;
    LATA = 0xFFFF;
    LATB = 0xFFFF;

    while(1) {
        LATA = 0x0000;
        LATB = 0x0000;
        delay();

        LATA = 0xFFFF;
        LATB = 0xFFFF;
        delay();
    }
    return 0;
}

LATというのは調べると分かるが
ポートの出力のためのレジスタ書き込みの際の不具合を抑えるためのもの。
入力はPORT、出力はLATを使うといいとどっかに書いてあった。