レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

超小形のAVRを使ってみた

2019年07月28日 | 電子工作

この前、秋葉原に行く機会があったので秋月電子に立ち寄ってみました。そこで電子部品を色々購入したのですが、その中で紹介したいのがこれです。



まだ何も書き込まれていない、生のAVRです。DIP版ですが大きい方はArduinoではお馴染みのATmega328Pで、小さい方はATtiny13AというAVRです。



ATtiny13Aはとても小さくて8ピンでROM1k・RAM64byteしかないので複雑なことは出来ませんが、Arduino IDEで開発が出来ますし、1つ50円なので幾つも購入して色々試せるのがいいですね。

生のAVRを使うのは初めてなので、動作確認を兼ねてLチカから始めてみました。

まずATmega328Pを試してみます。生のAVRをArduino IDEで利用する時の手順は本家Arduinoのサイトに詳しく書いてあります。内部8MHzのクロックで動作させるときはデバイスの定義ファイルをArduino IDEに登録する必要があるようですが、今回は16MHzで動作させるためにクリスタルやコンデンサーなども購入しているので、なにも設定する必要はありませんでした。サイトの図と同じようにブレッドボードに部品を配置すればArduino UNOやNano(Pro MiniでもOKでした)としてスケッチを書き込めます。ただし書き込みに使用したArduinoはLeonardoでしたので、ICSP端子への配線は変更しました。

スケッチ書き込みが確認できたので、LEDをつないでBlinkのスケッチを書き込んでみるとちゃんと動作してくれました。



実を言うと、このLチカを行える状態にするまでに結構手間取りました。最初回路を組んでスケッチ書き込みを行おうとしたら、エラーが出てまったく書き込みが出来ませんでした。配線は正しかったので理由がまったく分からずかなり悩みましたが、結局クリスタルをジャンパーケーブルでつないでいたのが原因でした。ジャンパーケーブルを使わずクリスタルをAVRのすぐ近くに配置したら全く問題なく書き込みが行えるようになりました。

それと、本家サイトにはUSBシリアル変換アダプターでスケッチを書き込むためにAVRにブートローダーを書き込むように書いてあるのですが、いつもLeonardoで書き込みを行っているのでアダプターは持っておらず、ブートローダー無しで直にスケッチを書き込みました。もちろんこれでスケッチは動作するのですが、Blinkのスケッチを動作させるとLEDの点滅間隔が1秒よりはるかに長くなってしまうのです。
これもかなり悩みましたが、試しにブートローダーを書き込んでからスケッチを上書きしたら正常に1秒間隔で点滅するようになりました。必要なくても最初にブートローダーは書き込んだ方がいいのかもしれません。

ところで、DIP版ATmega328Pは1つ250円と安いのですが、クリスタルなど外部のパーツも合わせて購入すると300円ちょっとになります。これならばAmazonで3個1000円程のPro Miniを購入するのと1個当たりの価格はあまり変わりありませんね。生のATmega328Pは勉強の為に購入するのでなけけば、出来合いの商品を購入した方がよさそうです。

さて、購入したATmega328Pは動作確認が取れたので次はATtiny13Aです。

こちらのAVRはArduino IDEに定義ファイルを登録しなければなりません。方法はネットで探せばすぐに分かります。今回はこちらのサイトを参考にさせていただきました。

ATtiny13Aは内部のクロック9.6MHzで動作させるのでクリスタルなどの外部のデバイスは購入しませんでした。(ブレッドボードでは使用しませんでしたが一応パスコンは購入しました)

ピン数も少ないので配線は簡単です。書き込み側のLeonardoのICSP端子とATtiny13Aの対応する端子をつなぐだけです。こちらはトラブルこともなく書き込みの確認は出来ました。Arduino IDEの"ボード"は"ATtiny13(bitDuino13)"で"Clock"は"9.6MHz(Internal)"を選びました。
そこでLEDを接続してBlinkを書き込むと、Lチカさせることが出来ました。



ところで、こちらのAVRもATmega328Pと同様にブートローダーを書き込まずにスケッチ書き込みを行っていたのですが、やはりLEDの点滅間隔が長くなってしまうという現象が起こりました。そこでブートローダーを書き込んで、再度Blinkのスケッチを上書きすると正常に点滅しました。やはり一番最初にブートローダーを書き込んでおく必要がありそうです。

ATtiny13Aの動作確認がとれたので、早速何かに使ってみましょう。

ATtiny13AにはTXDやRXD、I2C端子はありません。しかし、ソフトウェアでこれらのシリアル通信を利用するためのライブラリはあるようです。でもそれらを利用すると、ただでさえ少ないスケッチ書き込み用のフラッシュメモリが余計に消費されてしまうのがちょっと嫌ですね。
そこで役に立つのがゲームボーイです。ゲームボーイのシリアル通信は簡易的なものなのでATtiny13A側のスケッチの記述もほんの僅かですし、ゲームボーイ側で受け取ったデータを加工して表示等行えるので複雑なことも実現可能です。ATtiny13Aとゲームボーイの組み合わせは最強じゃないでしょうか。

そこで以前も行った、ゲームボーイとのシリアル通信のスケッチを作成してみました。

まずATtiny13Aとゲームボーイとの配線ですが、以下のようにしました。

ゲームボーイ端子 → ATtiny13Aピン
2 TXD → 2
3 RXD → 1
5 CLK → 0
6 GND → GND

このピン番号はICチップの実際のピン番号ではなくて、Arduinoとしてのピン番号ですので気を付けて下さい。

スケッチはこちらです。

Attiny13GBSerial.ino

ゲームボーイのソースとコンパイル済みのバイナリはこちらです。

receive13a.c

receive13a.gb

これらをデバイスに書き込み配線を済ませたら、まずゲームボーイの電源を入れます。すると"receiving..."と表示されますので、ATtiny13Aの電源をいれるとシリアル通信で0〜255の数値をゲームボーイに送ります。ゲームボーイは受け取ったデータをキャラクターとして画面に表示していきます。



これでATtiny13Aとゲームボーイで通信出来ることが確認出来ました。次はなにか実用的なものを作ってみたいと思います。





最新の画像もっと見る

コメントを投稿