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

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

以前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シリーズのAVRマイコンは開発環境にArduino IDEを使うことができ、ブートローダーを書き込むことによりArduinoスケッチを動かすことが出来ます。
Arduinoの扱いに慣れてきたら試してみるのは面白く、AVRマイコンの学習用としても最適です!

前回こちらの記事でATtiny85にブートローダーやスケッチを書き込みArduinoとして動作させる基本的な方法をご紹介しました。

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

ATtiny85に限らず各種ATtinyシリーズの開発環境にArduino IDEを使う場合、ATtinyCoreというボードパッケージをインストールすればArduinoと同じ環境で扱うことが出来るため便利となります。

そしてATtinyCoreにはATtinyチップをプログラムするための[No bootloader][Optiboot][Micronucleus/Digispark]という3つのオプションが用意されています。

今回はATtiny85を例にOptibootブートローダーを書き込み、USB-シリアル変換モジュールからスケッチの書き込みを行ってみたいと思います。

USB-シリアルコンバータからATtinyチップにスケッチを書き込む方法!

こちらがATtiny85です。
ATtiny85はArduinoでも使われているAtmel(アトメル)の8ビットAVRマイコンとなります。

ATtinyシリーズは非常に多くのチップがありますが、8ピンタイプのものではATtiny13/ATtiny25/ATtiny45/ATtiny85などが有名です。

ATtiny85 仕様&スペック

簡単にATtiny85の仕様(スペック)をまとめるとこのようになります。

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

ATtiny85 ピンアウト

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

Arduinoと比べて使えるI/O端子の数が少なく感じてしまうかもしれませんが、外部にクリスタル(発振器)を接続することなく内部クロック8MHzで単独で動作させることが出来ます。
このようなミニゲーム機を構成しArduinoスケッチを動かすことが出来るのは面白いですね!

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

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

ATtiny85をArduino IDEで使う準備

ATtiny85に限らず他のATtinyシリーズのチップでも同様となりますが、Arduino IDEでATtinyチップにスケッチやブートローダーを書き込むにはAVRプログラマ(ライタ)が必要となり、Arduino IDEにATtinyCore」ボードパッケージのインストールも必要となります。

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

AVRライタはこのようなUSBaspといった書き込みボードが使用できますが、無ければArduinoボードにArduinoISPスケッチを書き込むことにより同様にライタとして使うことが出来ます。

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

こちらではArduino Unoを使って進めていきます。

内容が少し被ってしまいますが、こちらの記事でもATtiny85に関して詳しく解説しているので合わせて読んで頂ければと思います。

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

Arduinoを書き込み装置(ライタ)として機能させるためには以下の準備が必要となります。

ATtinyチップをArduino IDEで扱う準備
  1. ArduinoボードにArduinoISPスケッチを書き込みライタとして機能させる
  2. ATtinyチップに対応したボードパッケージ「ATtinyCore」のインストール

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

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

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

Arduinoを書き込み装置として使う場合、[ArduinoISP]というスケッチを書き込みます。
Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]の中にある[ArduinoISP]を開きます。

このスケッチを書込装置として使うArduinoボードに書き込みます。

通常の手順でArduinoに書き込むだけなので問題ないと思います。

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

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

次に各種ATtinyシリーズのチップに対応したボードパッケージのインストールです。

Arduino IDEの[環境設定(Preferences…)]から[追加のボードマネージャのURL]に以下URLを追加します。

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

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

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

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

ボードパッケージのインストールがうまく出来たのか一応確認しておきます。
[ツール]→[ボード]へ進むと先程はなかった[ATtinyCore]という項目が追加されています。
この中にある各種ATtinyシリーズのチップを選択する事により、コンパイル&スケッチの書き込み、またブートローダーの書き込みが行えます。

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

書き込みの際の接続

Arduinoボードをライタ(書込装置)として使う準備が出来ました。
それではArduinoとの接続です。

Arduinoとの接続にはSPI端子(MOSI/MISO/SCK)およびRESET端子が使われます。
8ピンタイプのATtiny85ではこの端子となります。
他の14ピンや20ピンなどピン数が異なるATtinyチップでは端子の位置が異なりますが接続方法は同じです!

Arduino UnoのSPI端子は、D11(MOSI)/D12(MISO)/D13(SCK)となりリセットをかけるためのSS(Slave Select)はD10となっています。
これら端子を対応したATtinyチップの端子に接続するだけです。
Arduinoを書き込み装置として使う場合の接続はこのようになります。

MEMO
書き込みにエラーが発生するようなら、ArduinoのRESET端子とGND端子間に10μF程度の電解コンデンサを入れて下さい!

Arduino UnoATtiny25/45/85
5VVCC
GNDGND
D10RESET
D11MOSI
D12MISO
D13SCK

これでArduino IDEを使いArduinoボードを経由してATtiny85にブートローダーやスケッチの書き込みが行なえます。

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

ブートローダーとは?

それでは実際にATtiny85にスケッチを書き込み動かしてみたいと思いますが、まずブートローダーの書き込みが必要となります!

