本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC16F1823 SPI通信)

PIC16F1823 SPI通信でのデータ受信に問題あり

2023/10/20 01:22

このQ&Aのポイント
  • PIC16F1823をマスターとして、スレーブデバイスからSPI通信にてデータを読み込もうとしていますが、受信しているのは0x00のデータのみです。
  • PIC側のマスター受信では、SSP1BUFをダミーで読み込んだ後、SPIでコマンドを送信し、再度SSP1BUFを読み込んでいます。
  • データ受信用にはダミーデータと受信を行い、読み込む前にSSP1BUF.BFを確認していますが、期待したデータが受信できません。
※ 以下は、質問の原文です

PIC16F1823 SPI通信

2019/03/20 10:00

PIC16F1823をマスターとして、スレーブデバイスから、SPI通信にてデータを読み込もうとしています。オシロスコープで波形を見ると、期待したデータをスレーブ側は出力しています。しかし、PICでは、0x00のデータしか受信されません。
PIC側のマスター受信では、SSP1BUFをダミーで読み込み、SPIでコマンドを送信、SSP1BUF.BFをみて、さらにSSP1BUFをダミーで読み込み、次にデータ受信用にダミーデータと受信を行い、SSP1BUF.BFをみて、SSP1BUFを読んでいます。気を付けて確認しなけらばならないレジスタ等あったら教えてください。

質問者が選んだベストアンサー

ベストアンサー
2019/03/20 20:30
回答No.3

SPI モード ( CKP , CKE ) 設定は合ってますか?
スレーブデバイス がマイコンの場合 WAIT が必要になる時もあります

参考 MCC SPI ライブラリ
#define SPI_RX_IN_PROGRESS 0x0
uint8_t SPI_Exchange8bit(uint8_t data)
{
// Clear the Write Collision flag, to allow writing
SSP1CON1bits.WCOL = 0;

SSP1BUF = data;

while(SSP1STATbits.BF == SPI_RX_IN_PROGRESS)
{
}

return (SSP1BUF);
}

お礼

2019/03/21 15:55

その後、PIC16F1823は、アナログ入力も同一ピンで行われていて、デフォルトがアナログ入力なので、ANSELレジスタでデジタルIOに切替る事で、リードできるようになりました。
ありがとうございました。

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (3件中 1~3件目)

2019/03/20 11:04
回答No.2

今後のことも考えると
Microchipのフォーラムで質問することを覚えるべきでしょうね。
https://www.microchip.com/forums/m1036310.aspx
https://www.microchip.com/forums/f524.aspx

お礼

2019/03/20 11:36

ありがとうございます。確認します。

質問者
2019/03/20 11:02
回答No.1

開発環境は? ライブラリは?

ここらあたりの問題だったっりして
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12163939517

お礼

2019/03/20 11:38

ありがとうございます。

質問者

補足

2019/03/20 14:47

XC8コンパイラーを使用しています。PIC16F877では、受信できます。
PIC16F1823では、SSP1BUFがNULLのままです。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。