前回 の内容で提案してみたところ、AVRでゴーサイン(というか、できるやつでやってて感じw)出たので、ストロベリーリナックス のボードを購入。
この手のワンチップマイコンはPIC&アセンブラしかやったことないので、まずは開発環境の使い方を知る意味で手堅くサンプルプログラムのCDC(USBシリアルポート)を動かしてみることに。
- AVR Studio 4.18 、FLIP 3.4.1 、WinAVR-20100110 をダウンロード、インストール。
- AT80USB162が分類されるSeries 2 software package からAVR272: USB CDC Demonstration: UART to USB Bridge をダウンロード、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に変更。
../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側のヘッダファイルでマクロとして定義されているのですが、これがカッコ内で展開されると文法エラーになるため。たぶんここ に書いてある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と通信ができるようになりましたと。
[参考]
- Atmel USB CDCデモ (趣味の電子工作の部屋 by すん)
- AVR Freaks AVR GCC forum - AVR328
- [bug #28756] Bug in AVR libc 1.6.7 (power.h for 8-bit AVR) (Old Nabble - AVR - Libc - Dev)
[2010/6/26 追記] 続き
[2010/10/12 追記] 16MHz用機能変更なしのHEXファイルをアップロード。USB側に接続したPCがデータを受け取るにはRXDとTXDを接続する必要があります。
1. AVR初心者 — 2010/10/12@12:09:30
いきなり質問させていただきますが,
この記事に書いてあるとおりのソフトのインストールと,操作を行い,
プログアム自体は,コンパイルでき書き込むことが出来ましたが,
パソコンから文字を入力してもAVRから返ってきません.
マイコンボード自体にボタンをつけており,そのボタンを押すと
反応は遅いですがレスポンスはあります.
押した回数だけのレスポンスではありませんが・・
何か分かることがあれば,教えてください.
よろしくお願いします.