11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【ATtiny】各種ATtinyチップをArduino IDEを使って開発する方法まとめ!ブートローダーやArduinoスケッチの書き込み方法!

先日、ATtiny85というAVRマイコンを使って動かすミニゲーム機『Tiny Joypad』互換ボードを作ったのですが、これがかなり面白く・・・

【電子工作】ミニAVRマイコンATtiny85で動かすミニゲーム機『Tiny Joypad』互換ボードを作ってみました!【JLCPCB】

ATtiny85は8ピンしかない非常に小さなAVRマイコンですが、こんな小さなマイコンチップでもスケッチを書き込むことによりArduinoとして動かすことができます。
I/O端子の数は限られてしまいますが、マイコンを使った小規模な回路を組む場合に適しています。

ATtinyシリーズのチップにはATtiny85以外にも14ピンとなるATtiny44やATtiny84、20ピンとなるATtiny2313やATtiny4313など多くのチップがリリースされています。
使えるI/O端子の数やプログラム(スケッチ)を書き込むためのフラッシュメモリーの容量などにより使い分けることが出来るわけですが、それにしても非常に多くのATtinyチップが存在します。

ATtinyシリーズのチップはSNSなどを見ていると多くのプロジェクトで使われているのを目にします。
一般的によく使われるATtinyは私もいくつか持っており、これまで簡単なArduinoスケッチを書き込んで動作確認などやっていましたが、最近Kicadを使った基板設計なども行うようになったことからATtinyチップを使った製作物をいくつか作りました。

スペックの高いArduinoを使うまでもなく、回路をコンパクトにまとめたりといった上記Tiny Joypadのようなプロジェクトには有効に使うことが出来ます。

ATtiny84を使ったこのようなミニ無線コントローラーも製作してみましたが、上手くこのサイズに収めることが出来ました。

ATtinyはArduinoと同じAtmel(アトメル)のAVRマイコンとなり、ブートローダーを書き込みArduinoスケッチを書き込む事によりArduinoとして動作させることができ、その開発環境もArduino IDEを使うことができます。
Arduinoの扱いに少し慣れてきたら使ってみるのも面白いと思います。

ATtinyを使った製作物をいくつか作ってみたのですが、先述のようにATtinyは非常に多くの数のチップがリリースされておりピン数の違い(8ピン/14ピン/20ピンなど)によりVCC/GND/SPI端子の位置が異なるため、スケッチ書き込みや動作させる際の接続に迷ってしまうことが多いことから、一般的によく使われる(入手しやすい)ATtinyシリーズのチップのスペックやピンアウト、スケッチ書き込み方法などを自分への備忘録も兼ねてまとめてみました。

各種ATtinyチップまとめ!ブートローダーやArduinoスケッチを書き込む方法!

ATtinyとは?

ATtinyシリーズのチップには代表的なもので、8ピンタイプとなるATtiny13/ATtiny45/ATtiny85、14ピンタイプのATtiny24/ATtiny44/ATtiny84、20ピンタイプのATtiny2313/ATtiny4313などがあります。

スペック(Flash/EEPROM/SRAMなど)や使えるI/O端子の数などに違いがあり、これ以外にも多くのATtinyチップがリリースされています。

ATtinyシリーズのチップはArduinoでも使われているAtmel(アトメル:現マイクロチップ)のAVRマイコンとなります。
スケッチを書き込むことによりArduinoとほぼ同様に動かすことができ、開発環境もArduino IDEを使って行うことが出来ます。
Arduinoの扱いに少し慣れてくると使ってみるのは面白いと思います。

ATtinyチップ単体ではArduinoのようにボードに書き込み装置が付いているわけではないので、Arduinoを経由したりUSBaspなどのAVRライタやプログラマといった書き込み装置を使ってATtinyチップにブートローダーやスケッチの書き込みを行う必要があります。

