2025年1月11日土曜日

PIC16F628AでUART for Dfplayer(備忘録)

古い型のPICはDfplayerとのUART通信の資料が少なく苦労した。
arduino系と違ってPICはよりハードに近いため、通信のタイミングなどより細かい調整が必要だとわかった。外部発振子が必要だという情報もあったが、内部発振でも可能なような気もしたので、少し頑張ってみた。

確認したこと:各ポートの入力、出力の設定(TRISA,TRISB)、 内蔵発振4MHzが使えること(#define _XTAL_FREQ 4000000と PCON   = 0b00001000)、UART関連設定(TXSTA,RCSTA) Config系(FOSC = INTOSCCLKで内蔵発振を指定) SPBRG=25(4MHzと9600Bps、非同期、ハイスピードなどの条件から計算できることが、データシートに書かれている)
ここまでは、自力でなんとかできたが、問題は、UARTの送信関数

最初は
void dfply(char cmd, char parameter) {
    while (TXIF == 0);
    TXREG = 0x7E;
  ...........
としたが、これだと、データが完全に送信しないうちに次を送ろうとしてだめらしい。ChatGPTから、以下の方法を教えてもらい、試したらうまくいった。
void dfply(char cmd, char parameter) {
     while (!TXIF); 
    TXREG = 0x7E;  
    while (!TRMT);
  ....    
   
 以下のようなコードでフォルダ、ファイル番号をスイッチ長押しでカウントして取得し、Mp3を指定して再生することはうまくできた。確認のため、フォルダやファイル番号をモールス信号をLEDで表示するようにした。 

0 件のコメント:

コメントを投稿