いまさらですが、いままでに使ったことがあるPICはPIC12FとPIC16Fだけでした。 これらのプログラムはいつもアセンブラで書いていました。 先日モノクロのグラフィックの液晶に表示させる際にもPIC16Fを使用しましたが、プログラムメモリ(Flash)が少ないと感じたので、今後のことを考えて、PIC18FをC言語で使ってみることにします。 PICはPIC18F26K22を秋月電子で購入。 値段は300円以下と安いし、Flashが64kbyteと割りと多め、シリアルも2chあるし、I/Oも25本、とりあえずいろいろ使えるんじゃないかなという感じです(実はあまり真剣には考えていません)。 C言語でPIC18Fを使うのは初めてなので、まずは1秒ON、1秒OFFのLチカ(LED点滅)を試し、うまく動きました。
環境はこんな感じで準備しました。
1. MPLAB X IDE をアップデート (v3.45 →v3.50、せっかくなので最新に)
2. MPLABR XC8 Compiler v1.40 (Cコンパイラ)をダウンロードしてインストール
以下、MPLAB X IDEで作業
3. MPLABで新規プロジェクト作成 (PIC18 C Templateを使う)
4. プロジェクトのデバイスを18F26K22に変更, PropertyのConf:は他のXC8_18FのをコピーしてXC8_18F26K22を追加(Conf:はそのままでもよかったのかも?)
以下、ファイル変更
5. configuration_bits.cのTODOのところに下記追加 (とりあえず最小限で)
#pragma config FOSC = INTIO7 //Use internal ocsillator
#pragma config WDTEN = OFF //WDT off
#pragma config BOREN = ON //Enable brownout reset
#pragma config MCLRE = INTMCLR //Use internal MCLR
#pragma config CPD = OFF //Flash not protected
6.system.hを下記の様に変更 (クロック 64MHz)
//#define SYS_FREQ 8000000L
#define SYS_FREQ 64000000L
7. system.cの void ConfigureOscillator(void) のTODOのところに、下記を追加 (内部発振16MHzを64MHzに逓倍)
OSCCONbits.IRCF = 0b111;
OSCCONbits.SCS = 0b00;
OSCTUNEbits.PLLEN = 0b1;
OSCTUNEbits.INTSRC = 0b00;
8. main.cのvoid main(void)の前に下記#defineを追加
#define _XTAL_FREQ SYS_FREQ //SYS_FREQ is defined in system.h
#define LAT_LED LATAbits.LATA0
9.main.cのTODOのところに下記を追加 (LEDはRA0に680Ωと直列にして対GND接続)
TRISA = 0b11111110;
while(1){
LAT_LED = 1;
__delay_ms(1000);
LAT_LED = 0;
__delay_ms(1000);
}
10. MPLAB X IDEでコンパイル(build)して、PICに書き込み起動
このPIC18FだとDebug Headerなしでデバッガが使える雰囲気です。 とりあえず、break pointは置けたので使えるかと思います。
全体 (電源は5V外部供給(万能基板に3端子レギュレータが載っています。) PICKIT3互換品使用
関連記事
C言語でPIC18F、まずはLチカ (LED点滅)
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続2
C言語でPIC18F、SDカード読み書き
C言語でPIC18F、SDカードの画像ファイルをLCD(M028C9325TP)に表示
コメントを書く