● 実験テーマ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へ →