ラジオ少年の楽しい電子工作、その他

AVRを使った簡単な回路の実験、そして日々のちょっとした出来事を書きます。

V-USB

2011年07月15日 | 日記

V-USB、関わりの無かった分野で知識は皆無である。

しかし、USBasmやAVRminiprog WriterはこのV-USBを使っている。最初はAVR-USBと称して

いたらしいが、ATMELからクレームが付いてV-USBになったとか。

ソフトでhidをエミュレートすることでUSB LOW スピードでPCとのやりとりが可能になる。

http://www.obdev.at/products/vusb/easylogger.html ここに簡単なロガーの例がある。

Tiny85で作って見ようかと取りあえずコンパイルしてみた。

内蔵RC発振器を16.5MHzにすることでUSB LOW の1.5MHzの11倍が丁度16.5MHzになる

のでうまく同期が取れるようである。

前にWSNのHIDaspxを作る為に買ってあった基板がある、これだと具合が良さそうだが、Tiny2313は

RC発振で12MHzまで延びるか?

暑いしハンダ付けも何だかかったるいなー。

 

ジャンル:
ウェブログ
コメント (32)   この記事についてブログを書く
この記事をはてなブックマークに追加
« アーティチョーク | トップ | V-USB Easylogger »
最近の画像もっと見る

32 コメント

コメント日が  古い順  |   新しい順
ATTINY85 Logger (kawana)
2011-07-15 13:41:18
ATTINY2313内蔵RC発振器1/1で何故8MHzちょっきりでないのかと考えていました。
8.25をPLLでx2にすれば16.5MHzを得られますね

LowSpeed1.5MHzで動作させるにはx11の16.5MHzが得られますね。
Tiny85での製作は、価値ある検討の一つと思いました
Unknown (ラジオ少年)
2011-07-15 14:28:07
内蔵発振器は工場出荷時は8MHzになるように調整され、その校正値がOSCCALバイトに書き込まれています。
この値を変えることで周波数が変化する訳です。
0x7Fで2倍くらいにはなるようですから、12MHZにすることも出来るかも知れません。
外部XTAL(12MHz)を省略することが出来ます。ただ、うまくUSBで動作するかは分かりません。
内部RC発振器の周波数の安定度に依存するでしょうね。
OSCALは変更していないが (kawana)
2011-07-15 14:43:17
OSCALは変更していないが、8.3MHzに成っている

周波数カウンタが狂っているのか。構成の事
を考えてみよう。
Unknown (senshu)
2011-07-15 17:17:45
V-USBのRC発振モードについて、補足します。

RC発振の安定性では、通常の方法ではUSB通信は成立しません。

しかし、USB通信時は、HOST側から正確な周期の信号が得られます。
この信号を利用して、RC発振の周波数を制御し、正確さを維持しま
す。こうした制御を行うことで、結果として水晶振動子に近い
精度を確保し、通信を可能にするのです。

この補正に必要な処理のため、12MHzよりも、若干高めの12.8MHz
で動作するようになっています。多くのAVRマイコンのデータシー
トを確認する限り、12.8MHzはRC発振の上限に近いです。

この手法は、コードを書いている連中の頭を疑いたくなるような
超絶技巧です。

初期の実装は不安定で、私は「RC発振はやっぱり使えない」と
あきらめていました。



Ceramic振動子偏差±0.5% (kawana)
2011-07-15 18:03:40
HIDspxの振動子を12MHzのセラミックに交換し
動作させた事が有ります。
実験結果は、NGでした。12MHzのセラミックでも
12MHz+0.5%の物が多く、Errorにかかる物が
多かったと思います。
senshuさんのHIDspxの回路図にもセラミック
振動子は、NGと書いて有ります。
12MHzの0.5%は、意外と大きい様に思いました。
技巧とは、Clockを標準12発として奇数だったらこちらのTiming調整ル-チンの様な事していた様でした。
Unknown (ラジオ少年)
2011-07-15 19:22:39
senshuさん、kawanaさん、今晩は。

