[Part2] ATTINY202への書き込みとプログラムをやっています! | トドお父さん通信

トドお父さん通信

北部九州在住 高BMI中高年のオタク趣味の活動記録

ATTINY85からATTINY202への移行を検討しだして2週間くらいたちました。

まずは書き込み環境を整えることから開始しました。

ATTINY202は、便利な中華製パラレルプログラマ TL866-IIも、AVRISP2も使えません。

ICPという3線インターフェースから、UDPIという1線インターフェースに変わって

いるからです。

 

TINY85ではTL866-IIを使ってFUSE書き込みができたので、RESET(UDPI)端子を

GPIO化できたのですが、TL866-IIはこの新AVRシリーズに対応していないので、

それもできなくなりました。

(高電圧UPDIというものを使えばいいのですが、敷居も値段も高い)

 

閑話休題:UPDIはUSBシリアル基板があれば、書き込み器なら簡単に作れるという

情報がありましたので、まず書き込み器を作ります。

自分が参考にしたのはこれです。

UPDI to USB-Serial Programming Adapter

これなら、手持ちの中華製 USBシリアル基板を流用して簡単に作れそうです。

 

ショットキーダイオードがチップ部品しか見つからなかったので、ついでに全部
抵抗もチップ部品で作りました。
ターゲットへの3.3V/5V電源線も一緒に供給するようにしました。
USBシリアル基板のジャンパピンで5V-3.3Vの切り替えができて便利です。
 
 ピンでもつなげます!
今回は、ジャンパ線でブレッドボードのTINY202につなぎます。(最初の写真です)
 
プログラムはネットでLチカのプログラムを拾って来て、ATMEL STUDIOに
貼り付けてビルドし、HEXファイルを作りました。
プログラムの構造の違いは前に説明した通りです。
このプログラムでは、少しわかりにくいですね。あとで修正しましょう
つくったプロジェクトのDebugフォルダにhexファイルが入ってます。
そのHexファイルを指定して、AVRDUDESS(AVRDUDEのGUI版)で
デバイスに書き込みを行います。
programmerに serialUPDIを指定し、com番号さえ入力すれば、あとは未指定で書き込みができました! AVRDUDESSのインストールホルダに最新のADRDUDEも入っているので、FUSE書き込み等
ややこしい内容をコマンドラインで書き込みを行うときは、このフォルダのAVRDUDEで実行す
るといいですよ。(FUSE書き込みは後で説明しますね)
 
 
これでPA2 (ピン5)に接続したLEDがチカチカしますよ。
赤LEDと1kΩくらいの抵抗を直列にして、GNDに落として下さい。
ON/OFF各1秒で指定していますが、ずいぶん点滅が遅いようです。
 
これは、TINY202のクロックがデフォールトで20MHzの
6分週、3.333MHzになっているためのようです。
 
このときは、いろんなことが理解できてなくて、とりあえず
書き込みができました~ というレベルでした。
FUSEを書き換えて、20MHzから16MHzに切り替えるのには、メッサ苦労しました!
後日追記:AVRDUDESSを使ってFUSEを書き換えるのは、こちら
クロックを
20MHz→16MHzに書き換えるだけでしたら、高電圧プログラマーは必要ありません。
新しいことを始めるのは、いろいろと大変ですね。
とくに年を取ってくると、おっくうになります。おっと、グチはこの辺で
それでは、次回をこうご期待!!

 

【2025/03/07追記】

このプログラムがわかりにくので、あとで書き直しましょう! が宿題で残っていたので

やってみました。


/*
 * ATTINY202_LED_BLINK_SMPL1.cpp
 *
 * Created: 2025/03/07 10:27:45
 * Author : todoPapa
 */ 
#include <avr/io.h>
#include <util/delay.h>

//#define F_CPU 20000000UL // CPU Clock = 20MHz (delay.hで定義済み)
#define LED_PIN     PIN2_bm     // PA2にLED接続

int main(void) {
	// クロック設定 20MHz
	_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL_CLKSEL_OSC20M_gc); // CLK 20MHz選択
	_PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0x00); // 分周なし
	// PA2を出力モードに設定
	PORTA.DIR =LED_PIN;        // IOMAPEDのVPORTAだと、OUTSET,OUTCLRが使えない

	while (1) {
		// PA2をHIGHに設定してLED点灯
		PORTA_OUTSET = LED_PIN; 
		_delay_ms(1000);

		// PA2をLOWに設定してLED消灯
		PORTA_OUTSET = LED_PIN; 
		_delay_ms(1000);
	}

だいぶ可読性が良くなったと思います。

 

このコンパイル後、F_CPUが重複しているとウォーニングが出たので、確認しました。

 delay.hでF_CPUを1MHz定義していたので、これを20MHzに変更して、main.cppのF_CPUは

コメントアウトしました。

 

あとのプログラムの説明は、このブログの他の記事に詳しいので省略しますね。

 

VPORTAとPORTAの違いを説明します。
PORTAにアクセスするときは、レジスタ経由で書き込むので数クロックを必要としますが、
VPORTAはメモリマップドIOなので、1クロックでアクセスできるとのことです(ChatGPT談w)。

 

ただし、メモリアクセスと同じということで、アクセスの形式が少なくなっています。

ATMEL STUDIOの予測変換を見ればレジスタアクセスの選択肢がわかります。

 

VPORTAのレジスタアクセス設定

 

PORTAのレジスタアクセス設定

PORTAだとトグルもできるんですね。

 

関連記事 

ATTINY202/402のFUSEビットをAVRDUDESSを使って書く方法
おもちゃ修理用のSOUND PLAYER基板の小型版 V2を設計しました!
[Part2ピエゾアンプ]ATTINY用Sounds Player基板を作って動作確認しました!
[Part1] ATTINY用Sounds Player基板を作って動作確認しました!
[Part2 テスト終了です] ATTINY402で音声再生のテストをしました
[Part1] ATTINY402で音声再生のテストをしました
ATTINY402に電子オルゴールのHVPプログラム書き込みテストをしました
[Part2 完成しました!]HVP対応のUPDI プログラマーを作成中です
[Part1] HVP対応のUPDI プログラマーを作成中です
[Part4 IRリモコン完成!] ATTINY202への書き込みとプログラムをやっています!
[Part3] ATTINY202への書き込みとプログラムをやっています!
[Part2] ATTINY202への書き込みとプログラムをやっています!
[Part1] ATTINY202への書き込みとプログラムをやっています!
ATTINY85 CPUを使って小型の赤外リモコンを作りました!