ATtinyはISPによる書き込みに対応しているので、書き込みの際の接続はSPI接続によるやり取りとなります。
ATtinyチップのピン数の違い(8ピン/14ピン/20ピンなど)により接続する端子の位置が異なり、またスペックやピンアウトの違いなどがあるため、Arduino IDEを使ったブートローダーやスケッチ書き込み方法などを簡単にまとめてみました。

ATtiny25/ATtiny45/ATtiny85

8ピンタイプのチップには、ATtiny13/ATtiny25/ATtiny45/ATtiny85などがあります。
表面実装タイプ(SMD)のチップもありますが、ブレッドボードに挿して使えるDIP形状のものを見ていきます。

8ピンともなるとDIP形状のチップでも指先に乗るほどの小さなチップとなります。

米粒サイズのATtiny10なんていうさらに小型なチップもありますが、プログラムメモリの容量やサイズなどから一般的な電子工作用途では8ピン以上のものが扱いやすくなるかと思います。

ATtiny25/45/85は2005年にATtinyシリーズ第3段として発表されたArduinoでも使われているATmegaシリーズとほぼ同じ機能を持つAVRマイコンで、Arduinoの開発環境をそのまま使うことが出来ます。

ISPによる書き込みに対応しているので、USBaspやArduinoボードを使いブートローダーやプログラム(スケッチ)を書き込むことが出来ます。

まず簡単にスペックをまとめておきます。

ATtiny45-20PU
動作電圧DC2.7V~5.5V
I/O端子最大6本
外部割り込み6
ADC4ch
タイマ2ch(8bit)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)4kB
EEPROM256B
SRAM256B
ATtiny85-20PU
動作電圧DC2.7V~5.5V
I/O端子最大6本
外部割り込み6
ADC4ch
タイマ2ch(8bit)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)8kB
EEPROM512B
SRAM512B
参考 ATtiny25/ATtiny45/ATtiny85 データシートAtmel
MEMO
25/45/85のあとに”V”が付いた低電圧動作版もあるようです。
「ATtiny25V-10PU」「ATtiny45V-10PU」「ATtiny85V-10PU」では動作速度は最大10MHzとなりますが、動作電圧は1.8Vからの駆動が可能となっています。(1.8~5.5V)

ATtiny25/ATtiny45/ATtiny85 ピンアウト

8ピンタイプのATtiny25/45/85のピン配置はこのようになっています。(上記データシート参照)
駆動電源端子(VCC/GND)を除くと最大6本のI/O端子を使うことが出来ます。

Arduinoと比べると使えるI/O端子の数が少なく感じてしまうかもしれませんが、外部にクリスタル(発振器)を接続することなく内部クロック(最大8MHz)で単独で動作させることが出来ます。

このようなミニゲーム機を構成しArduinoスケッチを動かすことが出来るのは本当に面白いですね!

【Arduino】ATtiny85を使ったミニゲーム機『Tiny Joypad』をブレッドボードで組んで遊んでみる!

Arduinoとしてスケッチを書き込み動かす際に分かりやすいようにまとめると、ATtiny25/ATtiny45/ATtiny85のピンアウトはこのようになります。

MEMO
ヒューズビットを書き換えることにより外部接続したクリスタルを使い最大20MHzで動作をさせたり、[RESET]端子を完全に無効にしてアナログ端子(ADC)として使ったりすることも出来ますが、これらに関してはこちらの記事では割愛させて頂きます。

ブートローダーやスケッチを書き込む際の接続

ATtinyチップは見ての通り、Arduinoボードのようにスケッチを書き込むための書き込み装置が付いていません。

ATtinyはISPによる書き込みに対応しているので、ブートローダーやスケッチの書き込みにはUSBaspやArduinoボードを経由して書き込むことが出来ます。

ATtiny25/ATtiny45/ATtiny85への書き込みには、この端子が使われます。

USBaspといったAVRライタやプログラマがあれば接続や書き込みが簡単に出来ますが、こちらではArduinoボードを使い書き込む方法で進めていきます。

