AVRマイコン ATTINY202は、UPDIという方式で書き込む。
USBシリアル変換基板で書き込むことができる。
Arduino環境ではなく、Microchip Studioでpymcuprogを使うためのメモ。
書き込みツール ハードウェア編
USBシリアル変換ICを使う。秋月のモジュール基板を使用した。
同じような変換ICならほとんど使えそう。
上記のモジュールは5Vなので、3.3Vの回路の場合は注意が必要と思う。
下記に回路図を示す。テスト用にLEDをPA2に接続した。
![ATTINY202のVDD(1pin)-GND(8pin)間には5Vの電源と0.1uFのコンデンサを接続。
ATTINY202のPA0(6pin)には抵抗470Ωを介してCH340EのRXDへ接続。
CH340EのRXDからTXDにショットキーバリアダイオードを、RXD側がアノードとなるよう接続。
ATTINY202のPA2(5pin)には、抵抗10kΩを介してLEDのアノードを接続。LEDのカソードはGNDに接続している。](https://1n60.net/wp/wp-content/uploads/2024/07/image-2.png)
![DIP変換基板に載せたATTINY202をブレッドボードに載せ、USBシリアル基板からの接続は、電線を使っている](https://1n60.net/wp/wp-content/uploads/2024/07/PXL_20240726_144507273-1024x768.jpg)
書き込みツール ソフトウェア編
まずPythonをインストールしておく。
プログラミングには、pymcuprogを使う。
コマンドラインかWindowsPowerShellを開いて下記を実行すると、pymcuprogがインストールされる。
py -m pip install pymcuprog
!["py -m pip install pymcuprog"を実行したWindows PowerShellのスクリーンショット](https://1n60.net/wp/wp-content/uploads/2024/07/image-1.png)
USBシリアル基板をPCに接続し、ポート番号を調べておく。
![デバイスマネージャーのポートを見よ。CH340の文字がある](https://1n60.net/wp/wp-content/uploads/2024/07/image-3.png)
このPCの場合”COM5″だった。USBポートをかえると番号が変わるかもしれないので注意。
下記を実行して正しく動くか確認する。com5の部分はさっきのポート番号にしておく。
pymcuprog ping -t uart -u com5 -d attiny202
成功すれば
“Pinging device…
Ping response: 1E9123
Done.”などと出てくるはずだ
Microchip Studioの設定
メニューのツール -> 外部ツールを選択
![](https://1n60.net/wp/wp-content/uploads/2024/07/image.png)
タイトル: pymcuprog
コマンド: pymcuprog.exe
引数: write -t uart -u com5 -d attiny202 -f “$(TargetDir)$(TargetName).hex” –erase –verify
終了時にウインドウを閉じるのチェックは外していたほうが、エラーの時に助かる。
![タイトル・コマンド・引数を入力した「外部ツール」の設定画面](https://1n60.net/wp/wp-content/uploads/2024/07/image-4.png)
OKを押したら、ツールメニューにpymcuprogが追加される。書き込む時はこれを押す。
![ツールのメニューにpymcuprogが追加された](https://1n60.net/wp/wp-content/uploads/2024/07/image-5.png)
Lチカコード
下記のコードでLEDが0.5秒ごとに点滅したら成功。
#define F_CPU 20000000UL / 6
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
PORTA.DIRSET = 0b0100; // PA2を出力に設定
while (1)
{
PORTA.OUTSET = 0b0100;
_delay_ms(500);
PORTA.OUTCLR = 0b0100;
_delay_ms(500);
}
}
周波数
F_CPU・・・ATTINY202の既定クロックは20MHzで、既定の分周比は1/6
なぜ1/6なんだろうか??
今までのAVRからレジスタが変わっている
DIRSET・・・入出力設定。特定のビットを1にする。
DIRCLR・・・同上。特定のビットを0にする。
OUTSET・・・出力設定。特定のビットを1にする。
OUTCLR・・・同上。特定のビットを0にする。
便利なレジスタが追加された。
参考文献
AVR-DA | Y-Lab. Blog https://blog.y-lab.org/?cat=13
pymcuprog · PyPI https://pypi.org/project/pymcuprog/
ChatGPTにも教えてもらった