アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。AVRマイコン初心者です。

ATtiny2313 を使い、メロディICの入力端子に4bit分のデータをシリアルで送りたいです。

メロディIC → SM11125ABV (セイコーNPC製)
データシート → ftp://ftp.npc.co.jp/pub/pdf_j/1125abv_nc0720a.pdf


やりたいことは、SM1125ABVの入力端子SI, SCに選曲のためのデータを送り、選曲することです。
データシートにあるように、1bit分のパルス幅は2μsです。

ようは、この幅のパルスを出力できればいいのですが・・・・
何から始めればよいのか・・・・

検索したら、UARTというのが見つかりましたが、例がやたらと文字列の送受信で…
文字列の部分を0 ,1 に置き換えたら、H、Lのパルスが出力されてくれるのか???

それとも、タイマで割り込みのタイミングでH、LをI/Oポートから出力させればいいのか???


WinAVRを使います。
どうかアドバイスよろしくお願いいたします。

A 回答 (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発振器で動作させる場合、発振周波数に誤差があるので、ギリギリのタイミングで動作させるよりはある程度余裕を持たせるべきですから、これぐらいで十分でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!