ブートローダーとはマイコンチップ内のフラッシュメモリに常駐する小さなプログラムです。
通常Arduinoボードでは既にフラッシュメモリ内に書き込まれているスケッチを実行しますが、Arduino IDEから新たなスケッチ書き込みのデータが送られてきた際にはメモリ内のスケッチを上書きする動作をします。

普段Arduinoを使っている時あまり意識することはありませんが、このような動作をブートローダーが行っています。

ATtinyCoreにはATtinyチップをプログラムするための[No bootloader][Optiboot][Micronucleus/Digiskpark]という3つのオプションが用意されています。

基本的に[No bootloader][Optiboot]どちらを使っても動作させることが出来ますが、初めて書き込む際のみ1度だけブートローダーを書き込む必要があります。

Optibootブートローダーを書き込む

USB-シリアル変換モジュールからの書き込みを行うのが今回の本題です。
これにはOptibootブートローダーの書き込みが必要となります。

[Optiboot]はArduinoが用意しているブートローダーです。
Optibootブートローダーを書き込むことにより、通常Arduinoが行っているシリアルポートを使いスケッチの書き込みも行えるようになります。

 

それではブートローダーを書き込みます。
ATtinyチップに書き込むためのArduino IDEの設定です。
今回ATtiny85を例にしていますが他のATtinyシリーズのチップでも作業手順は同じです。

[ツール]→[ボード]→[ATtinyCore]からATtiny85を選択します。
チップによってはブートローダーのオプションがいくつか選択できます。
ATtiny85では[No bootloader][Optiboot][Micronucleus/Digispark]という3つのオプションが用意されています。
今回は[ATtiny45/85(Optiboot)]を選択します。

次に書込装置の選択です。
ATtinyCoreがサポートしている書込装置(AVRライタ)の一覧は[ツール]→[書込装置]から確認する事が出来ます。
今回ArduinoISPを書き込んだArduino Uno経由で行うので、[書込装置]には[Arduino as ISP]を選択します。

また、[シリアルポート]はArduino Unoを経由するので[Arduino Uno]を選択します。
以上このような設定になります。(他の項目はデフォルト設定のままで問題ありません)

あとは[ ブートローダを書き込む]を選択すると書き込みが行われます。

USB-シリアルコンバーターからスケッチを書き込む

Optibootブートローダーとは?

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

そのため、Optibootブートローダーが書き込まれているATtinyチップではArduinoのようにシリアルポートからの書き込みを行うことも出来ます。

USB-シリアルコンバーターとの接続

それではUSB-シリアル変換モジュールと接続してスケッチを書き込んで動作確認をしてみたいと思います。
ATtiny85の3番ピン(D4)に接続したLEDを1秒間隔で点滅させるLチカスケッチを書き込んでみます。

そして接続ですが、USB-シリアル変換モジュールはいろいろとあります。
今回リセットがかけられるDTR端子が付いたFTDIのUSB-シリアル変換モジュールを使いました。

USB-シリアル変換モジュールとの接続はこのようになります。

USB-シリアル変換モジュールATtiny85
VCC(5V)8番ピン(VCC)
GND4番ピン(GND)
RXD5番ピン(MOSI)
TXD6番ピン(MISO)
DTR1番ピン(RESET)

RESET端子の接続は10kΩのプルアップ抵抗を付け0.1μFのコンデンサを介して接続しています。

接続ができたらArduino IDEのボード等の設定です。
先程のブートローダー書き込みの時とほぼ同じ設定ですが、シリアルポートは接続しているUSB-シリアル変換モジュールを選択して下さい。

あとは通常の書き込みで使用する[アップロード]ボタンを押せばスケッチの書き込みが行われます。
上記Lチカスケッチを書き込みATtiny85の3番ピン(D4)に接続したLEDが1秒間隔で点滅すれば成功です!
※下記動画はdelay(100)、0.1秒で点滅させています!

最後に!

通常USBaspなどのAVRライタやISPを書き込んだArduino経由でスケッチの書き込みが出来るので、書き込む際の接続が面倒になることからシリアル通信で書き込む必要性があまりないように感じますが・・・。

シリアルでのやり取りに関連するハードを製作する時などで、Optibootブートローダーを書き込んでおけばシリアルポートからの書き込みも出来るので使えそうですね!

AVRライタを使ったスケッチの書き込みはブートローダーを上書きする形で行われるので[No bootloader][Optiboot]どちらを選択してもスケッチの書き込み&動作は問題ないと思いますが、今回のようにシリアルでのスケッチ書き込みを行いたい場合はOptibootブートローダーを書き込んでおく必要があります。

あと[Micronucleus/Digispark]に関しては、ATtinyチップが付けられたDigispark開発ボードを持っていないので試せていません!

ATtinyチップに書き込む際にATtinyCoreボードパッケージではオプション項目を選択できるチップもあることから、こちらの記事の追記という形で書いてみました。

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

コメントを残す