Arduino Pro Mini(互換機)を書き込み装置 として、Arduino IDEからATtiny1614へプログラムを書き込む。
ちっちゃいものシリーズ第二弾。ハリネズミやらリスザルやら、かわいいですよね。大きくても、カピバラもかわいいけれど。さて今回は、14ピンながらフラッシュメモリ容量が16 KBもあるATtiny1614をLチカさせる。
ATtiny1614を使うだけであれば、文字どおり、chromiaさんの「ATtiny1614を使ってみた」が非常に参考になる。ただし、開発環境がAtmel Studioなので、初学者には少しハードルが高かった。前稿にも書いたように、USBドライバーが置き換わってしまう問題もあった。
恐らく2019年6月ごろ、ATTinyCoreの作者さんが“megaTinyCore”をリリースし、Arduino IDE上での開発が大変楽になっている。SPIライブラリーやWire(I2C)ライブラリーも同梱されている。それでは前稿同様、と思いきや、ATtiny1614はプログラミング方式にUPDIを使用しているとのこと。まず書き込み装置の作製を行う。
Arduino Pro MiniへUPDIプログラマーを書き込む
ATtiny1614は、I2Cデバイス接続時のロジックレベル変換を省くため、3.3 V運用を予定している。そこで、書き込み装置に使用するArduino Pro Miniも、Amazonで購入した3.3 V(8 MHz)駆動の互換機を使用した。これをスイッチサイエンスの「FTDI USBシリアル変換アダプター Rev.2」でPCと接続する。両社のGNDが一致するように注意。使用した互換機と接続する場合、ひっくり返す必要があった。
書き込むUPDIプログラマーは、上記“megaTinyCore”サイトから辿れるものもあるが、オリジナルの “jtag2updi” を使用する。ソースをダウンロードしたら、Arduino IDEでsource
フォルダ内のjtag2updi.ino
ファイルを開く。inoファイル自体にコードは記載されていないが、以下のとおりに設定して「マイコンボードに書き込む」と、コンパイル、書き込みが終了する。
- ボード: “Arduino Pro or Pro Mini”
- プロセッサ: “ATmega328P (3.3V, 8 MHz)”
ATTiny1614にスケッチを書き込む
書き込み装置も作製できたので、ATtiny1614と接続して書き込みに備える。USBシリアル変換アダプターを一旦PCから外し、電源の供給されていない状態で以下のとおり配線する。ATtiny1614は、マルツのDIP変換基板に載せ、1番ピンと14番ピンを0.1 µFのバイパスコンデンサで繋いでいる。
- Arduino Pro MiniのRSTとGNDを10 µFの電解コンデンサで繋ぐ
- Arduino Pro Miniの6(D6)とATtiny1614の10番ピンを4.7 KΩの抵抗で繋ぐ
- ATtiny1614の11番ピンとGNDをLチカ用LEDで繋ぐ
- Arduino Pro MiniのGNDとATtiny1614の14番ピンを繋ぐ
- Arduino Pro MiniのVccとATtiny1614の1番ピンを繋ぐ
ブートローダー起動による上書きを防ぐため、10 µFの電解コンデンサでオートリセットがかからないようにすることをお忘れなく。
次に、Arduino IDEにATtiny用のボード定義を取り込む。[ファイル]→[環境設定]で「追加のボードマネージャのURL」にhttp://drazzy.com/package_drazzy.com_index.json
を追記する。その後、[ツール]→[ボード]→[ボードマネージャ]と進み、“megaTinyCore”をインストールする。執筆時点のバージョンは1.1.8であった。
ATtiny1614の動作速度(Clock Speed)を下げると、下記のエラーで書き込みに失敗する場合がある。ボード定義に記載されたシリアルポートの通信速度を下げておくとよいだろう。
avrdude: jtagmkII_set_devdescr(): timeout/error communicating with programmer (status -1) avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description avrdude: jtagmkII_reset(): timeout/error communicating with programmer (status -1) avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
インストールディレクトリ(Windows機の場合は、C:\Users\<ユーザー名>\AppData\Local\Arduino15\packages
)下に作成されたパッケージディレクトリ(megaTinyCore\hardware\megaavr\<バージョン番号>
)直下のavrdude.conf
の末尾にあるbaudrate
を変更する。8 MHzで書き込む場合、デフォルトの115,200では書き込めず、57,600に下げると成功した。1 MHzまで書き込めることを確認している。
--- avrdude.conf.orig 2020-03-21 09:03:05 +0000 +++ avrdude.conf 2020-03-21 18:55:40 +0000 @@ -16166,5 +16166,5 @@ desc = "JTAGv2 to UPDI bridge"; type = "jtagmkii_pdi"; connection_type = serial; - baudrate = 115200; + baudrate = 57600; ;
書き込んだLチカスケッチと書き込み条件は以下のとおりである。書き込みに[スケッチ]→[書込装置を使って書き込む]を使用することをお忘れなきよう。
/* const int LED_PIN = 13; */
const int LED_PIN = 8;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(700);
}
- ボード: “ATtiny1614/1604/814/804/414/404/214/204”
- Chip: “ATtiny1614”
- BOD voltage: “1.8V”
- BOD Mode (active): “Disabled”
- BOD Mode (sleep): “Disabled”
- Save EEPROM: “EEPROM retained”
- Clock Speed: “8 MHz”
- DAC Voltage Reference: “Disabled (saves flash)”
- tiny NeoPixel Port: “PORTA (pins 0~3,8~11)”
- millis()/micors(): “Disabled (saves flash)”
- Voltage for UART baud calc): “Closer to 3v”
- UART pins: “TX:5, RX:4”
- UART pins: “SDA:6, SCL:7”
- 書込装置: “jtag2updi (megaTinyCore)”
お疲れさまでした。無事Lチカに成功しましたか。最後に、“megaTinyCore”のピンアサインがやや特殊なので、以下引用する。
// ATtiny1614 / ARDUINO // _____ // VDD 1|* |14 GND // (nSS) (AIN4) PA4 0~ 2| |13 10~ PA3 (AIN3)(SCK)(EXTCLK) // (AIN5) PA5 1~ 3| |12 9 PA2 (AIN2)(MISO) // (DAC) (AIN6) PA6 2 4| |11 8 PA1 (AIN1)(MOSI) // (AIN7) PA7 3 5| |10 11 PA0 (nRESET/UPDI) // (RXD) (TOSC1) PB3 4 6| |9 7~ PB0 (AIN11)(SCL) // (TXD) (TOSC2) PB2 5~ 7|_____|8 6~ PB1 (AIN10)(SDA)<インストールディレクトリ>/<パッケージディレクトリ>/variants/txy4/pins_arduino.h
コメント