PCでmsec時間測定(2) - AT90USB162購入

blog20100624-AT80usb162

前回Link の内容で提案してみたところ、AVRでゴーサイン(というか、できるやつでやってて感じw)出たので、ストロベリーリナックスLink のボードを購入。

この手のワンチップマイコンはPIC&アセンブラしかやったことないので、まずは開発環境の使い方を知る意味で手堅くサンプルプログラムのCDC(USBシリアルポート)を動かしてみることに。

  • AVR Studio 4.18LinkFLIP 3.4.1LinkWinAVR-20100110Link をダウンロード、インストール。
  • AT80USB162が分類されるSeries 2 software packageLink からAVR272: USB CDC Demonstration: UART to USB BridgeLink をダウンロード、ZIPファイルの中からSTK526-series2-cdc-2_0_3-doc.zipを適当なところに展開。
  • AVR Studio 4を立ち上げ、(展開したディレクトリ)¥STK526-series2-cdc-2_0_3¥demo¥STK526-series2-cdc¥gcc内にあるapsファイルを開く。
  • (展開したディレクトリ)¥STK526-series2-cdc-2_0_3¥demo¥STK526-series2-cdc¥conf¥config.hを開き、#define FOSC 8000を16000に変更。
ここまではすん氏Link のサイトに書いてあったことに従っただけ。ここでコンパイルすると、
../main.c:107: error: expected expression before 'do'
../main.c: In function '__low_level_init':
../main.c:126: error: expected expression before 'do'
なるエラーが出て二日悩む。答えはSTK526-series2-cdc-2_0_3¥lib_mcu¥power_drv.hの以下の部分を以下のように()を削除。
#ifdef  __GNUC__
   #define Clear_prescaler()   (clock_prescale_set(0))
    ↓
   #define Clear_prescaler()    clock_prescale_set(0)
関数clock_prescale_setがWinAVR側のヘッダファイルでマクロとして定義されているのですが、これがカッコ内で展開されると文法エラーになるため。たぶんここLink に書いてあるinline関数を使っても解決できると思います。

すん氏のサイトを参考に、gccディレクトリにできたSTK526-series2-cdc.hexファイルをFLIP 4を使って書き込み。一度抜いて差し込むと新規デバイスとして認識するので、STK526-serise2-cdc-2_0_3-doc¥demo¥sTK526-series2-cdcディレクトリにあるINIファイルを指定してドライバをインストール。無事XP/Vista上で仮想COMポートとして認識される。

ところがループバック(入力をオウム返しする)はずなのにターミナルソフトで通信しても何の反応もないことにまた二日悩み、ある勘違いに気づく。このプログラム、USB側に対してオウム返しするデバイスになるんじゃなくって、USBと本当のCOMポートの変換しているのね。

AT80USB162の端子でCOMポートの役割を担っているのが、PD2(RXD)・PD3(TXD)・PD5(XCK)・PD6(RTS)の4つ。これを9ピンD-Subに接続すれば本当にUSB-COMポート変換機。ループバックさせるにはRXDとTXDを接続して、自分が発した信号を自分で受け取るようにしないといけないわけか。同期信号は自分で自分の出した信号受けるから不要(自然と同期されている)と。すん氏のページよく読んだら両方を接続しろと書いてあるぢゃないかorz

写真のようにPD2とPD3を短絡して再度ターミナルソフトで入力すると無事オウム返しするのを確認。またcdc_task.cを
uart_putchar(uart_usb_getchar());   // loop back USB to USART
↓
uart_putchar(uart_usb_getchar()+1);   // loop back USB to USART
と変更して、入力文字がアルファベット順で一文字ずれる(HALとタイプするとIBMと返ってくる)のも確認。よし、これでPCと通信ができるようになりましたと。

[参考]

[2010/6/26 追記] 続きLink

[2010/10/12 追記] 16MHz用機能変更なしのHEXファイルをアップロード。USB側に接続したPCがデータを受け取るにはRXDとTXDを接続する必要があります。

添付ファイル: STK526-series2-cdc_default_16MHz.hex 

— posted by mu at 10:38 pm   commentComment [11]  pingTrackBack [0]

この記事に対するコメント・トラックバック [11件]

Up1. AVR初心者 — 2010/10/12@12:09:30

はじめまして.
いきなり質問させていただきますが,
この記事に書いてあるとおりのソフトのインストールと,操作を行い,
プログアム自体は,コンパイルでき書き込むことが出来ましたが,
パソコンから文字を入力してもAVRから返ってきません.

マイコンボード自体にボタンをつけており,そのボタンを押すと
反応は遅いですがレスポンスはあります.
押した回数だけのレスポンスではありませんが・・

何か分かることがあれば,教えてください.
よろしくお願いします.

