各種ATtinyチップにスケッチを書き込みArduinoとして動作させる基本的な方法をブログでいくつかご紹介しました。
ATtinyはその開発環境にArduino IDEを使うことができ、使えるI/O端子やプログラム容量はArduinoと比べると少ないので制約を受ける場面もありますが便利に使えるAVRマイコンです。
チップ単体でArduinoスケッチを動かすことが出来るので、比較的小規模な回路で動かすプロジェクトではArduinoを使うよりコンパクトにまとめることが出来るので便利です。
Arduinoの扱いに慣れてくると使ってみるのは面白いと思います。
この投稿をInstagramで見る
またATtinyを使ったプロジェクトは多くの方が公開されているので調べてみるのも面白いと思います。
そんなATtinyチップなんですが、Arduinoと比べると使いにくいところがいくつかあります。
Arduinoは開発ボードとして作られているので、ボードにはスケッチを書き込むためのUSB-シリアル変換モジュールや電源回路など開発に必要となってくる最低限の機能がボードに組み込まれています。
当然ですがATtinyはチップ単体となるので、スケッチを書き込み動かすにはそれらを用意する必要があるのが少し面倒となります。(開発ボードもあります)
各種ATtinyチップの基本的な使い方は上記記事でご紹介しました。
ブートローダーやスケッチの書き込みにはAVRプログラマやライタといった書き込み装置が必要となりますが、Arduinoボードを経由して書き込むことも出来るので、このような書き込みボードを自作しておくと便利です。
そして開発段階でArduinoではデバッグ等にシリアルモニタを使うことはよくありますが、ATtinyではArduinoのようにシリアルポートが用意されていません。
ATtinyを使った製作物をこれまでいくつか作りましたが、シリアルでの通信が使えないとスケッチ(プログラム)の動作確認やバグなどを見つけるのが大変になることがあります。
ATtinyではハードウェアで使えるシリアルポートはありませんが(一部搭載されているチップもあります)、SoftwareSerial(ソフトウェアシリアル)での通信は可能なのでUSB-シリアル変換モジュールと接続する事により、シリアル通信やArduino IDEのシリアルモニタを使うことが出来ます。
目次
ATtinyでSoftwareSerial(ソフトウェアシリアル)を使いシリアル通信をやってみる!
ATtinyシリーズは多くのチップがリリースされているわけですが、シリアルポートが用意されていないものが多くあります。
例えば8ピンタイプのメジャーなチップではATtiny13/45/85などがあります。
そしてピンアウトはこのようになっています。
見ての通りハードウェアシリアルで使える端子がありませんね!
また同様に14ピンタイプのATtiny44/84でもハードウェアシリアルで使える端子がありません。
しかしハードウェアシリアルで使える端子が無くても、ArduinoのようにSoftwareSerial(ソフトウェアシリアル)を使い空いている任意の端子にシリアル通信で使うTX/RXを割り当てることにより可能となります。
8ピンのATtiny45/85では使えるI/O端子が6本しかないため、そのうち2本をTX/RXに割り当ててしまうとかなり制限を受けてしまいますが、それでも用途によってはArduino IDEのシリアルモニタを使いデバッグ等で便利に使えそうです。
さらにピン数が多いATtinyチップでは、使えるI/O端子の数が多いので便利に使える場面は多いと思います。
【例① ATtiny45/85】ソフトウェアシリアルでシリアルモニタを使う
それでは簡単な例として、ATtiny85でソフトウェアシリアルを設定しシリアルモニタを使ってみたいと思います。
とは言ってもArduinoのソフトウェアシリアルの手順と全く同じなので簡単です!
Arduinoのソフトウェアシリアルに関しては、こちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。
ATtiny85で数値をカウントし、その数値をシリアルモニタに表示させるスケッチを作ってみました。
ソフトウェアシリアルを使いATtiny85の端子にシリアル通信(UART)で必要なRX/TX端子を割り当てて、USB-シリアル変換モジュールを経由してArduino IDEのシリアルモニタに表示させる簡単なスケッチです。
ATtiny85の3番ピン(D4)にTX、2番ピン(D3)にRXを割り当てています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // ATtinyでソフトウェアシリアルを使う①(ATtiny45/85) // https://burariweb.info #include <SoftwareSerial.h> #define RX_PIN 3 // USB-シリアル変換モジュールのTXに #define TX_PIN 4 // USB-シリアル変換モジュールのRXに SoftwareSerial mySerial(RX_PIN, TX_PIN); // RX,TXの割り当て int i = 0; void setup() { mySerial.begin(9600); mySerial.println("ATtiny start"); delay(2000); } void loop() { mySerial.println(i); i++; delay(100); } |
上記スケッチをATtiny85に書き込みます。
スケッチ書き込み方法に関してはこちらの記事を参考にして下さい。
次に接続です。
PCとの接続は、USB-シリアル変換モジュールを使います。
今回FTDI互換モジュールを使いました。
シリアルでのやり取りなのでATtiny85とは、TX(送信)→RX(受信)/RX(受信)←TX(送信)という接続です。
USB-シリアル変換モジュール | ATtiny45/85 |
VCC(5V) | VCC |
GND | GND |
TX(またはTXD) | 2番ピン(RX) |
RX(またはRXD) | 3番ピン(TX) |
GND | スイッチ〜1番ピン(RESET) |
ATtiny85に接続したRESETボタンを押してシリアルモニタに数値が0からカウントされていけば成功です!
ATtiny85では使えるI/O端子の数が6本しかなく、そのうちシリアル通信で2本使ってしまうと制約を受ける場面は多くなるかもあしれませんがデバッグ等でシリアルモニタが使えると便利です!
【例② ATtiny44/84】ソフトウェアシリアルでシリアルモニタを使う
同様にATtiny44/84でも試してみます。
ATtiny44/84では使えるI/O端子が12本あります。
これだけあればシリアル通信で2本使ってもまだ使えるI/O端子は多く残るので現実的です。
シリアルモニタに入力した数値によりATtiny84に接続したLEDの点灯を制御してみます。
簡単なこちらのスケッチを例にやってみます。
ソフトウェアシリアルでATtiny84の13番ピン(D0)をTX、12番ピン(D1)をRXに設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // ATtinyでソフトウェアシリアルを使う①(ATtiny44/84) // https://burariweb.info #include <SoftwareSerial.h> #define RX_PIN 1 // USB-シリアル変換モジュールのTXに #define TX_PIN 0 // USB-シリアル変換モジュールのRXに #define LED_PIN 10 SoftwareSerial mySerial(RX_PIN, TX_PIN); // RX,TXの割り当て int input = 0; void setup() { mySerial.begin(9600); mySerial.println("ATtiny Start"); pinMode(LED_PIN, OUTPUT); delay(2000); } void loop() { if (mySerial.available() > 0) { // 入力された文字が何バイトか調べその回数分繰り返す input = mySerial.read(); // 1バイト分のデータを読み取る if (input == '1') { digitalWrite(LED_PIN, HIGH); mySerial.println("LED ON"); } else if (input == '0') { digitalWrite(LED_PIN, LOW); mySerial.println("LED OFF"); } } } |
ATtiny84へのスケッチの書き込みはこちらの記事を参考に行って下さい!
次にUSB-シリアル変換モジュールとの接続です。
ATtiny85とは端子の位置が異なっていますが、シリアルでの接続は先程の手順と同じです。
USB-シリアル変換モジュール | ATtiny44/84 |
VCC(5V) | VCC |
GND | GND |
TX(またはTXD) | 12番ピン(RX) |
RX(またはRXD) | 13番ピン(TX) |
GND | スイッチ〜4番ピン(RESET) |
シリアルモニタを立ち上げ、[1]を押せばATtiny84の2番ピン(D10)に接続したLEDが点灯、[0]を押せばLEDが消灯すれば成功です!
最後に!
ATtinyにはハードウェアシリアルが搭載されていないチップが多いですが、ArduinoのようにSoftwareSerial(ソフトウェアシリアル)でTX/RX端子を割り当てることによりシリアル通信は可能となります。
こちらの動画はSPI接続の無線モジュールをATtiny84で動かしていますが、MOSI/MISOのピンアウトの割り当ての問題でうまく動作させるのに非常に時間がかかりました。
その際に今回の方法でシリアルモニタを使いデバッグを行い、上手く動作させることが出来るようになりました。
この投稿をInstagramで見る
ATtinyは使えるI/O端子の数が少なく、またプログラム容量(フラッシュメモリ)も少ないのでライブラリを使用する場合等で容量的に制約を受ける場面も出てくるかもしれませんが、ソフトウェアシリアルを使った通信は可能なのでデバッグ等で便利に使えますね!
コメントを残す