【電子工作】Arduino(AVRマイコン)のブートローダー書き込みにUSBaspを使ってみる!

Arduinoを書き込み装置として使う場合の接続はこのようになります。
ArduinoのSPI端子はボードによって変わってきますが、Arduino UnoやNanoではD11(MOSI)・D12(MISO)・D13(SCK)、そしてリセットをかけるためのSS(Slave Select)端子はD10を使います。

Arduinoとの接続はこのようになります。

Arduino UnoATtiny25/45/85
5V8番ピン(VCC)
GND4番ピン(GND)
D11(MOSI)5番ピン(MOSI)
D12(MISO)6番ピン(MISO)
D13(SCK)7番ピン(SCK)
D10(SS)1番ピン(RESET)

MEMO
ATtiny13やATtiny15など他の8ピンATtinyチップでも接続は同じです。
MEMO
上記回路図ではArduinoの[RESET][GND]端子間に10μF程度の電解コンデンサを入れています。
書き込みの際にエラーが発生するようなら入れて下さい!

接続ができたらブートローダーやスケッチの書き込みを行いますが、他のATtinyチップの仕様等を確認したあと次の項目で見ていきます。

また、ATtiny45やATtiny85の基本的な使い方はこちらの記事で詳しく解説しているので、合わせて読んで頂ければと思います。

ミニAVRマイコン『ATtiny85』にブートローダーを書き込みArduinoとして使えるようにしてみる!ATtiny85の基本的な使い方!

ATtiny44/ATtiny84

14ピンタイプのATtinyチップには、ATtiny24/ATtiny44/ATtiny84などがあります。
ピンの数が増え、8ピンタイプのATtiny45/85より使えるI/O端子の数が増えています。

ATtiny44A-PU
動作電圧DC1.8V~5.5V
I/O端子最大12本
外部割り込み12
ADC8ch
タイマ2ch(8bit×1/16bit×1)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)4kB
EEPROM256B
SRAM256B
ATtiny84-20PU
動作電圧DC2.7V~5.5V
I/O端子最大12本
外部割り込み12
ADC8ch
タイマ2ch(8bit×1/16bit×1)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)8kB
EEPROM512B
SRAM512B
参考 ATtiny24/44/84データシートmicrochip.com
MEMO
低電圧動作版となる[ATtiny44V-10PU][ATtiny84V-10PU]では、動作速度は最大10MHz、動作電圧1.8~5.5Vとなっています。

ATtiny24/ATtiny44/ATtiny84 ピンアウト

14ピンタイプのATtiny24/44/84のピン配置はこのようになっています。(上記データシート参照)
駆動電源端子(VCC/GND)を除くと最大12本のI/O端子を使うことが出来ます。

Arduinoとしてスケッチを書き込み動かす際に分かりやすいようにまとめると、ATtiny24/ATtiny44ATtiny84のピンアウトはこのようになります。

ブートローダーやスケッチを書き込む際の接続

ブートローダーやスケッチ書き込みの際は同様にSPI端子が使われます。
8ピンタイプのATtinyチップと位置が異なりますがArduinoとの接続は同じです。

ATtiny24/ATtiny44/ATtiny84への書き込みには、この端子が使われます。

Arduinoを書き込み装置として使う場合の接続はこのようになります。

Arduino UnoATtiny24/44/84
5V1番ピン(VCC)
GND14番ピン(GND)
D11(MOSI)7番ピン(MOSI)
D12(MISO)8番ピン(MISO)
D13(SCK)9番ピン(SCK)
D10(SS)4番ピン(RESET)

また、ATtiny44やATtiny84の基本的な使い方はこちらの記事で詳しく解説しているので、合わせて読んで頂ければと思います。

ATtiny24/ATtiny44/ATtiny84をArduinoとして動かす基本的な方法!

ATtiny2313/ATtiny4313

