2010年12月6日月曜日

AVR-CDCをいじる。DTR信号を出す。やれば出来るもんか?


リセット機能を作っていて、USB−シリアル→リセットマイコン→Arduino等は、可能だが美しくは無い。理想的には、USBシリアルにArduinoのリセッタとか電源カットする出力を付ける方が理想ではある。

USBシリアルの方法論のいくつか

1) ほぼ純正のFTDIや、ATmega8u2のコードを変更する事
2) PIC18F14K50のArduino対応させてるコードが有るので、それの改変
3) AVR-CDCのコードをいじる事

(2)に関しては、Microchipが配ってるソースなので、ライセンス問題が緩いのも有って、楽なのだが、私の作った試作環境だと、6KBを超えた辺りのコードを転送すると、一回でこける・・・(1回送れるが、二度目は、電源を一度抜かないと送れない。)理由は不明である。

AVR-CDC これも取りこぼしは有ると思うが・・やって見るかと言う気にさせたのは、tiny45版がクリスタルを必要としない事だ。Readmeにも、tiny45版ならコントロールを足せると書いて有る。全てのコントロールを出すと、ピンが足らなくなるから、設定してないのだろう。今の所必要なのは、DTRだけなのでそれが使えればいいわけだ。

結論から言えば、・・DTR出力は出来た!

3回くらい試行錯誤して、ビルドしたら、DTRは出たのだが、反転を直すのが何処か結構悩んでしまってた。ループバックも問題無く動いてるから、あとは取りこぼしの問題だろう。そこは直せないと思う。使い方で対処する訳だ。

修正箇所は、同梱されてるmega48のコードのUART_CTRL_XXX が有る行を、tiny45の該当位置に、ガンガンコピーしていき、PORTが一個しか無いからBにした程度だ。DTR以外のコントロールはコメントアウトしただけ。反転処理は、UARTINITの部分のPORTへの代入値を、1から0に変更しただけだ。



 このtiny45-CDCに必要な、外部部品は、数個の抵抗、セラコン・ダイオードしか要らない訳で、一番大きな物体は、USBコネクタである。
 全部SOPで作ったら、USB-Bコネクタの下に全部収まると思う・・


 取りこぼし問題が、あまり出ない程度の速度で済ませれば、1cm平方に、収めるのは確実に可能で(SOP版なら完璧)


 まあ、試しに、mega8Lに、4800BPSの設定で、 Optibootを作って見るかな・・(うまく行けば、mega8Lの1cm平方の世界に、USBが付く可能性がある)・・何個も重ねていいなら、mega8u2を入れて、UNOと同じ構成にしちゃっても、面積は、1cm平方で済むはずだが・・USBシリアルの方法論が、一気に増えてしまった。

0 件のコメント:

コメントを投稿