IT技術でエコライフを進めるアイデア集

アクセスカウンタ

zoom RSS AVR Tiny44でUSB制御(v-usb)

<<   作成日時 : 2010/05/24 15:56   >>

面白い ブログ気持玉 1 / トラックバック 0 / コメント 1

自転車発電で順番にライトを!

当方で作成している自転車発電装置は、車のオルタネータを使用するので、常に直流12Vが出力されます。安定して使えるのはいいのですが、速度を測定することができません。貸しだしのときにも「速くこぐとランプが順番についていくようなやつ、ないですか?」という問い合わせもよくありますが、現状では「残念ながらできません」と断っていたところです。

発電機を単純なモーターにするか、センサーをつけて別途速度を測定するか、2種類の方法があるのですが、現在のしくみで発電が安定しているので後者の仕組みを考えてみました。

自転車の速度計などでも使われるように、ネオジム磁石と、磁気センサーを使って速度を検出し、それに応じて電球を順番につけていくという仕組みです。こうしたインジケータは専用ICを使うタイプが多く、ロジック回路でやろうとすると、いきなり難しくなります。昔ならこれで挫折していたところですが、最近はチップマイコンの開発環境が整備されており、簡単なソースで対応できることになります。

USBで速度データを読み込み

で、今回の本題ですが、速度を検出してくれるのであれば、これをパソコンに取り込めないかということを考えたわけです。

パソコンに情報を取り込む方法としては、RS232C通信が一般的なんでしょうが、最近はノートパソコンでシリアル端子を持つものがなくなり、わざわざUSB変換をする仕組みなっています。それならいっそうUSBで直接接続してしまえばいいのではないか、という欲望が出てくるのですが、USBにしてしまうと、こんどはドライバプログラムが大変になってきます。

>参考:トランジスタ技術 2008年8月号

USBつきのAVRボードも販売されているのですが、よく読むとプログラムだけはUSB接続できるけれど、USB接続のファームウェアは含んでいませんよ、と書かれており、こちらも自分で書かなくてはいけないようです。(まあマイコンが対応しているので、ドライバ関係はどこかに転がっているのでしょうが)

>AVR-USBボード:AVR-USB変換ボード(ストロベリーリナックス)

というわけでたどりついたのが、SaltさんのUSB機能のないAVRでUSBを使用するという報告記事。この「内蔵オシレータで使う」というのに惹かれました。だってクリスタルってなんとなくぜいたくなイメージがありますしね(そんなに高くありませんが)。

hid-data を ATtiny45 の内蔵 RC オシレータで動作させる方法(Salt's homepage)

もともとは、AVRでUSBを使うソースコードを公開している、V-USBのソースを使っています。私もSlatさんにならって、こちらからダウンロードさせてもらい、変更をくわえていきました。

V-USB

Saltさんが使っていたのはTiny45(8pin)、私が使おうとしていたのが手元にあったTiny44(14in)。同じようなもんだろうということで、たかをくくっていたのですが、なかなか細かいところで、AVRは規格が違ってくるものです。

ATiny44では動かなかった2つの理由

まずは、内蔵オシレータが、Tiny45では16MHzを作り出すことができるので、V-USBの規格(12,15,16,20MHz)に合致するのですが、Tiny44では8MHzしか対応していません。

それでは仕方ないので外部クリスタルを使って、12or16MHzを使おうかと考えると、こんどはなんとTiny44のピン数が足りなくなってしまうのです。
Tiny45のほうがピン数は少ないはずなのですが、USB通信をするにあたって、INT0を使うポートしか指定することができないという制限があります。Tiny45は5本がBポートで確保できるのに対し、Tiny44は、Aポートに8本あり、Bポートは4本しかありません。リセット端子は使うことができないので、結局Tiny44ではだめということになりました。


規定外ですが、これで動きました


で、どうしたかというと、内蔵オシレータをオーバークロックへ調整して、12MHzで動作させてやろうという方法です。自動的にUSB信号を通じてキャリブレーションをしてくれるようです。標準のソースでは自動的に12Mhzまで調整してくれませんので、2行だけソースをいじりました。


libs-devide/osccal.c

//uchar step = 128;
//uchar trialValue = 0, optimumValue;
uchar step = 32;
uchar trialValue = 192, optimumValue;


これで無事12MHzにて動作。USBからもHIDデバイスとして認識してくれました。

ただし、12MHz動作なので、電圧はおおむね4V以上必要になります。USBからの電圧を下げるのではなく、ツェナーダイオードを使ってUSB信号の電圧を下げる方法で対応しました。

また、マニュアルにも記載されていますが、オーバークロックのためEEP-ROMへの書き込みはできません。あしからず。


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
面白い

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(1件)

内 容 ニックネーム/日時
2010年7月にv-usbがバージョンアップされて、INT0でなくともSIG_INTERRUPT0でも使えるようになったようです。

http://www.obdev.at/products/vusb/download.html
自己コメント
2010/10/16 01:09

コメントする help

ニックネーム
本 文
AVR Tiny44でUSB制御(v-usb) IT技術でエコライフを進めるアイデア集/BIGLOBEウェブリブログ
文字サイズ:       閉じる