20ピンタイプのATtinyチップには、ATtiny2313/ATtiny4313などがあります。
ピンの数が増え、使えるI/O端子の数がさらに増えています。

ATtiny2313A-20PU
動作電圧DC1.8~5.5V(8MHz動作時2.7V~)
I/O端子最大18本
外部割り込み18
ADCなし
タイマ2ch(8bit×1/16bit×1)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)2kB
EEPROM128B
SRAM128B
ATtiny4313-PU
動作電圧DC1.8~5.5V(8MHz動作時2.7V~)
I/O端子最大18本
外部割り込み18
ADCなし
タイマ2ch(8bit×1/16bit×1)
PWM出力4
クロック(インターナル)最大8MHz
外部クロック最大20MHz
Flash Memory(プログラム)4kB
EEPROM256B
SRAM256B
参考 ATtiny2313A/ATtiny4314データシートmicrochip.com

ATtiny2314/ATtiny4313 ピンアウト

20ピンタイプのATtiny2313やATtiny4313のピン配置はこのようになっています。(上記データシート参照)
駆動電源端子(VCC/GND)を除くと最大18本のI/O端子を使うことが出来ます。

Arduinoとしてスケッチを書き込み動かす際に分かりやすいようにまとめると、ATtiny2314/ATtiny4313のピンアウトはこのようになります。

ブートローダーやスケッチを書き込む際の接続

ブートローダーやスケッチ書き込みの際は同様にSPI端子が使われます。

Arduinoを書き込み装置として使う場合の接続はこのようになります。

Arduino UnoATtiny2313/ATtiny4313
5V20番ピン(VCC)
GND10番ピン(GND)
D11(MOSI)17番ピン(MOSI)
D12(MISO)18番ピン(MISO)
D13(SCK)19番ピン(SCK)
D10(SS)1番ピン(RESET)

また、ATtiny2313やATtiny4313の基本的な使い方はこちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。

ATtiny2313/ATtiny4313をArduinoとして動かしてみる!

Arduinoを書き込み装置として使う準備

一部となりますが、よく使われる各種ATtinyチップのスペックやピンアウトの確認が出来ました。

ATtinyはISPによる書き込みに対応しているので、USBaspやArduinoボードを使いブートローダーやプログラム(スケッチ)を書き込むことが出来ます。

USBaspといった書き込み装置を使うと接続が簡単に出来ますが、こちらではArduinoボードを使った書き込み方法で進めていきます。
接続方法等、作業手順は同じです!

【電子工作】Arduino(AVRマイコン)のブートローダー書き込みにUSBaspを使ってみる!

Arduinoボードを書き込み装置として機能させ各種ATtinyチップにブートローダーやスケッチの書き込みを行ってみます。

まずArduinoを書き込み装置として機能させるための以下準備が必要となります。

Arduinoを書き込み装置として使う準備
  1. ArduinoボードにArduinoISPスケッチを書き込む
  2. 各種ATtinyチップに対応したボードパッケージのインストール

①ArduinoボードにArduinoISPスケッチを書き込む

Arduinoを書き込み装置として機能させ、このArduinoボードを経由してATtinyチップにブートローダーやスケッチを書き込む事が出来るようにします。
こちらではArduino Unoを使って行います。

MEMO
他のArduinoボードを使うことも出来ますが、ArduinoはボードによってSPI端子が決まっているので確認して下さい!

Arduinoを書き込み装置として使う場合、[ArduinoISP]というスケッチを書き込みます。

Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]の中にある[ArduinoISP]を開きます。

このスケッチを書き込み装置として使うArduinoボード(こちらではArduino Unoを使います)に書き込めば完了です!

これでこのArduinoを書き込み装置として機能させ、接続された各種ATtinyチップにブートローダーやスケッチの書き込みを行うことが出来るようになります。

②ATtinyチップに対応したボードパッケージのインストール

次にボードパッケージのインストールです。
Arduino IDEの[環境設定(Preferences…)]から[追加のボードマネージャのURL]に以下URLを追加します。

