💡

ATtiny202をPlatformIO経由で扱うための環境設定

2024/02/09に公開

はじめに

ATtiny202とは、マイクロチップ・テクノロジー社(旧 アトメル社)が製造しているマイコンで、AVRというシリーズの一種です。安価な上にArduino環境でも扱えるため、電子工作においても広く用いられています。

https://www.microchip.com/en-us/product/attiny202

Arduinoの開発環境としてはArduino IDEが一般的ですが、VSCode上で開発できるPlatformIOのほうが個人的には好みで、最近はもっぱらPlatformIOを用いています。しかし、まだ比較的情報が少なく、ATtinyマイコンを使用した実際の環境設定に関して多少苦労したので、ここにまとめておきます。

ATtiny202など新しいAVRマイコンの書き込みは、UPDIというインタフェースで行います。
書き込み方法としては、別途Arduinoボードを書き込み装置として作成する方法[1]もあるようなのですが、USBシリアル変換モジュールを使用して最小限の構成で実現できる方法を用いました。

前提知識

以下の知識については一定ある前提とします。
(キャッチアップの参考になる情報については脚注を参照)

  • 電子工作の基礎的な知識(はんだ付け[2]、電子部品、ブレッドボードの扱い等)
  • Platform.ioの初期設定[3]

用意したもの

ソフトウェア環境

  • Mac OS 13.5.2
  • Visual Studio Code: ver 1.86.0
  • PlatformID: Core 6.1.13, Home 3.4.4

ハードウェア

部品については後述の一覧表のものを使用しました。

ATTiny202に関しては表面実装部品のため、動作確認を行う上ではブレッドボードで扱えたほうが便利なのでDIP化キットを使用しました。
USBシリアル変換モジュールはFTDIのFT234XDを使用したモジュールを用いています。
(その他、手元にあったFT232RQを使用したモジュール[4]でも同様に動作することを確認しました)
USBシリアル変換でUPDI書き込みを行う上での情報としては、こちらのソースが多く参照されているようでしたので参考にしました。

回路
回路図

配線
ブレッドボード配線図

秋月電子通商

品名 URL
ATTINY202DIP化キット https://akizukidenshi.com/catalog/g/g118304/
FT234X 超小型USBシリアル変換モジュール https://akizukidenshi.com/catalog/g/g108461/
カーボン抵抗(炭素皮膜抵抗) 1/4W470Ω https://akizukidenshi.com/catalog/g/g125471/
ショットキーバリアダイオード 40V1A 1N5819 https://akizukidenshi.com/catalog/g/g117244/

その他

  • ブレッドボード
  • 配線用ワイヤ
  • USB Micro-B <-> Type A ケーブル
  • 動作確認用部品(任意)
    • LED(任意のもの)
    • 電流制限用抵抗(適切なもの)

Platform.ioの設定

新規プロジェクト作成時、以下のようにBoard一覧からATtiny202を指定します。

pymcuprog のインストールを行います。[5]

python3 -m pip install pymcuprog

platformio.ini ファイルに書き込み設定を追加します。[6]

platformio.ini
[env:ATtiny202]
platform = atmelmegaavr
board = ATtiny202
framework = arduino
upload_speed = 115200
upload_flags =
    --tool
    uart
    --device
    attiny202
    --uart
    $UPLOAD_PORT
    --clk
    $UPLOAD_SPEED
upload_command = pymcuprog write --erase $UPLOAD_FLAGS --filename $SOURCE

ビルド→アップロードを実行します。

 *  実行するタスク: platformio run --target upload 

Processing ATtiny202 (platform: atmelmegaavr; board: ATtiny202; framework: arduino)
----------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelmegaavr/ATtiny202.html
PLATFORM: Atmel megaAVR (1.9.0) > ATtiny202
HARDWARE: ATTINY202 16MHz, 128B RAM, 2KB Flash
PACKAGES: 
 - framework-arduino-megaavr-megatinycore @ 2.6.7 
 - tool-avrdude @ 1.70100.0 (7.1.0) 
 - toolchain-atmelavr @ 3.70300.220127 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 15 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio/build/ATtiny202/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   7.8% (used 10 bytes from 128 bytes)
Flash: [==        ]  23.3% (used 478 bytes from 2048 bytes)
Configuring upload protocol...
AVAILABLE: jtag2updi
CURRENT: upload_protocol = jtag2updi
Looking for upload port...
Auto-detected: /dev/cu.usbserial-DK0G053P
Uploading .pio/build/ATtiny202/firmware.hex
Connecting to SerialUPDI
Pinging device...
Ping response: 1E9123
Erasing device before writing from hex file...
Writing from hex file...
Writing flash...
Done.
============================================ [SUCCESS] Took 5.10 seconds ============================================

備考:当初ハマったこと

pymcuprog のインストールと platformio.ini ファイルの設定を行わない状態でアップロードを実行すると、以下のようなエラーが表示されて書き込みできない状態になっていました。

avrdude error: bad response to sign-on command: Unknown JTAG ICE mkII result code 0x01
avrdude error: unable to open programmer jtag2updi on port /dev/cu.usbserial-DK0G053P

avrdude done.  Thank you.

*** [upload] Error 1

Arduinoスケッチの書き込み

1秒ごとにLチカするサンプルプログラムを書き込んでみます。

main.cpp
#include <Arduino.h>

void setup() {
  pinMode(1, OUTPUT);
}

void loop() {
  digitalWrite(1, HIGH);
  delay(1000);
  digitalWrite(1, LOW);
  delay(1000);
}

動作確認

ボタン電池(LR44 x 3 直列)で稼働させることもできました。
適当なLEDを接続して動作確認します。

まとめ

ATtiny202をArduinoとして扱うための環境設定を紹介しました。
非常に小型、かつ電池駆動もできるモジュールなので、扱えると電子工作の幅がさらに広がると思いました。
今後は専用のプリント基板を作成し、一つのプロダクトの中に組み込んで動作させることも目指していきます。

脚注
  1. 参考: https://burariweb.info/electronic-work/attiny202-arduinoide-enviroment.html ↩︎

  2. イチケン | はんだ付けのやり方解説: https://www.youtube.com/watch?v=dQ7AUjb1tkA ↩︎

  3. Getting Started with PlatformIO
    : https://www.youtube.com/watch?v=JmvMvIphMnY ↩︎

  4. FT232RQ USBシリアル変換モジュールキット
    https://akizukidenshi.com/catalog/g/g109951/ ↩︎

  5. 参考: https://github.com/microchip-pic-avr-tools/pymcuprog ↩︎

  6. 参考: https://docs.platformio.org/en/latest/platforms/atmelmegaavr.html#upload-using-pymcuprog-serialupdi ↩︎

Discussion