PR 記事には広告が含まれています
スポンサーリンク
Translate

8ピンAVRマイコン ATtiny13AのプログラムをArduinoで作る方法

スポンサーリンク

ATtiny13Aは、DIP8ピンパッケージの電子工作しやすいAVRマイコンです。このマイコンをArduinoでプログラミングできるようにする方法をご紹介します。

スポンサーリンク

MCUdude MicroCore

Hansさんは、AVRマイコンをArduinoで開発できるようにする、ハードウェアパッケージをいくつも作っています。その中に、ATtiny13A用のMicroCoreというパッケージがあります。このパッケージをArduino IDEに組み込むことで、ArduinoでATtiny13Aのプログラムが作れるようになります。

スポンサーリンク

インストール

[Arduino] -> [Prederences]で環境設定を開きます。

追加のボードマネージャのURLに

https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

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