AVRマイコン ATtiny13aとボタン電池でLチカ

# はじめに
* 前からずっと気になってたが、いつも在庫切れだったATtiny13Aをゲットした。
    * Raspberry Pi、Arduino UNO/Nano、ESP8266/32、M5Stackと一通り使い、気になっていたのがこの8ピンの小さいマイコン。
    * 普段Arduinoとして使ってるのは、ATmega（ATmega328とか）で、こっちはちっちゃくて省電力なATtiny。
    * ボタン電池で駆動でき、Arduinoでも開発できると言うことなので、とりあえずLチカまでやってみた。
* 最終的にこんなにシンプルな構成で回路が組めたので、忘れない内にメモしておく。

![IMG_3561D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/1efee583-0b99-aec7-e8b2-0c301085abaf.jpeg)


# ATtiny13A-PU

![IMG_3564.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/7dc2930b-3734-7588-0647-be17c3e7bb2c.jpeg)

* Atmel社製の1個85円の超安価な8bitマイコン。
    * 電源電圧：1.8～5.5V。
    * GPIO：6個
    * ADC, PWMが使える。
    * 現在、秋月で[1個85円](https://akizukidenshi.com/catalog/g/gI-02911/)。
* CR2032のボタン電池で動かせるので、用途を絞ればかなりコンパクトに作れる。
* AVRはPICと比較されるみたいだが、PICみたいに専用のライターが無くても、Arduinoをライターにして書き込むことが出来る。
    * (ちなみに、PICはまだ使った事がない。。。)


# 開発環境

* MacOSX Catalina
* Arduino IDE 1.8.15


# 書き込み環境の構築
* 最初にArduinoを書込みデバイスにする。
    * 今回はどの家庭にも必ず１つはあるArduino Unoを使用する。

![IMG_3562D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/16d5356a-d740-37c4-acbc-3848cf648c3f.jpeg)

* Arduino IDEを起動
    * ボードはArduino Unoを選択。

![スクリーンショット 2021-06-09 23.29.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/504742dd-2aae-d7c1-19b2-02e75e524357.png)

* `スケッチ例 --> 11. ArduinoISP --> ArduinoISP`を開いて書き込む。
    * これで手持ちのArduino Unoがライターになった。

![スクリーンショット 2021-06-09 23.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/19218919-2f4a-6b9d-c7a7-19bcd73c8a91.png)

これでライターの準備は完了。
次はATTiny13のプログラムを用意していく。

# ATTiny13用のボード設定

## ボードマネージャへの追加

* 引き続き、Arduino IDEで以下のURLを「追加のボードマネージャのURL」に追加。
    * `https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json`
* ここで注意。
    * 最初、ググって見つけた別のライブラリを使ったところ、古いArduinoでしか使えない物だったらしく、一応書き込めるが`delay();`が指定した時間以上の動きだったり、期待通りに動かなかった。
    * こっちのライブラリは素直で特に問題も無く使用できたので、`Arduino IDE 1.8.15`あたりを使う場合はこちらが良い。

![スクリーンショット 2021-06-09 23.17.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/aaa0efc6-659d-83c8-31e7-f0147e059f26.png)

* `ツール  -> ボード  --> ボードマネージャ`を開き、`attiny`で検索。
    * MicroCoreが出てくるのでこれをインストールする。

![スクリーンショット 2021-06-09 23.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/e5da04a1-6293-37d2-3149-b1acc9d8e334.png)

* `ツール  -> ボード  --> MicroCore  --> ATtiny13`を選択。

![スクリーンショット 2021-06-09 23.21.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/3bdddeb6-b27f-de32-ccc0-1c067fd91d9e.png)


## 配線

![スクリーンショット 2021-06-09 20.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/da2d189f-d241-f5f0-ef47-1ff49a12661c.png)

Arduinoとの接続はこんな感じ。

| Arduino Uno | ATtiny13 |
|:------------|:---------|
| 5V          | 8:VCC    |
| GND         | 4:GND    |
| D10         | 1:PB5    |
| D11         | 5:PB0    |
| D12         | 6:PB1    |
| D13         | 7:PB2    |

また、ATtiny13の1,4ピンに10uFのコンデンサを入れておく。


![IMG_3563D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/0ffa4162-df5f-3bd3-979f-5ae360b9141c.jpeg)


# コード


```c:blink.c
#define PIN 3
#define DTIME 1000
#define DTIME2 100

void setup() {
  pinMode(PIN, OUTPUT);
}

void loop() {
  digitalWrite(PIN, HIGH);
  delay(DTIME);
  digitalWrite(PIN, LOW);
  delay(DTIME);
  digitalWrite(PIN, HIGH);
  delay(DTIME2);
  digitalWrite(PIN, LOW);
  delay(DTIME2);
  digitalWrite(PIN, HIGH);
  delay(DTIME2);
  digitalWrite(PIN, LOW);
  delay(DTIME2);
  digitalWrite(PIN, HIGH);
  delay(DTIME2);
  digitalWrite(PIN, LOW);
  delay(DTIME);
}
```

# 書込み

* `ツール --> 書込装置  -> Arduino as ISP`を選択。
    * `AVR ISP`じゃないので注意。
* 書き込みは１秒前後でサクッと終わる。
    * 自分の場合、3回中、2回は書き込みに失敗するので、何度かリトライする必要がある。
    * もしかして`RESET/GND`に電解コンデンサ挟んでるせいかも？

![スクリーンショット 2021-06-09 23.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283854/4fddd037-0e96-8d9d-f6a6-19c5897a2fe4.png)


# 動作確認（Lチカ）

* `PB3/GND`に抵抗とLEDをつないでLチカ。
* 電源はCR2032を使用。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ATtiny13でボタン電池からLチカできた。<br>現行のArduino IDEだと、以下のボードマネージャー使うと良いらしい。<br>小さくて良いなコレ。<a href="https://t.co/aNKwVJlFsZ">https://t.co/aNKwVJlFsZ</a> <a href="https://t.co/diNCtrDaYy">pic.twitter.com/diNCtrDaYy</a></p>&mdash; Nabeshin (@desmoquattro996) <a href="https://twitter.com/desmoquattro996/status/1402629698098581511?ref_src=twsrc%5Etfw">June 9, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# まとめ
* 初めて使ったけど、ATtinyお手軽コンパクトでなかなか良い。
    * 用途を限定すれば、ボタン電池で小さいおもちゃが作れちゃう。
    * PWMとかADCとか使えるので、後で試したい。
* 実はこのATtiny、米粒AVRと呼ばれる[ATtiny10](https://akizukidenshi.com/catalog/g/gI-04575/)なんてのがあるらしい。
    * 次回秋月で買い物する時はぜひこれ買っとこう。

# 参考資料
* https://avr.jp/user/DS/PDF/tiny13A.pdf
* https://github.com/MCUdude/MicroCore.git