• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SPI通信制御付きの音声ICをI2Cで制御可能?)

ATMELのAtmega88PでSPI通信制御付きの音声ICをI2Cで制御可能?

このQ&Aのポイント
  • ATMELのAtmega88PというマイコンでSPI通信のRX端子搭載の音声ICを制御したい。
  • Atmega88PにはSPI機能の端子が1つしかなく、デバッガの接続に専念させたい。
  • I2C端子も使用可能なので、SPIの送信のみに特化した使い方ができるか疑問。I2CはACKのビットが入ってきて、単純な送信ではダメかも?

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

  • ベストアンサー
  • kaba__san
  • ベストアンサー率45% (27/59)
回答No.2

あらーやっぱりUSART使ってしまってたんですね。予想はしてましたが・・・ 対策としましては2案ほど思い浮かびます。 (1)SPIインターフェースをライターと音声ICで共用する。 デバッグにはSPI(ISP)を使用しませんので、信号の衝突さえ注意すれば共用することに問題は無いと思います。 その気があるなら具体例など追って補足いたします。 (2)汎用ポートとソフトウェアでSPIを実現する。 SPIはクロック同期式ですのでタイミングシビアなところが無く、さほど難しいものではありません。 自分で出す1クロック毎にデータの入出力処理を行えばいいのです。 デバッガって何をご使用ですか?

techhouse
質問者

お礼

回答頂きありがとうございます。 デバッガは Atmel-ICE http://akizukidenshi.com/catalog/g/gM-08285/ 対策の2案大変助かります。 (1)の”SPIインターフェースをライターと音声ICで共用する。” これは以前 ATmega88pを使用したもので経験があります。個人的にはちょっとやりたくないというのが正直なところです。なぜかというと、あまりATmelのデバッグ通信などのハード仕様に詳しいわけではなく、通信関連で不具合が生じた場合に、このSPI通信の共用を疑ってしまったりして時間がやけにかかりそうな気がするからです。 前回のプログラミングの際に、共用しているSPI通信のデバイスが、今回の送信のみだけでなく、TX,RXを常に行うようなものだったため、通信の不具合が発生した時に、ハード側の人がオシロスコープで波形を追おうとしても、デバッガ側の波形なのかを区別できず、とても大変だった気がします。 プログラミングでは、デバッガでお手軽に修正とかやってサッと済ましたいので、デバッガのSPIだけは周りに影響されたくない感じですね。 とりあえずクロックを手動でいれて行ってデータシフトで送るような(2)のやり方が簡単そうな感じはしています。

その他の回答 (1)

  • kaba__san
  • ベストアンサー率45% (27/59)
回答No.1

I2CでSPIの代替は無理があります。 そんな心配しなくても、SPIはもう一つ備わっています。 それはUSARTによるSPI動作モードです。 データシートのUSARTの項目を見れば説明がありますので読んでみてください。

techhouse
質問者

お礼

回答頂きありがとうございます。やはりI2C通信でSPI通信の代用は難しそうですね。 ATmega88pの 30番ピン:PD0/TXD 31番ピン:PD1/RXD このUARTがSPIに使えることは知っていたのですが、すでに別のデバイスとUART通信のため使用済みの状態でした。 ATmega88pにもう一つ余計にUARTが付いていればなという感じです。 助かります。

関連するQ&A