ATtiny13Aは、DIP8ピンパッケージの電子工作しやすいAVRマイコンです。このマイコンをArduinoでプログラミングできるようにする方法をご紹介します。
MCUdude MicroCore
Hansさんは、AVRマイコンをArduinoで開発できるようにする、ハードウェアパッケージをいくつも作っています。その中に、ATtiny13A用のMicroCoreというパッケージがあります。このパッケージをArduino IDEに組み込むことで、ArduinoでATtiny13Aのプログラムが作れるようになります。
インストール
[Arduino] -> [Prederences]で環境設定を開きます。
追加のボードマネージャのURLに
を追加し、OKをクリックします。
[ツール] -> [ボード] -> [ボードマネージャ]で、ボードマネージャを開きます。
検索窓に「MicroCore」と入力します。するとMCUdudeのMicroCoreが表示されるので、インストールします。
いったんArduinoを終了させて、再度Arduinoを起動します。
[ツール] -> [ボード] -> [MicroCore] -> [ATtiny13] を選択すると、ATtiny13Aをプログラムできるようになります。
プログラムを作ってみる
MicroCoreのピンアサインはこのようになっています。
試しに、INT0ピンがLowになったら、スリープから復帰して、PB0,2,3,4につないだLEDを順番に点灯&消灯して、またスリープするというプログラムを作ってみます。
電池を使った省電力な電子工作には必要な、Sleepやピン変化割り込みを使うプログラムです。
純粋なC言語でプログラムを作ろうとすると、ATtiny13のいくつものレジスターを適切に設定しないといけませんが、Arduinoで作るととても簡単に作れます。
#include <avr/sleep.h> #include <avr/interrupt.h> #define LED1 3 #define LED2 4 #define LED3 0 #define LED4 2 #define Triger 1 void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(Triger, INPUT_PULLUP); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); } void wakeUpNow() { } void sleepNow() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); attachInterrupt(0, wakeUpNow, LOW); sleep_mode(); sleep_disable(); detachInterrupt(0); } int delayTime = 500; int stayTime = 5000; void loop() { //turn on digitalWrite(LED1, HIGH); delay(delayTime); digitalWrite(LED2, HIGH); delay(delayTime); digitalWrite(LED3, HIGH); delay(delayTime); digitalWrite(LED4, HIGH); delay(stayTime); //trun off digitalWrite(LED1, LOW); delay(delayTime); digitalWrite(LED2, LOW); delay(delayTime); digitalWrite(LED3, LOW); delay(delayTime); digitalWrite(LED4, LOW); sleepNow(); // sleep }
難しいレジスタの設定はプログラムにありません。こんなに簡単に書けてしまいます。
マイコンへは、AVRライタのAVRISP mkIIや、Arduino UNOを使ったArduino as ISPなどを使ってプログラムを書き込みます。
MCUdude/MicroCoreを使って、ATtiny13AのプログラムをArduinoで簡単に作れるようになりました。
8ピンDIPマイコンが簡単に扱えるようになったので、電子工作の幅が広がりますね。
コメント