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

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

以前ブログでATtiny85というAVRマイコンをご紹介しました。
ATtiny85は指先にも乗るほどの非常に小型な8ビットマイコンとなり、Arduinoでも使われているAtmel(アトメル:現マイクロチップ)シリーズのAVRマイコンとなります。

Arduinoと比べると使えるI/O端子の数は最大6本と少し物足りないように感じますが、スケッチを書き込むことによりArduinoとして動かすことができます。
チップ単体でArduinoとして動作させることが出来るのは非常に面白く、このようなミニゲーム機なんかを作ることも出来ます。

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

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に関してこちらの記事で詳しく解説しているので合わせて見て頂ければと思います。

ミニAVRマイコン『ATtiny85』にブートローダーを書き込み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
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となっています。

駆動電源端子(VCC/GND)を除くと最大12本のI/O端子を使うことが出来ます。(データシート参照)

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

見ての通りチップ単体となりArduinoのようにスケッチを書き込むための書込装置が付いていないため、ブートローダーやスケッチの書き込みの際にはUSBaspなどのプログラマ(ライタ)と呼ばれる書込装置が必要となります。

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

Arduinoボードが1台あればArduinoISPを書き込み、このArduinoをライタとして機能させ書き込みを行うことも出来ます。
こちらではArduinoを使った書き込み方法で進めていきます。

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

ATtiny24/ATtiny44/ATtiny84のピンアウトの確認ができました。

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

ArduinoをATtiny44やATtiny84の書き込み装置として機能させ、このArduinoを経由してブートローダーやスケッチの書き込みを行うというものです。

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

Arduinoを使ってATtinyチップに書き込む際の準備
  1. ArduinoボードにArduinoISPスケッチを書き込む
  2. 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の対応した端子と接続します。

MEMO
8ピンのATtiny45/ATtiny85など、また20ピンとなるATtiny2313/ATtiny4313など、端子の位置が異なるだけでArduinoとの接続は同じです。
この後のスケッチやブートローダーの書き込み手順も同じとなります!

Arduino UnoのSPI端子は、D11(MOSI)/D12(MISO)/D13(SCK)となります。
またリセットをかけるためのSS(Slave Select)はD10端子を使います。

これら端子を対応したATtinyチップの端子に接続するだけです。

Arduino UnoATtiny24/44/84
5VVCC
GNDGND
D10RESET
D11MOSI
D12MISO
D13SCK

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

MEMO
書き込み時にエラーが出る場合は、ArduinoのRESET-GND端子間に10μF程度の電解コンデンサを入れて下さい!
MEMO
他のArduinoボードを使うことも出来ますが、ArduinoはボードによってSPI端子が決まっているので確認して下さい!

ブートローダーの書き込み

接続が出来たら、まずブートローダーの書き込みです。
チップによって少し異なりますが、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チカスケッチを書き込んでみます。

スケッチ書き込みの際の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]を選択しスケッチの書き込みを行いました。
こちらを選択するのが一般的な使い方になるのでしょうか?

[No bootloader]を選択する場合も初めてチップを使う時に一度だけブートローダーの書き込み作業が必要となります。
この操作ではブートローダーを書き込むというより、ヒューズビットの設定(クロック周波数などの各種設定)が行われます。(今回行った方法です!)

Optibootブートローダー

ATtiny44/ATtiny84には[Optiboot]というオプションも用意されています。

OptibootブートローダーとはArduinoが用意しているブートローダーとなります。
通常Arduino IDEを使用して各種Arduinoボードを使う場合、Optibootブートローダーが使われています。
Arduino IDEはOptibootブートローダーと通信する事によりシリアルポートを介してスケッチの書き込みが行われています。

Optibootブートローダーを書き込みATtiny44/ATtiny84を動かすことももちろん可能です。
ATtiny85ではOptibootブートローダーを書き込みUSB-シリアルコンバーターからのスケッチ書き込みも行ってみました。
参考までに!

ATtiny85にOptibootブートローダーを書き込みUSB-シリアルコンバーターからスケッチを書き込んでみる!

ATtiny44/ATtiny84を使った作例

ATtiny44/ATtiny84はATtiny85と比べ使えるI/O端子の数が最大12本と増えています。
これくらいの数あればI2CやSPI機器との接続に加え使えるI/O端子もまだ多く残ることから、製作物で便利に使えそうです。

以前Arduinoを使った無線コントローラーを作ったのですが、これがなかなか便利で面白く・・・

【電子工作】Arduinoを使った無線コントローラー(送信機)製作ノート①!KiCadの基板設計から基板発注(JLCPCB)までの話(nRF24L01)

機能を限定したこのようなキーホルダーサイズのミニ無線コントローラーの製作も考えています。
SPI接続の無線モジュールにI/O端子を5本、操作スイッチを6個入れてもATtiny44やATtiny84を使えば収まる計算です。

SMD(表面実装)タイプのチップを使えば、約4cm×5cmくらいのサイズに収めることが出来るので面白そうですね。

ATtiny44では1.8V~、またATtiny85では2.7V~の駆動が可能なので、小型なボタン電池でも駆動する事が出来そうです!

このように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チップのピン数に合った書き込みシールドを自作しておくと便利に使えると思います。

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

【追記】USB-シリアル変換モジュールを使いシリアル通信を行う!

多くのATtinyチップにはハードウェアシリアルが搭載されていませんが、USB-シリアル変換モジュールと接続しArduinoのようにSoftwareSerial(ソフトウェアシリアル)によるシリアル通信を行うことは可能です。

デバッグ等でArduino IDEのシリアルモニタを使うなど役立ちます!

【Arduino】ATtinyでSoftwareSerial(ソフトウェアシリアル)を使いUARTシリアル通信をやってみる!

最後に!

ATtinyシリーズのチップは、電子工作を始めた頃にいろんなプロジェクトで使われているのを見て各種チップを入手して持っていたのですが、Arduinoの扱いに少し慣れてくると使ってみるのは非常に面白いですね!

今回14ピンタイプのATtiny44やATtiny84を見ていきましたが、さらに使えるI/O端子の数が増え20ピンタイプとなっているATtiny2313やATtiny4313など、さらに多くのATtinyシリーズのチップがリリースされています。
また別記事で詳しくご紹介できればと思います。

あとピン数の多いチップを扱う場合、このような治具があると便利なので合わせて見て頂ければと思います。

【電子工作】DIP-ICを扱う際に便利な工具のご紹介!『DIP-IC引き抜き工具』『ピンそろった』

1 COMMENT

【Arduino】ATtinyでSoftwareSerial(ソフトウェアシリアル)を使いUARTシリアル通信をやってみる! | ぶらり@web走り書き へ返信する コメントをキャンセル