>超絶技巧です。
どうもその様ですね。詳細は分かりませんが。
easyloggerにusbdrvasm165.incなるファイルがあり、これがその超絶技巧を司る様です。
USBの同期信号にRC-CPUCLKを追随させるソフトによるPLLの様な機能をさせているようですね。
Unknown (senshu)
2011-07-16 00:31:43
kawanaさんへ

>senshuさんのHIDspxの回路図にもセラミック
>振動子は、NGと書いて有ります。

今まで水晶振動子以外では安定動作を実現できませんでした。
動いても、夏場はOK,冬場はNG,そんな具合です。

また、HIDaspx(Hard+firmware)とhidspx(制御用ソフト)は
明確に区別し、大文字小文字も正確に綴ってください。
ハードは大文字+小文字で始め、ソフトは小文字のみ、と
いう使い分けです。

ラジオ少年さんへ

セラロックでも安定に動作しないV-USBに対し、RC OSCで
動作させるという工夫が追加され、非常に感激しました。

これで安定に AVRminiProg、あるいはUSBaspを動作させるこ
とができるなら、激安のAVRライタを実現できます。
Unknown (kawana)
2011-07-16 01:53:40
>激安のAVRライタを実現できます

研究の価値は有りますが、水晶の値段も50¥
くらいです、私は、自分の頭と相談して
Programを見る程度に留めておきます。
Unknown (ラジオ少年)
2011-07-16 11:17:35
不安定なRC発振器をソフトで制御することで、USBを使えるようにする、このテクニックに興味がわきます。
非常にクリチカルなタイミングで動作するようにプログラムが作られている様ですね。
USBより送ってくる同期信号を元にOSCCALの値をその都度設定しRC発振器の周波数を合わせながら、データのやりとりをさせる、そんなからくりをよく考えた物だと驚きです。
AVRのCLK=83ns/12MHz、USBは1.5MHz(666ns)この時間の間に同期処理をする?(良くは分かりませんが)
この程度の推測しかできません。
Unknown (senshu)
2011-07-16 11:42:58
ラジオ少年さん、こんにちは。

RC OSCでの実現はコストも魅力ではありますが、不可能と思わ
れることを可能にするチャレンジ精神が素晴らしいです。

「超絶技巧」は音楽用語だと思いますが、技術の世界に適用する
なら、この言葉はぴったりだと思います。

私もようやくですが、7/16 10:00ごろ、V-USBの最新版を
AVRminiProgに適用することができました。

RC OSCで動作を検証できる舞台は整ったわけです。

今では稀な手法(動作クロックを数えながらコーディング)で
書かれた V-USBを堪能してください。本当に頭が下がります。
Unknown (kawana)
2011-07-16 13:27:22
周波数偏差
XTAL 100ppm
12000000 12000000*100/1000000=1200Hz 1.2K
Cerarock 0.5%-->ppm
12000000 12000000*5/1000=60000 60K
X50倍に成っている。
昔実験したのですが
12.3MHzではOKでしたが、12.4MHzでは、時々Error

http://www.murata.co.jp/products/catalog/pdf/p60.pdf

私も、ProgramListしてみよう。解からないけど
Unknown (ラジオ少年)
2011-07-16 14:28:25
V-USBを早速やろうとDLして有るのですが、その前に昨日からusbasp、usbaspx、avrminiprog全部動作動作しなくなりました。
USBコネクタの接触不良が有るようですので
直接つなぐようにしたのですが、うまくないですね。
頭を冷やして原因をさぐります。
Unknown (kuga)
2011-07-16 14:48:24
>12.3MHzではOKでしたが、12.4MHzでは、時々Error
周波数誤差、一桁間違っていませんか?

http://www.style-21.jp/board/next9.cgi?id=ekousaku&lognum=16&dispnum=6857#7069
Unknown (senshu)
2011-07-16 14:58:17
USB通信のクロックは、±500ppm(0.5%)の精度が必要です。
12MHz±0.5% は 0.06MHzですから、12.3MHzでは、不十分な
周波数精度です。

なお、発振器にプローブを接続して計測すると誤差が増大します。
AVRマイコンのFUSE設定を変更してクロックを出力させ、それを
計測してください。

