以前ブログでATtiny85というAVRマイコンをご紹介しました。
ATtiny85は指先にも乗るほどの非常に小型な8ビットマイコンとなり、Arduinoでも使われているAtmel(アトメル:現マイクロチップ)シリーズのAVRマイコンとなります。
Arduinoと比べると使えるI/O端子の数は最大6本と少し物足りないように感じますが、スケッチを書き込むことによりArduinoとして動かすことができます。
チップ単体でArduinoとして動作させることが出来るのは非常に面白く、このようなミニゲーム機なんかを作ることも出来ます。
この投稿をInstagramで見る
ATtinyシリーズのチップには、このATtiny85以外にも多くのチップがリリースされています。
よく見かけるメジャーなものでは使えるI/O端子の数が増え14ピンチップとなっているATtiny44やATtiny84、また20ピンのチップではATtiny2313やATtiny4314などがあります。
さらにピン数の多いチップや小さなものではATtiny10という米粒サイズのチップまで、非常に多くのATtinyシリーズのチップがあります。
これらATtinyシリーズのチップは開発環境にArduino IDEを使うことができ、ブートローダー&スケッチを書き込むことによりArduinoとして動作させることが出来るので、Arduinoの扱いに慣れてきたら試してみるのは面白くAVRマイコンの学習用としても最適です!
今回はATtiny45/ATtiny85など8ピンタイプのものより使えるI/O端子の数が増えたATtiny44やATtiny84にArduinoスケッチを書き込み動かす基本的な方法をご紹介したいと思います。
目次
ATtiny24/ATtiny44/ATtiny84にスケッチを書き込みArduinoとして動かしてみる!
冒頭でお話したようにATtiny85は8ピンしかない小型なAVRマイコンです。
使えるI/O端子の数は最大6本しかありませんが、小規模な回路の製作などでそのサイズが活かせます。
プログラム容量(Flash Memory)がArduinoと比べると少ないので使用するライブラリなど制限を受ける事がありますが、開発環境にArduino IDEを使うことができスケッチを書き込むことによりArduinoとして動かすことができます。
ATtiny85に関してこちらの記事で詳しく解説しているので合わせて見て頂ければと思います。
そして今回は、少しサイズが大きな14ピンチップとなるATtiny44/ATtiny84を使ってみたいと思います。
ATtiny24/ATtiny44/ATtiny84 スペック&ピンアウト
14ピンチップのATtinyには、ATtiny24/ATtiny44/ATtiny84などがあります。
14ピンタイプのATtinyチップではATtiny44やATtiny84を使ったプロジェクトはよく見かけます。
ATtiny85より使えるI/O端子の数が増え最大12本使うことが出来ます。
14ピンチップではATtiny24などもありますが、基本的にピン配置は同じとなりFlash MemoryやSRAM/EEPROMの容量などが異なっています。
ATtiny44A-PU 仕様 | |
動作電圧 | DC1.8V~5.5V |
I/O端子 | 最大12本 |
外部割り込み | 12 |
ADC | 8ch |
タイマ | 2ch(8bit×1/16bit×1) |
PWM出力 | 4 |
クロック(インターナル) | 最大8MHz |
外部クロック | 最大20MHz |
Flash Memory(プログラム) | 4kB |
EEPROM | 256B |
SRAM | 256B |
ATtiny84-20PU 仕様 | |
動作電圧 | DC2.7V~5.5V |
I/O端子 | 最大12本 |
外部割り込み | 12 |
ADC | 8ch |
タイマ | 2ch(8bit×1/16bit×1) |
PWM出力 | 4 |
クロック(インターナル) | 最大8MHz |
外部クロック | 最大20MHz |
Flash Memory(プログラム) | 8kB |
EEPROM | 512B |
SRAM | 512B |
駆動電源端子(VCC/GND)を除くと最大12本のI/O端子を使うことが出来ます。(データシート参照)
Arduinoとしてスケッチを書き込み動かす際に分かりやすいようにまとめると、ATtiny24/ATtiny44ATtiny84のピンアウトはこのようになります。
見ての通りチップ単体となりArduinoのようにスケッチを書き込むための書込装置が付いていないため、ブートローダーやスケッチの書き込みの際にはUSBaspなどのプログラマ(ライタ)と呼ばれる書込装置が必要となります。
Arduinoボードが1台あればArduinoISPを書き込み、このArduinoをライタとして機能させ書き込みを行うことも出来ます。
こちらではArduinoを使った書き込み方法で進めていきます。
Arduinoを書き込み装置として使う準備
ATtiny24/ATtiny44/ATtiny84のピンアウトの確認ができました。
ATtinyシリーズのチップはISPによる書き込みに対応しているので、SPI端子を使いUSBaspやArduinoボードを使いブートローダーやプログラム(スケッチ)を書き込むことが出来ます。
ArduinoをATtiny44やATtiny84の書き込み装置として機能させ、このArduinoを経由してブートローダーやスケッチの書き込みを行うというものです。
まずArduinoを書き込み装置として機能させるための以下準備が必要となります。
- ArduinoボードにArduinoISPスケッチを書き込む
- Arduino IDEにATtinyチップに対応したボードパッケージをインストール
①ArduinoボードにArduinoISPスケッチを書き込む
Arduinoを書込装置(ライタ)として機能させ、このArduinoボードを経由してATtinyチップにブートローダーやスケッチを書き込む事が出来るようにします。
こちらではArduino Unoを使って行っていきます。
Arduinoを書込装置として使う場合、[ArduinoISP]というスケッチを使います。
Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]の中にある[ArduinoISP]を開きます。
このスケッチを書込装置として使うArduinoボードに書き込みます!
通常のArduinoへの書き込みなので問題ないと思います。
これでこのArduinoを書込装置として機能させ、ATtiny44やATtiny85に限らず接続した各種ATtinyチップにブートローダーやスケッチの書き込みが行えるようになります。
②Arduino IDEにATtinyチップに対応したボードパッケージをインストール
次に各種ATtinyシリーズのチップに対応したボードパッケージのインストールです。
Arduino IDEの[環境設定(Preferences…)]から[追加のボードマネージャのURL]に以下URLを追加します。
http://drazzy.com/package_drazzy.com_index.json
他のボードマネージャのURLが記載されている場合は新たな行に追加して下さい!
次に[ツール]→[ボード]→[ボードマネージャ]に進みます。
[ATtiny]で検索するといくつかボードパッケージが出てきます。
この中にある[ATTinyCore by Spence Konde]を選択しこれをインストールします。
これで各種ATtinyチップにスケッチのコンパイル&書き込みが行えるようになります。
ボードパッケージのインストールが出来たのか確認しておきます。
[ツール]→[ボード]へと進むと先程はなかった[ATtinyCore]という項目が追加されています。
この中にある各種ATtinyシリーズのチップを選択する事により、Arduino IDEを使いコンパイル&スケッチの書き込みが行えます。
これで各種ATtinyチップをArduino IDEで扱う準備ができました。
書き込みの際のArduinoとの接続
Arduinoをライタ(書込装置)として使う準備が出来ました。
それではATtiny24/ATtiny44/ATtiny84にスケッチを書き込み動作させてみたいと思います。
ブートローダーやスケッチ書き込みの際はSPI端子(MOSI/MISO/SCK)およびRESET端子、VCC/GND端子が使われます。
14ピンのATtiny24/ATtiny44/ATtiny84では、この端子をArduinoの対応した端子と接続します。
この後のスケッチやブートローダーの書き込み手順も同じとなります!
Arduino UnoのSPI端子は、D11(MOSI)/D12(MISO)/D13(SCK)となります。
またリセットをかけるためのSS(Slave Select)はD10端子を使います。
これら端子を対応したATtinyチップの端子に接続するだけです。
Arduino Uno | ATtiny24/44/84 |
5V | VCC |
GND | GND |
D10 | RESET |
D11 | MOSI |
D12 | MISO |
D13 | SCK |
Arduinoを書き込み装置として使う場合のATtiny24/44/84との接続はこのようになります。
ブートローダーの書き込み
接続が出来たら、まずブートローダーの書き込みです。
チップによって少し異なりますが、ATtiny44/ATtiny84には[No bootloader]と[Optiboot]の2つのオプションが用意されています。
ATtiny24/ATtiny44/ATtiny84はブートローダーは必要がないため、[No bootloader][Optiboot]基本的にどちらを選択してもスケッチを書き込み動かすことができます。
そして、初めてチップを使う時に1度だけブートローダーを書き込む作業が必要となります。
この操作ではブートローダーを書き込むというより、ヒューズビットの設定(クロック周波数などの各種設定)を行うためです。
Arduino IDEでATtiny24/ATtiny44/ATtiny84を扱う際のデフォルトの動作周波数は8MHz(internal:内部クロック)となっています。
ブートローダーを書き込むという行為を行うことにより、動作周波数を8MHzに設定することが出来ます。(書き込む前の動作周波数は1MHzになっています)
先述のようにATtiny44/ATtiny84には[No bootloader][Optiboot]の2つのオプションが用意されていますが、こちらでは[No bootloader]を使って行っていきます。
それではブートローダーを書き込みます。
今回ATtiny84を使いましたが他のATtinyチップでも作業工程は同じです!
Arduino IDEの書き込み設定はこのようになります。
ボード設定は[ATtiny84]を選択し、[シリアルポート]はArduinoISPを書き込んだUnoを経由して行うので[Arduino Uno]、[書込装置]は[Arduino as ISP]を選択します。
Arduino IDEの書き込みの際の設定は以上です。
あとは[ブートローダを書き込む]を選択すれば、接続したATtinyチップにブートローダーの書き込みが行われます。
書き込みに問題がなければ、[ブートローダの書き込みが完了しました]と表示されます。
これでスケッチを書き込みATtinyチップを動かすことが出来るようになりました!
スケッチの書き込み
今回[No bootloader]を選択したのでブートローダー自体は書き込まれませんがヒューズビットが書き換えられ、内部クロック8MHzでちゃんと動作するようになります。
それではスケッチの書き込みです。
ATtiny84の13番ピン(D0)に接続したLEDを点滅させるこちらのLチカスケッチを書き込んでみます。
1 2 3 4 5 6 7 8 9 10 | void setup() { pinMode(0, OUTPUT); } void loop() { digitalWrite(0, HIGH); delay(1000); digitalWrite(0, LOW); delay(1000); } |
スケッチ書き込みの際のArduino IDEの設定および接続は先程のブートローダーを書き込んだ時と同じです。
スケッチの書き込みには[スケッチ]→[書込装置を使って書き込む]を使います。
これでATtinyチップに接続しているArduinoISPを書き込んだArduino経由で書き込みが行われます。
スケッチを書き込みATtiny84の13番ピン(D0)に接続したLEDが1秒間隔で点滅すれば成功です!(チップを駆動するVCC/GND端子も接続して下さい)
【メモ】ブートローダーのオプション
ATtiny44/ATtiny84をArduino IDEでプログラムする際には、[No bootloader]と[Optiboot]という2つのオプションが用意されています。
No bootloader(ブートローダーなし)
ATtiny24/ATtiny44/ATtiny84はブートローダーなしで動かす事が出来ます。
書き込む際に[ボード]設定に[ATtiny24/44/84(No bootloader)]を選択すればブートローダーなしでスケッチの書き込みが行なえArduinoスケッチを動かす事が出来ます。
今回ATtiny84に[No bootloader]を選択しスケッチの書き込みを行いました。
こちらを選択するのが一般的な使い方になるのでしょうか?
この操作ではブートローダーを書き込むというより、ヒューズビットの設定(クロック周波数などの各種設定)が行われます。(今回行った方法です!)
Optibootブートローダー
ATtiny44/ATtiny84には[Optiboot]というオプションも用意されています。
OptibootブートローダーとはArduinoが用意しているブートローダーとなります。
通常Arduino IDEを使用して各種Arduinoボードを使う場合、Optibootブートローダーが使われています。
Arduino IDEはOptibootブートローダーと通信する事によりシリアルポートを介してスケッチの書き込みが行われています。
Optibootブートローダーを書き込みATtiny44/ATtiny84を動かすことももちろん可能です。
ATtiny85ではOptibootブートローダーを書き込みUSB-シリアルコンバーターからのスケッチ書き込みも行ってみました。
参考までに!
ATtiny44/ATtiny84を使った作例
ATtiny44/ATtiny84はATtiny85と比べ使えるI/O端子の数が最大12本と増えています。
これくらいの数あればI2CやSPI機器との接続に加え使えるI/O端子もまだ多く残ることから、製作物で便利に使えそうです。
以前Arduinoを使った無線コントローラーを作ったのですが、これがなかなか便利で面白く・・・
機能を限定したこのようなキーホルダーサイズのミニ無線コントローラーの製作も考えています。
SPI接続の無線モジュールにI/O端子を5本、操作スイッチを6個入れてもATtiny44やATtiny84を使えば収まる計算です。
SMD(表面実装)タイプのチップを使えば、約4cm×5cmくらいのサイズに収めることが出来るので面白そうですね。
ATtiny44では1.8V~、またATtiny85では2.7V~の駆動が可能なので、小型なボタン電池でも駆動する事が出来そうです!
この投稿をInstagramで見る
このようにATtinyシリーズのチップは開発環境にArduino IDEを使うことができ、Arduinoスケッチで動かすことが出来るので普段Arduinoを使った電子工作をやっていると製作の際の候補の一つに入れることができ使えるようになると重宝しますね!
書き込み基板を自作すると便利です!
Arduinoスケッチを書き込み動作確認が出来ました。
ATtiny24/ATtiny44/ATtiny84は、Arduinoと比べると少ないですが使えるI/O端子が最大12本ありATtiny85と比べると多くなっています。
プログラム容量(フラッシュメモリー)やSRAM等の容量はArduino Unoと比べると少ないため制限を受ける場面も出てくるかもしれませんが、Arduinoほどのスペックは必要なく小型に(小規模な回路)収めたい時などで便利に使えそうですね!
しかし本記事でご紹介したように、開発やテスト段階ではスケッチを書き込む際に毎回ブレッドボードを使い配線するのは結構面倒な作業となります。
接続自体はSPI端子およびRESET端子をArduinoの対応した端子と接続するだけと簡単なため、ユニバーサル基板などを使い書き込み用のボードを自作しておくと便利だと思います!
こちらはATtiny13やATtiny85などの8ピンATtinyチップ用に自作した基板です。
このようなATtiny書き込み用の基板は多く販売されていますが、簡単なので自作した方が手っ取り早いかもしれませんね!
8ピン・14ピン・20ピンの各種ATtinyチップの書き込みで使えるこのような基板も製作し現在基板を発注しています。
またArduino Unoの基板サイズとなったこのようなシールド用ユニバーサル基板も販売されているので、ICソケットを取り付けよく使うATtinyチップのピン数に合った書き込みシールドを自作しておくと便利に使えると思います。
【追記】USB-シリアル変換モジュールを使いシリアル通信を行う!
多くのATtinyチップにはハードウェアシリアルが搭載されていませんが、USB-シリアル変換モジュールと接続しArduinoのようにSoftwareSerial(ソフトウェアシリアル)によるシリアル通信を行うことは可能です。
デバッグ等でArduino IDEのシリアルモニタを使うなど役立ちます!
最後に!
ATtinyシリーズのチップは、電子工作を始めた頃にいろんなプロジェクトで使われているのを見て各種チップを入手して持っていたのですが、Arduinoの扱いに少し慣れてくると使ってみるのは非常に面白いですね!
今回14ピンタイプのATtiny44やATtiny84を見ていきましたが、さらに使えるI/O端子の数が増え20ピンタイプとなっているATtiny2313やATtiny4313など、さらに多くのATtinyシリーズのチップがリリースされています。
また別記事で詳しくご紹介できればと思います。
あとピン数の多いチップを扱う場合、このような治具があると便利なので合わせて見て頂ければと思います。
[…] ATtiny24/44/84をArduinoとして動かす基本的な方法! […]