• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AVRマイコンで4bit分のデータをシリアルで送る)

AVRマイコンで4bit分のデータをシリアルで送る方法

このQ&Aのポイント
  • AVRマイコン初心者がATtiny2313を使ってメロディICの入力端子に4bit分のデータをシリアルで送る方法について教えてください。データの送信方法にはUARTやタイマを使用する方法が考えられますが、具体的な手順や注意点などを教えていただけると助かります。
  • AVRマイコンを使用してSM11125ABVというメロディICの入力端子に4bit分のデータをシリアルで送る方法について教えてください。データシートには1bit分のパルス幅が2μsと書かれていますが、具体的な手順やプログラムの作成方法などを教えていただけると助かります。
  • ATtiny2313を使用してメロディICの入力端子に4bit分のデータをシリアルで送る方法について教えてください。データの送信方法にはUARTやタイマを使用する方法が考えられますが、具体的な手順や注意点などを教えていただけると助かります。また、WinAVRを使用する場合の手順やプログラムの書き方なども教えていただけると助かります。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

UARTはPCなどとのデータ通信用のものであり、 5~9bitのデータを伝送するものですから、4bitのデータ伝送には使えません。 データシートを見ましたが、「パルス幅は2μs」というのは最小値であり、 それより長い分には問題なさそうですので、ソフトウェア的なポート制御で問題なさそうです。 タイマ割り込みでも、ポーリングでもどちらでも組みやすい方法で組めばいいかと思います。 ポーリングで組むなら、 #include <util/delay.h> しておいた上で、 SCが繋がっているピンをLに SIが繋がっているピンに1ビット目の値をセット _delay_us(3); SCが繋がっているピンをHに _delay_us(3); SCが繋がっているピンをLに SIが繋がっているピンに2ビット目の値をセット _delay_us(3); SCが繋がっているピンをHに _delay_us(3); …以下略。これを全部で4回繰り返す という処理でいいでしょう。 このコードでは、_delay_us(3); で3μs待たせています。 ですが、2μsというのはスペック上の最小値ですし、 内蔵RC発振器で動作させる場合、発振周波数に誤差があるので、ギリギリのタイミングで動作させるよりはある程度余裕を持たせるべきですから、これぐらいで十分でしょう。

関連するQ&A