トドお父さん通信 -30ページ目

トドお父さん通信

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

 

 

まるで持ち帰り仕事のようだった、ATTINY202での赤外リモコンの送信機のプログラム実装。

ようやく終わりました。

 

今回はパナの天井灯のリモコンを置き換える実装を行いました。

今までのATTINY85とプログラム書法と構造が全く変わって苦労しましたが、ようやくできて

嬉しいです!

 

これでATTINY85の¥250と比べて¥70なので、安価におもちゃ修理ができるはずです。

今回の検討内容は、Githubに上げました。

詳しい内容はGitHubの記事を見てくださいね。

それでは

 

 

関連記事 

【Part2】Sound Player基板V2の音声データの作成方法と特性検討
【Part1】Sound Player基板V2の音声データの作成方法と特性検討

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を使って小型の赤外リモコンを作りました!

 

さて前回はATTINY202に書き込むためのUPDIプログラマーを作って環境を整える所まででしたね。

お金があれば、ATMEL ICEというデバッガ―を買えばICPからUPDIまでサポートしているようですが

いまは秋月でも3万円くらいするみたいです。

 

 

しかも高電圧プログラムには対応していません。

今買うなら、Adafruitのこれが高電圧プログラムもできてよさげです。

 

このプログラマー、もともとはWagnerさんのオープンソースハードウェアをもとに

開発したそうです。

    AVR-Programmer /SerialUPDI_HV_Programmer

ソフトの世界はGNUって、オープンソースの開発も一般的ですがハードもあるんですね。

回路図に書かれているライセンスがCC-BY-SAとあるので、これがオープンソースということみたいです。

DC-DCで12Vを作って、USBserialが通信前にRTSを”L"に下げたタイミングで

150uSのパルスを作っているゲナです。部品さえ手に入れば簡単そうですね。

このタイプは次回の宿題としましょう(滝汗;)

 

閑話休題:前に開発したATTINY85のTV-B-GONEをベースにしたIRリモコンのファーム

ウェアを新しいATTINY202に移植する目途が立ちました。

ATTINY202はFlashが8kBあるATTINY85に比べて、2kBしかFlashメモリがありません。

 

そのため、各種メーカのTVリモコンざっと40種類くらい乗せていた元のプログラムに対し

5~6種類のIRリモコンコードに削って実装しました。

8ピンしかなく、スイッチも3個しか付けられないので問題はないでしょう。

プログラムに目途が立ったので、試作機を作ってみました。

  

さっそくブレッドボードで開発したソフトを書きこんで動作させました。

ATTINY85で作ったオリジナルと同様に、RESETボタンを押すと再起動して同じリモコン

コードを発信するところから始めました。

 

あれ、電源ON時はソフトが流れるが、RESETボタンを押しても反応しない!?

外部RESETがアサインされているPA0はプログラムのためのUPDIが割り当てられています。

どうも外部RESETを使うためには、FUSEを書き換えて、PA0をRESETにしないといけないようです。

UPDIが無くなるので、次の書き換え時は高電圧書き込み器が必要になります。

 

また20PくらいのATTINYでPB4を持っているCPUなら、AltanateでPB4にRESETを出せるそうです。

うんばば~、ATTINY85で慣れた内容が新しいATTINYシリーズでは全部変わっているじゃ

ないですか!?  ネットに情報も少ないのでデータシートを読み込んで、英語のフォーラムも

チェックせんばなりません。これじゃぁ、仕事のようです(現在無職なんですけどねw)

 

仕方ない、すべての動作はSW0, SW1、SW2の3個のスイッチのピン変化割り込みを使いましょう。

ところが、割り込みの仕様も変わっているんですよ、これが。

ここは試行錯誤が必要なので、次回に報告しますね。

それじゃぁ、おやすみなさい

 

 

関連記事 

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を使って小型の赤外リモコンを作りました!

 

 

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を使って小型の赤外リモコンを作りました!