aitendoで入手したカラーグラフィックLCD(M028C9325TP (320 x 240ピクセル)には、SDカードのソケットも実装されています。 ここに画像データを入れておいてLCDへの表示をしようと思います。
サイトを徘徊してみると、こちらのサイト(Interfacing SD Card With PIC Microcontroller-XC8) がPIC18Fを使用してXC8 Cコンパイラ用のプログラムでSDカードのアクセスを行っていました。 ソースコードも一式公開されているので利用することにしました。
上記サイトではPIC18F45K22を使用しています。 こちらではPIC18F26K22を使用していますが、少しの変更でうまく動作させることができました。
SD関連の結線は下記のとおりにして、これは上記サイトのコードでの各ポートの対応と同じです(プルアップ、プルダウン抵抗については変更)。 実はこのままですと先日LCDに表示を行った際のポートと重複してしまいますので、LCD側の結線はあとで変更することにします。
PIC SDカード(LCDモジュール M028C9325TP)
————————————–
RC0 SD_CS (10kΩの抵抗器でプルアップ)
RC3/SCK1 SD_SCK
RC4/SDI1 SD_OUT (10kΩの抵抗器でプルアップ)
RC5/SDO1 SD_DIN
ベースのC言語のコードは上記サイトからダウンロードできます。 サイトの下の方にある、 Download Mplab X Project SD_Card_FatFs(リンクしていません) です。
ダウンロードしたものは、そのままプロジェクトとしてMPLAB X IDE から開くことができました。
修正は以下の通り行いました。
1. MPLAB X IDE でのデバイス指定をPIC18F45K22からPIC18F26K22に変更
2. mcc_generated_files\mcc.c を修正
#pragma config P2BMX = PORTD2 // ECCP2 B output mux bit->P2B is on RD2
→ #pragma config P2BMX = PORTB5 // ECCP2 B output mux bit->P2B is on RB5
3. mcc_generated_files\pin_manager.c を修正
LATD = 0x00;
TRISD = 0xFF;
ANSELD = 0xFF;
→ // LATD = 0x00;
// TRISD = 0xFF;
// ANSELD = 0xFF;
————————————
LATE = 0x00;
→ // LATE = 0x00;
————————————
ANSELE = 0x07;
→ // ANSELE = 0x07;
あとはコンパイルして実行すると、上記サイトにあるように “Hello world! …(以下省略)”か書かれたテキストファイルがSD カード上に作られました。 SDカードは手元にあった1GByteのものを使っています。
PIC18F26K22のメモリ使用状況はこんな感じです(MPLAB X IDE v3.50)。
ダウンロードしたコードのmain()では、f_mount, f_open, f_writeを使っています。 他にもいろいろ関数が用意されていて、f_readとf_writeを使用するとバイナリファイルのコピーもできました。 SDカードからバイナリファイルのリードは出来ているということになると思います。
メモリにはまだ余裕があるので、前回のLCDへの表示のプログラムと上手に合体して機能追加すれば、SDカードに画像ファイルをいれておいてそれをLCD上に表示できそうです。
関連記事
C言語でPIC18F、まずはLチカ (LED点滅)
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続2
C言語でPIC18F、SDカード読み書き
C言語でPIC18F、SDカードの画像ファイルをLCD(M028C9325TP)に表示
コメントを書く