ATTINY402に電子オルゴールのHVPプログラム書き込みテストをしました | トドお父さん通信

トドお父さん通信

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

おもちゃ病院のCOB基板の故障入れ替え用のCPU基板を検討しています。
安価なCPUとして、前にを秋月から買ったATTINY202を使って赤外線リモコンを作りました。
 
続いて、少し容量とピン数の大きいATTINY402/816/1614 をマルツから入手しました。
 
それで今度はオルゴールを作りました。つつじが丘おもちゃ病院の大泉院長の力作です。
 
TINY402で実装するには、メモリが4kBしかないので1曲しか入りませんが、メモリの容量の大きなCPUを使えば数曲ははいりそうです。
 
ピンが少ないので、前回作った自作のHVP UPDIプログラマが活躍します。
今回の回路でも、起動/停止するSW0はUPDI信号を入力するPA0 RESETピンを使います。
なので、FUSEビットを書き換えてPA0をGPIOで入力ピンに設定すると、次に書き換えるために
は、PA0 RESETピンに12VのHVPを印加して、強制的にUPDIモードに切り替える必要があります。
 
手順としては、まずAVRDUDEでFUSE書き込みを行います。
デフォールトでPA0 RESETピンはUPDIになっていますので、ここでは普通に書けるはずです。
 
 
ここでは、クロック 16MHzでPA0 RESETピンをGPIOにする設定なので、
OSCCFG(FUSE2)を20MHz→ 16MHz、SISYCFG0(FUSE5)をUPDI→ GPIOに変更で
avrdude -Cavrdude.conf -c serialupdi -p t202 -P COM7 -U fuse2:w:0x01:m -U fuse5:w:0xC0:m
を書き込みます。
これでPA0 UPDIピンがGPIOになるので、次回よりファーム書き換えには事前にHVP印加が必要です。
【後日追記】
ファーム書き込み時のGUIアプリ、AVRDUDESSでもFUSE書き込みができることが分りました。
記事をここに置いています。
 
次はファームの書き込みです。
今度はGUIのAVRDUDESSを開いてATMEL STUDIOで開発したHEXファイルを選びます。
 
書き込み前に、プログラマの黄色いHVPボタンを押した状態で、赤いPORボタンをチョンと押します。
これで、PA0 RESETピンがGPIOに設定されても、強制的にUPDIになってプログラムできます。
 
下のデータシートを参照してくださいね。次のパワーオンリセットで無効化されます。
 
 
この手順で、大泉さんのTinyAVR電子オルゴールVer1_2 の書き込みができます。
プログラムの修正内容をお知らせしますね。
 
今回確認した回路図は下記です。外部メモリを付けてないので簡単です。
アンプを付けてないので音は小さいですが、あくまで今回は動作確認です。
 
 オルゴール動作確認 回路図
 
まず、つつじが丘 おもちゃ病院のtinyAVR電子オルゴールVer1_2(tiny402をサポート)をダウンロードし、自分のATMEL STUDIOのフォルダに展開します。
 
次は、TINY402用のプロジェクトを選択し、プロジェクトファイルをダブルクリックして
開きます。(もちろん ATMEL STUDIOをインストールしている前提です)
 
開いたorgel_SW_402プロジェクトの下にある、orgel_conf.hを開きます。
ここに各種設定が書き込まれるようになっているようです。
 
 
初期設定だと、外部Flashメモリに保存した音声再生(VOICE_S)になっているようです。
ここの設定を1 → 0(再生しない)にして、PART_N(オルゴール再生)を 0 → 3にします。
ここの数字で、オルゴール再生の和音数が決められるようです。 メモリ容量に関係するので
最初は2(和音数2)にした方がいいかもしれません。
 
次に再生されるオルゴールの曲を選択します。
オルゴールの音符データはプログラムメモリの中に書き込まれるので、TINY402の場合は
フラッシュが4kBしかありませんので、2kBくらいの曲を1曲しか書き込めません
(コンパイルエラーになる)
今回はTINY402でオルゴールの再生テストのため、2KBの『シャボン玉飛んだ』を選択します。
 
音符データの指定は、main.cの下にある、song_idx.sというアセンブラファイルにあります。
ATMEL STUDIOでこのファイルを開いて下さい。
デフォールトでは3曲くらい選択されているのを、一旦 全て // でコメントアウトします。
 
それから、455、456行にあるシャボン玉のファイル指定2行のコメントを外します。
son_mac (song_SYABONDAMA)
#define song_SYABONDAMA_DEF
 
Build → Rebuild Solution を実行してコンパイルできました。生成されたHEXファイルはReleaseに入ってます。
 
 
ちなみに、上のサイズが少し大きい音符ファイルを選ぶと下記のようにエラーになります。
 
 
Could not allocate program memory プログラムメモリ不足です。
 
project → propaty → device で 仮にATTINY402より容量の大きいATTINY804とかを
選んでリビルドするとエラーが出なくなるので確認できますね。

さて、今回の演奏をYouTubeに登録しました。
電源を入れて、SW0を押すとオルゴール曲の再生が始まります。長押しすると停止します。
プログラムメモリが大きければ、複数曲入れることができ曲順にループ再生するとのことです。
 
 
アンプがあるともっと迫力のある音になるのですが、CPUとスピーカ直結のため
すこし音質がしょぼいですよね。今回テストなので許して下さいね。
 
でも、さすが 糸魚川の「おもちゃクリニックゆりかご」のDr.わたなべさんが作成した音源、きれいな和音がでていますね。
次は、すこし容量の大きいATTINY1614で、アンプを付けて試験しましょうかね?
 
それでは、おやすみなさい。