セラロックでもUSB通信に使えるものもあるのですが、安価に
販売されているものは、誤差が大きく適合しません。

しかし、RC OSCは、全く別のアプローチです。同期信号を元にクロッ
クの安定化を実現します。これはセラロック以上(上手く実装されて
いれば水晶並)の信頼性があると考えます。

ラジオ少年さんへ、

USBが不調の件、了解です。自作USB機器を製作していると、不慮
の事故でUSB I/Fを痛めてしまう可能性があります。

慎重に点検を行ってください。PC側のハードが故障していた場合は、
USB I/Fボードを使うことも考えてください。

私は、USB HUB経由で利用し、HUBをFUSE代わりにしています。
FUSE代わりになる保証はありませんが、今までの各種の実験に
耐えてくれています。
Unknown (senshu)
2011-07-16 15:16:28
>>12.3MHzではOKでしたが、12.4MHzでは、時々Error
>周波数誤差、一桁間違っていませんか?

私もそう思います。動作保障の全温度範囲で±0.3%程度の精度が
なければ、USB通信には使えません。

RC OSCではプログラムで補償することで、この精度を確保する
わけです。
Unknown (kawana)
2011-07-16 16:00:59
12.3-->12.03の間違いでした。
12.3MHz=12MHz+300KHzですね。
0.5%=60KHz
また、計算間違いと、認識不足が露呈してしまいました。2年前にも、計算間違いご指摘頂いた
様な気がします。
夏休みの研究で、以前より、ASM Program理解進むか、それが問題です。
Unknown (kuga)
2011-07-16 16:23:11
>USB通信のクロックは、±500ppm(0.5%)の精度が必要です。
間違ってます。
500ppmは0.05%です。

転送速度規格
high-speed 480.00 Mb/s ±0.05% (500 ppm)
full-speed 1.50 Mb/s ±0.25% (2,500 ppm)
low-speed 1.50 Mb/s ±1.5% (15,000 ppm)

V-USBはlow-speedです。
送信だけを考えれば、セラロックの精度で十分規格を満たせます。
ソフトで受信しているので、bit同期がフレーム
先頭でしか実行できないのでクリスタルが必要になります。
ハードでは信号の変化点ごとにbit同期を取ります。CPUクロックがもっともっと高ければソフトでもできます。
Unknown (senshu)
2011-07-16 16:37:06
私もボケてました。確かに、500ppm = 0.05%ですね。
(%での表記を間違えました)

LOW speedは精度が緩やかのように見えますが、2.0規格の
HUBなどを入れると、2.0に準じる精度が必要なのでは
ないでしょうか。1.1規格のみを使う機器が(ほぼ)存在し
ない今、どう理解すれば良いのかを知りたいです。




Unknown (kuga)
2011-07-16 16:50:44
>2.0規格のHUBなどを入れると、2.0に準じる精度が必要なのでは
LOW speed 機器に要求される精度はあくまで1.5%です。
(USB2.0の規格で規定されています)
USBマウスの中は普通安いセラロックですよね。
Unknown (ラジオ少年)
2011-07-16 17:33:02
何とかUSBasp、USBaspx、AVRminiprogが動くようになりました。
どうもライタで使ったZD=3.9Vがまずかった様です。
そのくらいしかなさそうですので、2.7V+diodeにしました。
ICソケットも何回も抜き差ししてますので怪しくなって来ました。
取りあえず良さそうですので、V-USBのプログラムをmega8に書き込んで見ましたが、認識されないなー、、、。
何か間違えているのかもですね。

Unknown (ラジオ少年)
2011-07-16 17:41:00
USBaspx、USBspx、AVRminiprogが元通り動作するようになりました。
どうもZD=3.9Vがまずいようです。(他におかしな所は見あたらない。)
そこで2.7V+diodeに変えました。何とか良さそうです。
そこで、V-USBを試す事にし、Mega8にRC3eをコンパイルして書き込みましたが、どうも認識されません。
FuseはFl=E4、Fh=D9にしてあります。
何かマイ違えているのかも知れません。
Unknown (ラジオ少年)
2011-07-16 17:42:12
”マイ違えて”では無く間違えてです。
Unknown (kuga)
2011-07-16 18:07:21
>FuseはFl=E4、Fh=D9にしてあります。
mega8で Fl=E4は 内蔵OSC8Mモードですよね。
RC3eではまだ、内蔵OSC12.8M用書き換えは済んでいないと思いますよ。
Unknown (ラジオ少年)
2011-07-16 19:07:57
kugaさん、今晩は、そうですか。これは早とちりでした。
プログラムを見ても私の頭では分かりませんが、どうやってusbdrvasm12.incを取り込んでいるのか探したのですが。
main.cにキャリブレーションオシレータのルーティンが有りませんね。

