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マイコンが簡単に扱えるようになったので、電子工作の幅が広がりますね。












コメント