他のボードマネージャのURLが記載されている場合は新たな行に追加して下さい!

http://drazzy.com/package_drazzy.com_index.json

次に[ツール]→[ボード]→[ボードマネージャ…]に進みます。

[ATtiny]で検索するといくつかボードパッケージが出てきます。
[ATTinyCore by Spence Konde]を選択しこれをインストールします。
これで各種ATtinyにスケッチのコンパイル&書き込みが行えるようになります。

ボードパッケージのインストールが出来たのか一応確認しておきます。
[ツール]→[ボード]へと進むと先程はなかった[ATtinyCore]という項目が追加されています。

この中にある各種ATtinyチップを選択する事により、コンパイル&スケッチの書き込みが行えます。
ATtinyはかなり多くのチップがあるんですね!

これで各種ATtinyチップをArduino IDEで扱う準備ができました!

ブートローダーの書き込み(ヒューズビットの変更)

それではATtiny85を例に実際にスケッチを書き込んで動かしてみます。
他のATtinyに書き込みを行う場合は、Arduinoとの接続が異なるだけで書き込み手順は同じです!

ATtinyはブートローダーを必要としませんが、ATtinyチップを初めて使う際に一度だけ書き込みを行う必要があります
これは動作速度(クロック周波数)をArduino IDEのデフォルト設定(8MHz)にするために、初めて書き込む際に1度だけ実行して下さい!

MEMO
1MHzで動作させたい場合は必要ありません!

ATtinyチップは初期状態で1MHzでの動作になっています。
ここで行うブートローダーの書き込みを行うことにより8MHz動作に変更することが出来ます。

これはATtinyチップに実際にブートローダーを書き込むわけではなく、ヒューズビット(クロック周波数などの各種設定)を変更するために行います。

それではブートローダーを書き込みます。
書き込みの際のボード設定等はこのようになります。

ArduinoISPを書き込んだArduino Unoを経由して書き込みを行うので、[書込装置]は[Arduino as ISP]、[シリアルポート]は接続したArduino Unoを経由して行うので[Arduino Uno]を選択します。

そして今回書き込む対象はATtiny85なのでこれを選択しておきます。

ATtinyCoreボードパッケージには、ATtinyチップにより[No bootloader][Optiboot]そして[Micronuclesus/DigiSpark]というオプション項目が用意されているチップもあります。

ATtinyを動かすには実際にはブートローダーは必要としないので、基本的に[No bootloader]を選択しておけば問題ありません!

これでArduino IDEの設定は完了です。
この設定は次の項目のスケッチを書き込む際も同様です!

MEMO
他のATtinyチップを使う場合も作業手順は同じです!
対応したチップ名を選択して下さい。

あとは[ブートローダを書き込む]を選択し、[ブートローダの書き込みが完了しました。]と表示されれば完了です。

スケッチの書き込み

それではスケッチの書き込みです。
ATtiny85の3番ピン(D4)に接続したLEDを点滅させるLチカスケッチを書き込んで動作確認してみます。

Arduino IDEの[ファイル]→[スケッチ例]→[01.Basics]の中にある[Blink]を選択します。
ATtiny85の3番ピン(D4)に接続したLEDを点滅させるので、スケッチの[LED_BUILTIN]部分を[4]に変更します。
こんな感じですね!

スケッチ書き込みの際の接続およびボード設定は、先程のブートローダーを書き込んだ時と同じです。

スケッチの書き込みは、[スケッチ]から[書込装置を使って書き込む]を選択し書き込みます。

ATtiny85の3番ピン(D4)に接続したLEDが1秒間隔で点滅すれば成功です!

他のATtinyチップにスケッチを書き込む場合も手順は同じです。

書き込みの際に使うSPI端子(MOSI/MISO/SCK)およびRESET端子、またVCC/GND端子はATtinyチップのピン数により位置が異なっています。
他のATtinyチップにスケッチを書き込む場合の接続は前項目の接続図を参考にして下さい。