Owner Comment mu  2010/10/12@15:47:27

本文にも書いてあることなので再度書くのは失礼になるかもしれませんが、RXDとTXDは接続されてるでしょうか。ピン番号はAtmelのサイトにあるチップの仕様書(PDFファイル)で調べられます。

またはこの記事の続編(その3)にあるcdc_task.cを使用してみてください。余計な機能がついてますが、RXD-TXDを接続しなくても動作します。
http://axion.sakura.ne.jp/blog/index.php?UID=1277560303Link

3. AVR初心者 — 2010/10/12@16:07:28

返答ありがとうございます.

私もストロベリー社のマイコンボードをつかっているので,同じ用に繋いでいます.

教えていただいたプログラムでコンパイルしても,RDXとTXDを繋がなければ,

反応しなかったです.

Owner Comment mu  2010/10/12@22:19:46

一つ一つ確認していきましょう。

この記事と続編(その3)の記事にHEXファイルをアップロードしました。どちらも私の手元のボードで動作確認済みです。

- この記事にあるHEXはAtmelのソースを機能変更なしに16MHz用(ストロベリーリナックスのボードは16MHz)したものです。

- 続編記事に貼りつけたのはRXD-TXD短絡なしで打ち込んだ文字をそのまま返すほか、1秒に1個のピリオドをPCに送ります。

これらのHEXファイルをFLIPなどで書き込んで上記の動作をすれば、ボード自体及びプログラムの書き込みは成功していますので、ソースコードに問題がある可能性が高いです。

そうでない場合は、ボードの異常もしくは正しいプログラムをAVRに書き込めていない疑いがあります。

5. AVR初心者 — 2010/10/12@22:29:14

この記事の方のhexファイルは,これまで同様に,
文字を返してくれませんでした.

続編のほうでは,1秒置きにピリオドは入ってきますが,
文字は返してくれませんでした.
短絡する必要は,ありませんでした.

ハイパーターミナルの設定がおかしいのでしょうか?

UpOwner Comment mu  2010/10/13@12:30:47

厄介ですね。ピリオドが出ているということは、受信はできている。PC側から送信されていないのかもしれません。

メイン環境のWindows7にはハイパーターミナルが無いため、ThinkPad X31/Windows XP SP3を引っ張り出してきました。デフォルト設定(2400bps, 8bits, No parity, Stop bit 1, Hardware flow control)でも動作しているようです。ハイパーターミナルの問題かどうか確認するために、Tera termで確認できますでしょうか。
http://ttssh2.sourceforge.jp/Link

Tera termでもだめだとすると、AVRが受信したか確認するためにPort BをOn/OffさせるHEXなんてのは作れますが、帰宅しないとできないのですぐには無理ですね。

7. AVR初心者 — 2010/10/13@16:02:57

毎回親切に教えていただきありがとうございます.

申し訳ないんですが,自分の勘違いで命令は,返ってきていました.

WinAVRを再インストールすれば,自分でもhexファイルを書き出すことができました.

お騒がせしました(TT)

あとひとつ質問があるんですが,
使用しているのははwindows7の64bitでしょうか?

自分はこれからは,OSをwindows7の64bitにかえて開発したいと思っているので,よければ教えてください.

Owner Comment mu  2010/10/13@19:14:05

解決できて何よりです。この手は私も含め誰でも経験することだと思います。

メインの開発環境はWindows7 64bitです。ただ安い中古で良いので32bit (XPとか)をサブ機で持っておいたほうがいいかなと思います。何か問題が起きたときに「64bitだから?」「Vistaや7だから?」という疑問を確認できますので。

9. AVR初心者 — 2010/10/13@19:26:42

ありがとうございます.今まで,マイコンをあまりいじったことがなかったので本当に助かります.

なるほど.

ただ,Windows7 64bitでは現状ディバイスマネージャーで,!マークがついた状態で,ちゃんとAT90USB162を反応してくれません.

下のページにある作業はしたのですが・・
http://strawberry-linux.com/products/at90usb162/tutorial2.phpLink

Windows7 64bitの設定では何か違うのでしょうか?

Owner Comment mu  2010/10/14@10:13:02

64bit版のドライバに関しては、2010/7/2の記事「PCでmsec時間測定(4) - AVR側ひとまず完成」を参考にしてください。私のWindows 7 x64 1台でしか動作確認してないので、いまひとつ信頼性に自信が無いのですが。
http://axion.sakura.ne.jp/blog/index.php?UID=1277996875Link

Up11. AVR初心者 — 2010/10/15@17:33:37

返答が遅れてしまいごめんなさい.

Windows7 64bitで,何とかAT90USB162を読み取り.CDCもできました.

また,何かわからないことがあればよろしくお願いします:)

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.8962 sec.
prev
2010.6
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30