● 実験テーマ11
「MP3・WAVファイル名のLCD表示実験」の顛末記
■ 2011.12.10
・今迄、MP3・WAVファイル名は、RS232C経由でTeraタームなどの端末に出力してきたが、LCDに表示させるのが、
実用的であるのは言うまでもない。
それには、現ハードでは、LCDを駆動する為のポートが不足しているため、もうひとつスレーブPIC基板を設け、
それとマスターPIC(現ハード)を、RS232Cで通信させ、スレーブPICのLCDにファイル名を表示させる必要がある。
今回は、それの実験を行ってみようと思います。(今回も「YS電子工作」さんのWEBページを参考にさせて頂きました。)
<実験概要>
・PIC24Fトレーニング基板:マスター232C(PIC24F MAIN BOARD)
dsPIC30Fトレーニング基板:スレーブ232C(ファイル名表示用)
として、RS232C通信実験を行う。
・それぞれ232クロスケーブルで接続する。
→ 手持ちのケーブルはストレートなので使えない。
→ 今回は実験なので、適当な径のピンを2pin使い、それぞれTX-RX, GND同士を直接繋いで実験することにした。
・マスターPICは、次の手順で、コマンドとファイル名ASCII等のデータを送信する。
CR送信(0x0D)→ ファイル名ASCII送信→ LF送信(0x0A)→
"Play Mode"か、"Recode Mode"の文字列送信
→ STX(0x02)送信
・スレーブPICは、次の手順で、コマンドとファイル名ASCII等のデータを受信し、LCD表示処理を行う。
CR+ファイル名ASCIIを受信したら、LCD_1行目の表示バッファに、ファイル名ASCIIデータを格納
→ LF+"Play Mode"か、"Recode Mode"の文字列を受信したら、LCD_2行目の表示バッファに、当該文字列を格納
→ STXを受信したら、LCDに1行目と2行目のデータを表示する。
■ 2011.12.13
・マスター側と、スレーブ側のプログラム作成が終了する。
・スレーブ側のProjectを作成し、コンパイルする。
→ 一発でOKになる(コンパイル成功)
→ HEXファイルをロードして単体で動かした。
→ LCDの初期表示は、OK
・マスター側のProjectを作成し、コンパイルする。
→ 一発でOKになる(コンパイル成功)
■ 2011.12.29
・マスターにHEXファイルロードOK
・実行させるが、スレーブ側LCDにファイル名表示せず。
・マスター側から、TXは出ている。(ソフトオシロ2で確認)
またスレーブ側PICのRX端子にも来ている。
■ 2011.12.30
・スレーブ側LCDに、マスターからの最初の8バイトを受信した時のコード(手抜きして10進表示にした)を表示させた。
・上図の、10進を16進に変換すると
0x0D(CR), 0x53("S"), 0x49("I"), 0x4E("N"),
0x35("5"), 0x30("0"), 0x30("0"), 0x34("4"),
となり、ここまでは正しく受信出来ていることが確認できた。
・次に、マスターからのLF以降の8バイトを受信した時のコード(手抜きして10進表示にした)を表示させた。
・上図の、10進を16進に変換すると
0x50("P"), 0x6C("l"), 0x61("a"), 0x79("y"),
0x20(" "), 0x4D("M"), 0x6F("o"), 0x64("d"),
となり、ここまでは正しく受信出来ていることが確認できた。
■ 2011.12.31
・昨日の結果から、LCDにファイル名が表示されないのは、STXが正しく送信されてないか、受信されてない
かと推定できるが、未だ原因不明。
・いろいろやっている内に偶然、次のことが判った
→ LCDの1行目のみに表示させるようにマスターから送る(つまり、LF+"Play Mode"+STX送出を省略し、
CR+ファイル名+STXのみ送出)と、上手く1行目に表示出来ることを確認した。
2行目の、LF+"Play Mode"+STX送出のSTXが悪さの基になっているようである。
→ 結局、STX送出前に、1msのディレイを入れたら、OKになった。
(1行目のみの場合、STXを送る前に、ファイル名の1キャラ送出後にBUSYチェック時間分のディレイがあ
るので上手くいっていると思われる。)
■ 2012.1.1
・録音モード時も同じことなので、再生系と同じ修正を施しOKを確認。
(putsUART1を実行後、pitcUART1を実行させる時は、1ms程度の遅延が必要なようで、追加したらOKになった。)
・今回は、スレーブ側に、dsPIC30Fのトレーニング基板を使って実験したが、基板パターン化に当っては、PIC24Fを使う予定
なので、スレーブ側をPIC24Fトレーニング基板にしての実験も、してみた。
→ Config設定・UART設定・LCDライブラリ等の変更を施し、HEXファイルをロードし、特に問題無くOKを確認した。
下図に、実験結果を示した。
<回路図>
・今迄の実験で使用してきた、dsPIC30F及び、PIC24Fトレーニング基板等を流用しましたので省略します。
<最終ソース及び、ヘッダーファイル>
・マスターPICのソース→ easy_mp3_player_add_rec_and_lcd_24f.c
・スレーブPICのソース→ @ dsPIC30Fの場合
slave_pic_uart_and_lcd.c
A PIC24Fの場合
slave_pic_uart_and_lcd_24f.c
My_LCD_Lib.c
My_LCD_Lib.h
← 実験テーマ1に戻る TOP PAGEに戻る 実験テーマ12へ →