http://www.obdev.at/products/vusb/usbasploader.html
上記にあるUSBAsploaderにあるソース ファイルをATmega1284P用に変更してみました。動くかどうかは分かりませんが駄目モトです。コンパイルは通り書き込みもOKですが、そうは簡単に動いてくれません。「USBデバイスが認識されません」とメッセージが出ます。
年末の大掃除をしながら考えて見ましょう。
エコラジオ、つまり電気を必要としないラジオです。平たく云えば鉱石ラジオ(ゲルマニュームラジオと云った方がいいかも)の事です。私の住んでいるところでは電界強度がそれほど強くありませんのであまり期待は持てません。
取りあえずフェライトコアにリッツ線を適当に巻いてみました。インダクタンスは270uH程度です。これにポリバリコンをつないで共振周波数をAPB1で測ってみました。バリコンの真ん中辺りで954KHz(TBSラジオ)に共振してます。これにダイオードを付けて明日にでも実験してみましょう。
2012/12/29(土)
大掃除の合間にダイオードとクリスタルイヤフォーンを付けてベランダに出て受信して見ましたが全く聞こえません。高周波増幅回路が要りますね。正月の暇つぶしにやって見ますかね。電池を使うのでエコラジオでは無くなります。
ソースをコンパイルすることでATmega16で動作することを確認出来た事に気を良くしてそれではATmega32でとやって見たのはいいですが、どっこいそうは問屋が卸しません。upgrade.ebuの書き込みは出来るのですがその先へ進むことが出来ません。Program AVR でconnect しません。プログラムはほぼ良さそうです。mega16とmega32の違いは?
うまく移植出来る保証はないのですが、多分出来るだろう?それだけですので。
2012/12/23(日)
今朝もやって見たがmega32では全くNG、何が悪いのか?
2012/12/23(日)17:15
考えてみました。今作っているのはJTAG-ICEのクローンです。本物のJTAG-ICEに使われているCPUは何を使っているのかです。
boot loaderは確かにmega32で動作しています、そして、JTAG-ICEの本体であるupgrade.ebuをAVRStudioからDLしてmega32に書き込めます。bootloaderの役目はここまでです。問題はDLして書き込んだJTAG本体のプログラムです。これは本物に使われているのですから、CPUもそれに合わせなければ動かないのは当然ではないかと、、、、この部分は実行ファイルですからどうすることも出来ません。多分、本物はATmega16あるいはFPGAの様なものを使っているのでしょう。ここを勝手にmega32に変えてもNG。そんな気がしてきました。
この目論見はここでペンディングとし、mega16を使う事にしましょう。残念ですが、、、、、
KEE AVR JTAGICE mkII ($99)とあるがこれを買った方がいいかもネ、お金が無くて買えませんが。でも欲しくなりますね、対象deviceがかなり増えますしね。
純正のAVR JTAG-ICE MK2は512KのSRAMをもっているようですし、本格的なデバッグが出来る機能を持っている印象です。ターゲットのFlashの中身をそっくりSRAMに読みとりエミュレート出来るのでしょう。
小生の作った物はAVRStudioのdebugを利用してJTAG-ICE経由でターゲットをステップで動作させることが出来ると云ったところでしょうか、エミュレーション機能はなしです。
2012/12/27(木)
今年も押し迫りました。JTAGはモチベーションがすっかり下がってしまいましたがもう一度と思って試して見たいと思ったのであります。この(boot loader)プログラムの中に device code と云うのが出てきます。mega16n場合は0x75です。mega32の為に0x73にしていたのですが、これでいいのかどうか全く分かっていません。これを0x7Fにしてみようと思い立ちました。mega32をもう一度JTAGにする為にfuseを書き換えたのですが、これが原因かどうかは分かりませんがその後全くfuseが読み出しが出来なくなりました。
しょうがないのでパラレルで読み出してみると読み出せます。もう一度書き直して、ついでにプログラムも書き込んでみました。(書き込み時にエラーが出ることが有ります)しかし、駄目ですね。LEDが点滅しません、つまりboot loaderが動いていないのです。
何回やっても同じ状態、どうやらmega32はご昇天してしまった様です。全くついていませんが今年のオチです。
色々試行錯誤重ねどうやらJTAG本来の動きをさせることが出来ました。AVRStudioのdebug modeを選択しStart debugingをクリックします。mega32に書き込まれたLED点滅がF11を押す度に点滅します。JTAG無しでは、PORTを開いて該当するbitの窓が黒くなったり白くなったりすることでプログラムの動きを把握できます。JTAGをつなぐと実機でのLED点滅が確認出来る訳です。なかなか便利な機能ですが、古いのが難点ですね。ターゲットAVRが極端に少ないのと何れもOLD AVRマイコンです。
IsoJtagISP_sourceがありますので最初はmega32(CPU CLK=14.745600MHz)を使って作ろう考えてコンパイルを繰り返したのですが、先へ進む事が出来ません。そこで、mega16を入手してオリジナルのIsoJtagISP_1.5_7.3728MHz.hexを書き込んでやることに方向転換。CPU CLKは1/2にするため分周回路を作りmega16はfuseを変更して外部クロックを有効にします。
これでやると全てがうまく動作します。そこで、オリジナルのソースをそのままコンパイルしてhexを作ってやってみましたが、どうしてもうまく行きません。
オイジナルのソースにはコンパイル後のfileも含まれていますので、この中にあるアッセンブラファイルと自分でコンパイルしたアッセンブラファイルを比較して何が違うのかを見つけるしか無いようです。これで分かればmega32への移植もできるのではと考えています。
このJTAGはSWでISP、JTAGを切り替えるようになっていますのでISPにしておけばプログラムをターゲットに書き込むことが出来ます。
Start Debuggingを押してから実際に操作出来るようになるまで時間がかかります。暫く待っているとプログラム リストの左に矢印がでます。この状態でF11を押すことができます。
2012/12/22(土)
avr-gccのversionは3.4.5の様です。winavr-200600125をDLしてコンパイルすることにしました。コンパイルしたhexで何故うまくいかないのか? IsoJtagISP.lssを比較してみたところ、USART_Init()のボレートの設定がおかしいのです。オリジナルのspeed=11, プログラムでのコンパイル結果は25。ここを強制的に11にして再コンパイル。これでJTAG update fileは書き込みが出来るようになりました。
所が、次のprogram AVRを選択してconnect して見ますがここでコネクト出来ません。
もう一カ所 000030a2が 違っていますね。 ここはソースの何処になるのか?ここを修正すれば多分OKになります。ここも25になっています。これを11にすればOK?
upgrade.ebnの書き込みは出来るようになりましたが、JTAG modeにならない、connectが出来ない様です。ISOJtagISP.lssの違うところは、
13 .debug_line 00000420 00000000 00000000 00001119 2**0
CONTENTS, READONLY, DEBUGGING
14 .debug_str 00000160 00000000 00000000 00001539 2**0
CONTENTS, READONLY, DEBUGGING
オリジナルは下記のようになっている。
13 .debug_line 0000040e 00000000 00000000 00001119 2**0
CONTENTS, READONLY, DEBUGGING
14 .debug_str 0000014c 00000000 00000000 00001527 2**0
CONTENTS, READONLY, DEBUGGING
後は全て一致しているのでうまく行かないのはこの辺に原因があるのか?
isojtag_avr910.Sを強制的に11にしていたところを元に戻すのを忘れていました。ここを元通りにしてOKななりました。.debug_line, .debug_strはオリジナルと違っていても問題ないようです。
JTAG_ICEも動いたので多分機能は果たされていると思われます。
次は初心に戻ってmega32への移植をやってみましょう。