Unknown (ラジオ少年)
2011-07-16 19:24:36
FL=EF(XTAL)にして動作しました。
XTALの代わりに (kawana)
2011-07-16 20:24:03
XTALの代わりに秋月の下記を使用しました。
周波数調整を可変抵抗で出来る事が、Δfの
設定に都合が良かったと思います。

http://akizukidenshi.com/catalog/g/gI-01569/
Unknown (senshu)
2011-07-16 21:24:29
説明不足で申し訳ありません。

AVRminiprog-TEST-RC3eでは、V-USBを最新に差し替えたので、
defaultにある Makefileにある以下のオプションを

-DF_CPU=12000000UL
  ↓
-DF_CPU=12800000UL

と書き換えれば、RC OSC 12.8MHzに対応できると思います。

この変更を行って、make clean , make を実行すると、
500バイトほど大きいHEXファイルになります。

ただし、動作の確認は行っておりません。ノウハウが不足して
いるので、いろいろばトラブルも予想されます。


Unknown (senshu)
2011-07-16 22:35:37
RC3eには、OSCCALを操作するコードが不足しています。

ATtiny85を用いた例が、以下のURLで紹介されています。
(ちょうど1年前です)

http://www.ruinelli.ch/how-to-use-v-usb-on-an-attiny85

2010/07/15 18:43 2,426 osccal.c
2011/07/01 14:39 2,813 osccal.h
2010/07/15 18:43 4,098 osctune.h
2010/07/15 18:43 900 Readme.txt

というファイルが参考になるようです。
Unknown (ラジオ少年)
2011-07-16 23:06:03
senshuさん、今晩は。
早とちりの私の勇み足でした。
ご紹介のURLを参照致します。
 
Unknown (ラジオ少年)
2011-07-17 08:08:34
senshuさん
お早う御座います。
URLを見ました、V-USBのexamplesの最終issueは2010年、その前の2008,9年のexammpleは問題がありすぐには動作しない、そこで、ジョージさんが、すぐに動くEasyloggerのコードを書いたと言うことが書かれていますね。
makefileのreplace等が書かれています。

out of the box 辞書には出ていない、スラング? =すぐに使える、こんな英語は知りません(笑い)

ところでmakefileの中にavrdudeを指定してプログラムを書き込む記述が有ります。
avrdudeの頭にpathを付けてavrdude-GUIのavrdude.exeを指定すればコンパイル後make flash(Easyloggerのmakefileでの話です)とやれば、書き込みが出来ると考えます、同様にmake fuseも然りでは。

如何ですか?
Unknown (senshu)
2011-07-17 08:50:32
私も、紹介したURLに書かれている情報を参考に、MakefileのF_CPU
定義を変更するだけで、OSCCALの補正コードが組み込まれるように
各所を修正しました。

delay関連の修正も行いましたが、未動作チェックです。

F_CPUを変更し、 make clean , make と入力すれば、希望する
HEXファイルが得られます。

またMakefileの件ですが、オプションを追加して使用するのは、
利便性を上げる一般的な使い方です。

avrdudeのコマンドオプションについても、Makefileに適切に書い
ておけば問題ない、これがavrdude設計者の意図する使い方だと
思います。

Makefileは多くのノウハウが埋め込まれているプログラム全体の
設計図です。これから設計者の意図を理解したいと思います。
Unknown (kuga)
2011-07-18 10:41:37
>full-speed 1.50 Mb/s ±0.25% (2,500 ppm)
12Mbit/s の間違いです。

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。