書き込み用基板を自作すると便利です!

ATtinyチップにブートローダーやスケッチを書き込む際には、上記のようにArduinoやUSBaspなどの書き込み装置を用意して接続する必要があります。

ブレッドボードを使った接続になりますが、毎回書き込みの際にこれを用意するのは結構面倒となります。
またATtinyチップにより駆動電源端子やSPI端子の位置が異なるので、これまた面倒な作業になります。

こちらは8ピンATtinyチップに書き込むための自作ボードです。
このような書き込みボードは簡単に作れるので、各ATtinyチップに対応したものを自作しておくと便利だと思います。

また複数のATtinyチップを扱う場合、このような各種ATtinyチップに対応したArduinoの書き込みシールド基板があると便利です!

【ATtiny】各種ATtinyチップにブートローダーやスケッチを書き込む際に使えるArduinoシールド基板の製作!

Arduinoシールド用基板は販売されているので、各種ATtinyチップを扱う際には簡単に製作出来るので自作しておくと便利だと思います。

ATtinyを使った作例

ATtinyは多くのプロジェクトで使われているのをよく目にします。

冒頭でご紹介したATtiny85を使った『Tiny Joypad』はオープンソースで回路図やゲームデータなども公開されているので、ブレッドボードを使って簡単に作り遊ぶことが出来ます。

【Arduino】ATtiny85を使ったミニゲーム機『Tiny Joypad』をブレッドボードで組んで遊んでみる!

結構面白いゲーム機なのでオリジナル基板を製作して完成させました。

【電子工作】ミニAVRマイコンATtiny85で動かすミニゲーム機『Tiny Joypad』互換ボードを作ってみました!【JLCPCB】

また、ATtiny84を使ったこのようなミニ無線コントローラーも作ってみました。

ネットで探せばATtinyを使ったプロジェクトは多く見つかるので、探して参考にしてみるのも面白いと思います!

【追記】新しいATtinyシリーズで採用されたUPDIによる書き込み方法をまとめてみました!

ArduinoやATtinyなどでおなじみのAVRマイコンのAtmel(アトメル社)は2016年にマイクロチップ・テクノロジー社(Microchip Technology Inc.)に買収され、それ以降に発売されたチップではICSPでの書き込みからUPDIによる書き込み方法に変更されています。

ATtinyシリーズのチップではATtiny202やATtiny404といったtinyAVR 0シリーズやATtiny212やATtiny414といったtinyAVR 1シリーズなどです。
またArduinoでも使われているATmega328Pの上位版?となるATmega4809といったmegaAVR 0シリーズのチップも同様で、その書き込み方法にはUPDIが採用されています。

これら新しいタイプのATtinyチップで採用されたUPDIでの書き込み方法もまとめてみました!
合わせて読んで頂ければと思います。

【Arduino】新しいATtiny(tinyAVR 0/1/2シリーズ)やmegaAVR 0シリーズなどで採用されたUPDIによる書き込み方法! Arduino IDEで環境を構築する!

最後に!

ATtinyは多くのチップがリリースされていますが、手元にあったよく使われている?ものを見ていきました。

今回見ていったDIP形状のチップはブレッドボードやユニバーサル基板で試すことが出来るので、AVRマイコンの学習用としても面白いと思います。

また同チップでも表面実装タイプ(SOPやQFN)のものもあるので、製作物で使いたい場合にはさらに小型化する事も出来ます。

Arduinoと比べると使えるI/O端子の数が限定されたり、ライブラリ等を使う際にプログラム容量に制限を受けてしまう場面もあるかもしれませんが、小規模なプロジェクトで便利に使うことが出来ると思います。

Arduinoの扱いに少し慣れてきたら使ってみるのは面白く、また使ってみると逆にArduinoに関しても理解が深まると思います。

コメントを残す