新しいシリーズのATtinyチップを扱う機会も増えてきたことから、今回はATtiny202を例にArduino IDEで開発するための環境について書いていきます。
ArduinoなどでおなじみのAVRマイコンのAtmel(アトメル社)は2016年にマイクロチップ・テクノロジー社(Microchip Technology Inc.)に買収され、それ以降に発売されたチップでは従来のICSPでの書き込みからUPDIによる書き込み方法に変更されています。
ATtinyシリーズのチップではATtiny202やATtiny404といったtinyAVR 0シリーズやATtiny212やATtiny414といったtinyAVR 1シリーズなどです。
またArduinoでも使われているATmega328Pの後継チップ?となるATmega4809といったmegaAVR 0シリーズのチップも同様で、その書き込み方法にはUPDIが採用されています。
これまでのICSPでの書き込みを行うATtinyではブートローダーやスケッチの書き込みの際にMOSI/MISO/SCK/RESET/VCC/GNDと結構多くの接続が必要でしたが、UPDIは単線式の書き込み方式となっているのでUPDI書き込みに対応したATtinyでは信号線はUPDI端子の1本のみ(VCC/GND接続を入れると3本)の接続とシンプルで簡単に行えるのが便利です!
しかしUPDIはこれまでのICSPとは互換性がないため、UPDI書き込みに対応した書き込み装置(環境)をあらたに用意する必要があります。
今回はUPDI書き込みに対応したATtiny202を例にArduino IDEで開発するための環境について見ていきたいと思います。
目次
ATtiny202をArduino IDEで使うための環境メモ!
ATtinyとは?
ATtinyはArduinoでもおなじみのAtmel(アトメル)のAVRマイコンです。
ブートローダーやスケッチを書き込むことによりArduinoとして動かすことが出来ます。
ピン数(使えるI/O端子の数)やフラッシュメモリの容量などの違いで多くのチップがリリースされています。
なかなか数が多いので全てのチップを把握するのは大変ですが、I/O端子の数やフラッシュメモリの容量などから一般的によく使われる(使いやすい)ものに関して以前こちらの記事でまとめました。
例えばATtiny85では8ピンしかないチップですが8KBのフラッシュメモリが使えるのでArduinoスケッチを書き込みこのようなミニゲーム機を作るなんてこともできます。
この投稿をInstagramで見る
少しI/O端子の数が多いATtiny84などを使えば、このようなミニコントローラーからの制御でロボットを動かしたりと・・・アイデア次第で面白いものが作れたりするのがATtinyの魅力的なところで、また便利なマイコンチップだと思います。
この投稿をInstagramで見る
上記ATtinyチップへのブートローダーやスケッチの書き込みにはICSPでの書き込みで行います。
ICSPでの書き込みはArduino(ATmega328P)ではブートローダーの書き込みの際にも使われますね!
そして今回は新しいシリーズのATtinyチップの例としてATtiny202をArduinoとして動作させるための環境を作っていきます。
tinyAVR 0シリーズやtinyAVR 1シリーズのATtinyを扱う際にはUPDIによる書き込み環境が必要となってきます!
tinyAVRシリーズ(ATtiny202など)の概要
冒頭でご紹介したように新しいシリーズのATtinyは、上記ICSPでの書き込みを行うATtinyとは異なりその書き込み方式にUPDI(Unified Program and Debug Interface)が採用されています。
ICSPでの書き込みで行うATtinyではブートローダーやスケッチの書き込みでUSBaspといったAVRライタ(書き込み装置)やArduinoISPを書き込んだArduinoボードを経由して書き込みが行えました。
しかし新しいシリーズのATtinyで採用されているUPDIでの書き込みはICSPでの書き込みとは互換性がないため、あらたに書き込み環境を用意する必要があります。
UPDIは送信側・受信側を交互にデータ送信することで1本の信号線のみで双方向の通信を行う半二重通信です。
ICSPでの書き込みと比べ1本のみの信号線(UPDI端子)の接続で書き込みが行えるので、接続が簡単で便利となります!
UPDI書き込みに対応したATtinyは現在「tinyAVR 0シリーズ」「tinyAVR 1シリーズ」「tinyAVR 2シリーズ」がリリースされています。
詳しい概要は別記事で紹介したいと思いますが、tinyAVRシリーズのチップの型番はこのようになっています。
今回扱うATtiny202は、フラッシュメモリが2KBのtinyAVR 0シリーズのチップでそのピン数は8本ということになります。
tinyAVRシリーズでは一番ベーシックなチップとなります。
ピンピッチが1.27mmの表面実装タイプ(SOIC)のチップなので非常に小さいですね!
以前のATtinyでは表面実装タイプ以外にDIP形状のチップもあったのでブレッドボード等でテストしやすかったのですが、新しいtinyAVRシリーズのチップは表面実装タイプのみのリリースとなっています。
テスト等で使用するにはピンピッチを変更するDIP化基板が必要となってきます。
ATtiny202のピン配列はこのようになっています。
ブートローダーやスケッチの書き込みにはUPDI端子が使われます。(参考:ピンアウト)
tinyAVR 0シリーズのチップではこの機能はカットされています!
Arduino IDEで書き込み環境を作る!
UPDIでの書き込みではこれまでのICSPでの書き込み環境が使えないので、Arduino IDEで使用する場合あらたに用意する必要があります。
とは言っても簡単です!
既存のArduinoボードやUSB-シリアル変換モジュールに少し手を加えることにより書き込み装置として使うことが出来ます。
まずArduinoを書き込み装置として使う手順です!
- 書き込み装置として機能するArduinoの用意(“jtag2updi”の書き込み)
- UPDI書き込みに対応したボードパッケージ(megaTinyCore)のインストール
- Arduino(書込み装置)との接続
- ブートローダーの書込み書き込み
- スケッチの書き込み
①書き込み装置として機能するArduinoの用意(“jtag2updi”の書き込み)
まずArduinoを書込み装置として使う方法です!
Arduino UnoやNanoなどが使えますが、こちらではUnoで進めていきます。
ICSPでの書き込みではArduino IDEに用意されている[ArduinoISP]というスケッチをArduinoボードに書き込むことによりArduinoを書き込み装置として使うことが出来ました。
Arduinoではおなじみの方法ですね!
UPDIでの書き込みでも同様に便利な書き込み用のスケッチ[jtag2updi]が用意されているので、このスケッチをArduinoに書き込むことによりUPDI書き込み機として機能させることが出来ます。
この[jtag2updi]はATtiny用のボードパッケージでおなじみのSpenceKondeさんが配布されているものです。
書き込み用のスケッチ[jtag2updi]は以下GitHubサイトからダウンロード出来ます。
参考 SpenceKonde/jtag2updiGitHub解凍したフォルダは「jtag2updi-master」という名前になっているので、「jtag2updi」にフォルダ名を変更しておきます。(フォルダ内のメインプログラムのファイル名「jtag2updi.ino」にフォルダ名を合わせておきます)
フォルダ内にある「jtag2updi.ino」を開くと空白のスケッチとなっていますが、同フォルダ内にある他のヘッダーファイル等も読み込まれるので問題ありません。
このスケッチを通常作業でArduinoボードにアップロードするとUPDI書込み装置として機能してくれます。
UPDI書き込み装置の完成です!
②UPDI書き込みに対応したATtinyボードパッケージ(megaTinyCore)のインストール
UPDIでの書き込み機が用意出来ました。
あとはArduino IDEを使いこのArduinoを経由してATtinyに書き込みを行いますが、UPDI書き込みに対応したATtinyボードパッケージのインストールが必要となります。
今回扱うATtiny202はtinyAVR 0シリーズのチップです。
tinyAVR 0/1/2シリーズといったUPDI書き込みに対応したATtinyチップへの書き込みには[megaTinyCore]というボードパッケージのインストールが必要となってきます。
ATtiny202やATtiny412、ATtiny1614といったUPDI書き込みに対応したATtinyチップ用のボードパッケージです。
Arduino IDEの[基本設定]から[追加のボードマネージャのURL]に以下URLを貼り付けます。
既に[ATtinyCore]をインストール済みでURLを貼り付けている場合は不要です!
次に[ツール]→[ボード]→[ボードマネージャ]へと進み[megaTinyCore by Spence Konde]をインストールして完了です。
これで[ボード]の項目に[megaTinyCore]が加わり、UPDI書き込みに対応した各種ATtinyチップを選択しコンパイル&書き込みを行うことが出来ます。
③書込み装置(Arduino)との接続
それでは実際にATtiny202に書き込みを行ってみます。
書き込みの際に使う端子は、UPDI/VCC/GND端子の3本のみです。
チップによってVCC/GND/UPDI端子の位置が異なってきますが、基本的に他の型番のATtinyでも以下同様の手順で行えます!
チップ駆動電源となるVCC(1番ピン)とGND(8番ピン)、そして書き込みで使う信号線はUPDI端子(6番ピン)のみの接続でブートローダーやスケッチの書き込みを行うことが出来ます。
ICSPでの書き込みでは6本の接続(VCC/GND/MOSI/MISO/SCK/RESET)が必要でしたが、UPDIでの書き込みではこの3本(信号線は1本のみ)で行えるので接続は非常に簡単で、MOSI/MISOってどっちだったかな?なんてこともなく便利ですね!
UPDIでの書き込み装置として機能するように先程[jtag2updi]スケッチを書き込んだArduinoとの接続はこのようになります。
信号線はArduinoのD6端子から4.7kオームの抵抗を介してUPDI端子に接続するだけです。
Arduino | ATtiny202 |
D6 | ー 4.7kΩ ー UPDI |
5V | VCC |
GND | GND |
④ブートローダーの書込み書き込み
それでは書込みです。
初めて使うチップ(生チップ)では最初に1度だけブートローダーの書き込みが必要となってきます。
ATtiny202ではブートローダーは特に必要ありませんが、ヒューズビットを書き換えるために1度だけブートローダーを書き込む作業を行っておきます。
動作周波数(クロック周波数)などの各種設定を変更するために行います。
まずボードの設定です。
[ツール]→[ボード]→[megaTinyCore]の中から書き込む対象チップを選択します。
今回ATtiny202に書き込むので[ATtiny412/402/212/202]ですね。
動作周波数[Clock]等変更できますが、今回は他の項目はすべてデフォルト設定で行いました。
そしてjtag2updiを書き込んだArduinoを経由して書き込みを行うので、[書き込み装置]は[jtag2updi]を選択しておきます。
あとは[ブートローダを書き込む]から書き込みを行います。
ブートローダーの書き込みが完了したら、以降はUPDI端子からスケッチを書き込めばArduinoとして動かすことが出来ます!
⑤スケッチの書き込み
最後にスケッチの書き込みです!
Lチカスケッチを書き込んでテストしてみます。
ATtiny202の7番ピン(D4)に接続したLEDを点滅させるスケッチです。
1 2 3 4 5 6 7 8 9 10 11 12 | void setup() { pinMode(4, OUTPUT); } void loop() { digitalWrite(4, HIGH); delay(1000); digitalWrite(4, LOW); delay(1000); } |
書き込むための接続およびボード設定等は先程と同じです。(点滅させるLEDだけ追加しています)
スケッチの書き込みは、[書き込み装置を使って書き込む]から行います。
LEDが1秒間隔で点滅すれば成功です!
ICSPによる書き込みと比べUPDIでの書き込みは、信号線1本のみの単線で行えるので簡単で便利ですね!
使用するチップにより端子の位置(VCC/GND/UPDI)が異なりますが、他のATtinyチップを使う場合も接続や作業手順は同じです。
[ボード]の項目で対象となるチップを選択してブートローダーを1度だけ書き込み、あとは[書き込み装置を使って書き込む]からスケッチの書き込みが行えます。
ATmega4809などmegaAVRシリーズのチップを扱う場合も作業手順は同じです!
USB-シリアル変換モジュールを使った書き込み方法
先程はArduinoにjtag2updiを使ってUPDIの書き込み装置として使いました。
UPDIでの書き込みには、Arduinoを使う以外にもUSB-シリアル変換モジュール経由で行うことも出来ます。
FTDI社製のシリアルモジュールを使って書き込みを行ってみます。
USB-シリアル変換モジュールと書き込む対象チップとの基本接続はこのようになります。
USB-シリアル変換モジュールのTXD-RXD端子間に接続するショットキーバリアダイオードとRXD-UPDI端子間に接続する470Ωの抵抗が必要となります!
ショットキーダイオードは順方向電圧(VF)が低く反応速度も早い?ため望ましいと思いますが、今回手元にあった汎用ダイオードとして一般的によく使われる1N4148で代用しましたが問題なく書き込み作業は行えました。
ショットキーダイオードを使用する場合は、BAT43や1N5817あたりは入手しやすいと思います。
ATtiny202との接続はこのようになります。
ブートローダーやスケッチの書き込み方法は先程の手順と同じですが、書き込み装置の設定が変わってきます。
書き込み装置として選ぶのは[SerialUPDI]です。
他にもSerialUPDIの選択肢はありますが、ATtiny202では低速のUPDIを使うようです!
ちなみにSerialUPDIのボーレートは他にも複数選択肢がありますが、FTDIのシリアルモジュール(FT232RL)を使ったATtiny202への書き込みでは他の転送スピードを選択しても書き込むことが出来ました。
シリアルポート・ボード・書き込み装置の選択ができたら、あとは先程と同じ手順で[ブートローダを書き込む]、そして[書き込み装置を使ってスケッチを書き込む]から書き込みを行うことが出来ます。
USB-シリアル変換モジュール経由で直接書き込むことが出来るので、先程のようにjtag2updiを書き込んだArduinoを用意する手間が省けます。
ご自身の作業環境で使いやすい書き込み方法を選べばいいと思います。
UPDIは送信側・受信側を交互にデータ送信することで1本の信号線のみで双方向の通信を行う半二重通信です。
上記接続図通りで上手く機能してくれるのですが、更に詳しい事が知りたい方はSpenceKondeさんがGithubにまとめられているので、ボーレートや抵抗値の選定など参考になるかと思います。
1つのモジュールでICSP/UPDI/UARTの書き込みが出来るボードの製作
UPDI書き込みに対応したATtinyでは今回ご紹介したように、[jtag2updi]を使いArduinoを書き込み装置として使う方法やUSB-シリアル変換モジュール経由での書き込み方法が使えます。
どちらの方法も簡単なんですが、書き込みの際に毎回これらを用意するのは結構面倒となります。
またICSPによる書き込みに対応したATtinyを扱う際はUPDIとは互換性がないので、これまた対応した書き込み方法が必要となってきます。
UPDIに対応したチップは便利ですが、私の環境ではまだまだ古いタイプのATtinyやATmega328PなどICSP書き込みのチップを扱うことも多いことから毎回それぞれに対応した書き込み装置を用意するのが面倒だったので、1つのボードでICSPとUPDI、またUARTでの書き込みが行える便利な書き込み基板(モジュール)を作ってみました。(HACKADAY.IOで紹介されていたものです)
こちらも参考になればと思います。
最後に!
UPDIでの書き込みに対応したtinyAVRシリーズのチップとして今回ATtiny202を例にArduino IDEでの書き込み環境をご紹介しました。
UPDIでの書き込みは接続が簡単で便利ですね!
今回8ピンでフラッシュメモリが2KBの一番ベーシックなATtiny202を使いましたが、同構成で4kBあるATtiny402やピン数が多い(使えるI/O端子の数が多い)ATtiny204やATtiny1604などtinyAVR 0シリーズのチップはまだ多数あり、またDACが使えるなど機能が追加されたtinyAVR 1シリーズなど多くのチップが存在します。
ATtinyは使用する用途等により選べるチップの選択肢が多いのですが、基本的に他のATtinyを扱う際も今回と同様な手順でUPDIによる書き込みが行えます。
Arduinoの扱いに少し使い慣れてくるとATtinyは自作基板の製作等で非常に便利に使えるAVRマイコンだと思います。
何かの参考になればと思います。
コメントを残す