Sim's blog

電子工作はじめてみました

AT90USBボードを使ってみました

2010-10-31 04:52:33 | AVR
かなり昔に買うだけ買って放置していたストロベリーリナックスAT90USBボードを使ってみました。



開発ソフトは以下をインストールしました。
- AVR Studioのページ
- WinAVRのページ
- FLIPのページ

以下のページを参考にしました。ありがとうございます。

ストロベリーリナックスさんのチュートリアル
製品ページ (組み立て済) キットと組み立て済の2種類の製品があります。

ジャンク宿さんの記事
AT90USB162マイコンボード開発メモ【1】
AT90USB162マイコンボード開発メモ【2】
AT90USB162マイコンボード開発メモ【3】
AT90USB162マイコンボード開発メモ【4】
AT90USB再び
SPI通信

すんさんの記事
Atmel USBマウスデモ
Atmel USB CDCデモ

Atmel
AT90USB162のページ
AVR USB Series2 Software Packages USB関連のデモがダウンロードできるページ
STK526ボードのページ デモはSTK526を前提にしている。


先人の偉業が色々あるので特に書くこともないのですが、とりあえず自分がやったことを記録に残しておきます。やったことはUSBシリアルのデモを動かしました。

(1) Atmelのページ(AVR USB Series2 Software Packages)からAVR272 USB CDC Demonstration(AVR272_USB_CDC_Virtual_Com_Port.zip)をダウンロードしました。

(2) AVR272_USB_CDC_Virtual_Com_Port.zipファイルを解凍すると、3つのzipファイルがあります。AT90USB162はシリーズ2(型番の末尾が2)なので、STK526-series2-cdc-2_0_3-doc.zipを適当な場所に解凍します。私はd:\work\avr\stk526-series2-cdc-2_0_3-docに解凍しました。

zipファイルの構造は次のようになっています。

STK526-series2-cdc-2_0_3-doc
demo
STK526-series2-cdc ← at90usbxxx_cdc.inf、cdc_task.cはここにあります。
conf ← config.hはここにあります。
doc
fig
gcc ← STK526-series2-cdc.apsはここにあります。hexファイルはここにできます。
iar
Debug
Exe
doc
html
lib_board
stk_526 ← stk_526.hはここにあります。
lib_mcu
flash
pll
power ← power_drv.hはここにあります。
uart
usb
util
wdt
modules
scheduler
usb
device_chap9

(3) AVR StudioからSTK526-series2-cdc.apsというプロジェクトを開きます。このプロジェクトファイルはdemo\STK526-series2-cdc\gccにあります。

(4) すんさんのページにあるようにCPUの周波数の設定を8MHzから16MHzに変更します。具体的にはdemo\STK526-series2-cdc\confにあるconfig.hの
//! CPU core frequency in kHz
#define FOSC 8000

//! CPU core frequency in kHz
#define FOSC 16000
に書き換えます。

(5) buildします(私はいつもF7を押してます)。すると、エラーが出ています。

../main.c: In function 'main':
../main.c:107: error: expected expression before 'do'
../main.c: In function '__low_level_init':
../main.c:126: error: expected expression before 'do'

main.cを見てみると107行も126行もClear_prescaler();でした。探してみるとClear_prescaler()はpower_drv.hで定義されているマクロです。power_drv.hはlib_mcu\powerにあります。マクロの定義は次のようになっています。
#ifdef  __GNUC__
#define Clear_prescaler() (clock_prescale_set(0))
#else
#define Clear_prescaler() (Set_cpu_prescaler(0))
#endif

今回はWinAVRを使っているので__GNUC__というマクロが定義されています。したがって#ifdefは上の方のclock_prescale_set(0)を使ったマクロを定義しています。clock_prescale_set()ですが、avr/power.hで定義されています。このファイルはWinAVRをインストールしてフォルダの下のinclude\avrにあります。覗いてみると、clock_prescale_set()もマクロ定義になっていて、do~while(0)で囲まれていました。結局マクロを展開すると、(do ~ while(0));のようにdo~whileのまわりに括弧がいる形になってC言語の文法エラーになっていたということみたいです。たぶん元々は関数で定義されていたので括弧でくくっても問題がなかったんでしょうね。
というわけで、以下のように括弧を取り除いてエラーを修正します。
#ifdef  __GNUC__
#define Clear_prescaler() clock_prescale_set(0)
#else
#define Clear_prescaler() (Set_cpu_prescaler(0))
#endif

ちなみに、もうちょっと下にSet_cpu_prescaler(x)のマクロ定義でも(clock_prescale_set(x))となっているので括弧を取り除いてやります。

これで無事build完了です。私の環境(WinAVR-20100110)だと以下のようなサイズになりました。

Program: 5018 bytes (30.6% Full)
(.text + .data + .bootloader)
Data: 172 bytes (33.6% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...

(6) Flipを使って、hexファイルを書き込みます。STK526-series2-cdc.hexはdemo\STK526-series2-cdcの下にできます(STK526-series2-cdc.apsと同じフォルダ)。Flipの使い方はストロベリーリナックスのチュートリアルに写真入りで解説されています(サンプルプログラムの書き込み)。

書き込みモードにするときは、リセットのジャンパをつける → ブートのジャンパをつける → リセットのジャンパをはずす → ブートのジャンパをはずす、という順番にします。

書き込みに成功して実行を開始すると、新しいデバイス(AT90USBxxx CDC USB to UART MGM)を認識してドライバをインストールします。ドライバはdemo\STK526-series2-cdcの下のat90usbxxx_cdc.infです。

(7) TeraTermで38400bpsに設定して通信した様子です(PB0とGNDをショートしたときのメッセージ)。


このデモ自体の機能は、以下の3つです。
- USB-UARTから受信した文字をUARTへエコーバックする。その際にPD5に接続されたLED3を反転する。
- ???なトリガーでPD5に接続されたLED2が反転する。cdc_task.cではusb_request_break_generationがTRUEのときに反転することになっています。
- STK526のジョイスティックを倒すと方向に応じたメッセージを出力する。実際は5個のボタンになっていて、上 PB5、下 PB7、左 PB4、右 PB6、push PB0に割りあたっています。STK526のHardware User Guideを見ると、このジョイスティックは押すとpull-downされるが、そうでないときはHi-Zであると書かれていて、AVRの内蔵pull-upを有効にしておく必要があるそうです。

STK526のLEDやジョイスティック関連の定義はstk_526.hの中でマクロとして定義されています。stk_526.h自体はlib_board\stk_526にあります。

ボタンに反応したりといったデモの機能自体はcdc_task.cの中のcdc_task()の中に定義されています。main()は初期化した後、scheduler()という関数を呼び出すだけです。conf_scheduler.hでschedulerが呼び出すタスクを定義していて、task2がcdc_taskということのようです。cdc関連のプログラムを開発するには、このデモを改造するのがよさそうな気がします。
一応、AVR USB Series2 software library templateというseries2-usb_software_library_template-2_0_0-doc.zipファイルもダウンロードできるようです。

試しにcdc_task()の中のUARTに出力しているところ
uart_putchar(uart_usb_getchar()); // loop back USB to USART
を、次のように書き換えてみると、USB-UARTにエコーバックするようになりました。
putchar(uart_usb_getchar()); // loop back USB to USART


というわけで、やってみたことは以上です。

schedule()は、taskを順に呼び出しているだけで、タイマー割り込みとかで時分割処理をしているわけではないので、cdc_task()の中ではあまり長い処理はしない方がよさそうです。結構、使い方は面倒そうな気もします。もっと手軽に使えればいいのにとか勝手なことを思いました。

Arduino 0019がリリースされています

2010-09-04 12:52:15 | AVR
Arduinoの新しいバージョン0019がリリースされています。

Arduino本家
ダウンロードページ
リリースノート

かなりいい加減ですが、リリースノートを訳してみました(原文)。

[コアとライブラリ]
- Ethernetライブラリの改定
- SPIライブラリの追加
- アナログ入力ピンの別名A0,A1,...の追加
- Stringクラスの追加
- shiftln()関数の追加
- Firmataの更新
- より正確なdelay()
- tone()が終了した後のPWMの再イネーブル
- Serial.peek()の追加
- シリアルにストリームベースクラスを追加
- digitalWrite()とpinMode()がピンに書き込んでいる最中の割り込みの禁止
- Arduino Mega上のアナログリファレンスをINTERNALからINTERNALV1とINTERNAL2V56に変更

[環境]
- Fioをボードメニューに追加
- Arduino ProとPro Mini(5V / 16MHz)をボードメニューに追加
- Processing 1.1コードベースに同期した
- avr-gcc / avr-g++の出力とエラーメッセージの解析を修正
- Toggling RTS on upload for auto-reset with FTDI cables on Linux.
- シリアルモニターのスクロールコントロールを追加
- シリアルモニターの行末を選択するためのドロップダウンを追加
- 名前は同じで拡張子が異なるタブの問題を修正
- サードパーティプラットフォームに、他のプラットフォームで定義されたリファレンスプログラマを許容する(?)

[サンプル]
- より簡単なアクセスと、より良い進行のために再構成と番号付けされた(?)

英語力のないのが悲しいです。

6ピンAVR

2009-11-25 20:43:00 | AVR
マイコミジャーナルの記事「Atmel、6ピン AVR MCUファミリを拡充」で、ATtiny4/5/9のことを知りました。

Atmelのニュースリリース

ATtiny4 ROM 512byte RAM 32byte
ATtiny5 ROM 512byte RAM 32byte A/Dあり
ATtiny9 ROM 1kbyte RAM 32byte
ATtiny10 ROM1kbyte RAM 32byte A/Dあり

動作電圧は1.8V-5.5Vで最大動作周波数は12MHzです。ピンのピッチは0.95mmで、全体は3mm角という小ささです。

「Gainer互換Pepperでフィジカル・コンピューティング」

2009-11-21 13:19:27 | AVR
CQ出版から「Gainer互換Pepperでフィジカル・コンピューティング」という本が出ます。
よくコメントをくださる、もあさんの本です。



マルツでpepperキット販売中
エレキジャックのフィジカル・コンピューティング

このところ、マイコン関連本の出版があいついでいますね。なんだか書籍紹介ブログになってきてます。

明日のMTM04にも出展されるそうです。時期があっていれば、著者サイン入り即売会ができてたかもしれません。

漢字シールド

2009-11-17 21:28:46 | AVR
Shop TechandからArduino Mega用の漢字シールド(+Arduino Mega)が販売されています。今なら発売記念特価で割引き購入できます。

説明書のページはこちらです。

エレキジャックホームページで連載されていた「Arduino Megaを使ったLEDマトリクスによる漢字ティッカの製作」の中の人みたいです。

若松でも販売されています。
Shop Techandの店長さんは、若松のArduinoセミナーの中の人みたいです。

エレキジャックの連載に載っていた基板は2.54mmピッチ専用みたいですが、売り物の方は2.00mmピッチもokになっています。

説明書のページでは、ピンヘッダをピンソケットに挿したまま、はんだづけしています。ピンヘッダをピンソケットに挿したまま、はんだづけすると、熱でゆるくなっちゃうという話を以前聞いたことがあります(あるような記憶があったかなあ)。そのあたりは大丈夫なんでしょうか。

Arduino Megaだけでも7000円くらいですし、ほとんど原価みたいな大出血価格だと思いました。

「マイコンと電子工作No.1 電脳Arduinoでちょっと未来を作る」

2009-11-13 03:31:20 | AVR
先日も書きましたが、エレキジャックNo.15に載っていた11/30に出るという「マイコンと電子工作No.1 電脳Arduinoでちょっと未来を作る」という増刊の表紙が(葵)の今日学んだことさんに出ていました。



と思ったら既にエレキジャックのホームページに「Arduinoを特集した増刊号の発行」という記事が出ていました。

11/21 追記 CQ出版に出ていました(リンク)。

マルツでpepperキット販売中

2009-10-11 09:42:36 | AVR
マルツでエレキジャックNo.14のサポート部品セットEJ14-PEPPEREJ14-2-1が発売になりました。

エレキジャックNo.14は基板が付録につかなくなって、抽選でプレゼントになりました。

写真はサポートページに載っていたプレゼント基板です。

マルツで販売されるサポート部品セットには、基板も含まれているので、プレゼント基板を持っていなくても困ることはありません。

エレジジャックNo.14「FunnelとPepperを使って省エネ・センサを作ろう」フォローアップ記事
もあさんのページ

ATMega329Pで生LCDを動かしてみました(2)

2009-10-07 23:42:30 | AVR
お約束の・・・、振ってみました。
ソースです。
#include <avr/io.h>
#include <util/delay.h>

int main()
{
    uint8_t c = 0;

    lcd_init();

    // COM0
    LCDDR02 = 0b10010010; // seg1-8
    LCDDR01 = 0b01001001; // seg9-16
    LCDDR00 = 0b00100100; // seg17-24

    while(1){
        if(c){
            // COM1
            LCDDR07 = 0b10010010; // seg1-8
            LCDDR06 = 0b01001001; // seg9-16
            LCDDR05 = 0b00100100; // seg17-24
        } else {
            // COM1
            LCDDR07 = 0b01001001; // seg1-8
            LCDDR06 = 0b00100100; // seg9-16
            LCDDR05 = 0b10010010; // seg17-24
        }
        c = !c;
        _delay_ms(250);
    }
}

配線を左右逆にした方が分かりやすかったです。LCDP81ではセグメント24が一番左でセグメント1が右です。
携帯動画だと汚いです。機材がないので勘弁してください。

ATMega329Pで生LCDを動かしてみました

2009-10-06 23:32:52 | AVR
ATMega329Pメモの続きになります。

ATMega329Pで生LCDの駆動をしてみました。

全桁点灯です。LCDはダイセンLCDP81です。このLCDパネルは1/3dutyなので、LCDのセグメントは3つのグループに分かれていて時分割でダイナミック点灯してやる必要があります。ATMega329Pは1/4duty、25セグメントまで対応しているので、問題なく使えます(LCDP81のセグメントは24本)。

コモン3本とセグメント24本の計27本をつないでいるので、線がもじゃもじゃです。


ストロベリーリナックスのジャンパーワイヤって、黒い部分が太いのでブレッドボードに並べて挿すことができません。そのせいで互い違いになるように挿しています。

LCDP81は千石の2Fで入手しました。以前、のりたんさんも使っておられました(記事)。1年以上も前に入手したものみたいです(記事)。ようやっと点けることができました。

ATMega329Pでの使い方です。ハードの方は1pinに0.47uFより大きいコンデンサをつけます。今回は1uFの電解コンデンサをつけています。後はLCDとの間を配線するだけです。ソフトの方は、4つある制御レジスタを使って初期化した後、LCDDRnというレジスタをビット操作することでセグメントの点灯/消灯を制御できます。

今回は電源電圧3V、内蔵の8MHzクロックで動作させています。

ソースです(<と>が全角になっています)。
#include <avr/io.h>

int main()
{
    // LCD初期設定

    // 安全のために関連ポートは全て0出力にしておく
    PORTA = 0x00; // COM0-3, SEG0-3
    DDRA = 0xff;
    PORTC = 0x00; // SEG5-12
    DDRC = 0xff;
    PORTD = 0x00; // SEG15-22
    DDRD = 0xff;
    PORTG = 0x00; // SEG23(PG4) SEG24(PG3) SEG4(PG2) SEG13(PG1) SEG14(PG0)
    DDRG = 0x1f;
    // LCDで未使用はPB、PE、PF

    // (1) LCDCRB
    // +--------- LCDCS クロック選択 0:システムクロック 1:外部クロック
    // |+-------- LCD2B バイアス選択 0:1/3バイアス 1:1/2バイアス
    // ||++------ LCDMUX1,0 1/3dutyのとき10
    // ||||++++-- LCDPM2-0 LCDポート遮蔽 24のとき0110
    // 00100110
    LCDCRB = 0b01100110;

    // (2) LCDFRR
    //  +++------ LCDPS2-0 N : プリスケール 111: clk/4096
    //  ||| +++-- LCDCD2-0 D : クロック分周選択 000:1分周 111:8分周
    // 01110101
    // f = clk / (K * N * D) = 8MHz / (6*4096*8) = 41Hz
    LCDFRR = 0b01110101;

    // (3) LCDCCR
    // 
    // +++------- LCDDC2-0 111:clkの半分駆動
    // |||+------ LCDMDT 1:最大駆動時間
    // ||||++++-- LCD濃淡制御 1000:3.00V 1110:3.3V
    // 11101000
    LCDCCR = 0b11101000;

    // (4) LCDCRA
    // +--------- LCDEN  1:LCD許可 0:禁止
    // |+-------- LCDAB  1:低電力波形 0:通常波形
    // || +------ LCDIF  割り込み要求フラグ
    // || |+----- LCDIE  1:割り込み許可 0:割り込み禁止
    // || ||+---- LCDBD  0:バッファあり 1:なし(省電力)
    // || |||+--- LCDCCD 0:内部給電 1:外部給電
    // || ||||+-- LCDBL  0:LCD表示  1:LCD無表示
    // 10000000
    LCDCRA = 0b10000000;

    // 全部点灯
    // COM0
    LCDDR00 = 0xff;
    LCDDR01 = 0xff;
    LCDDR02 = 0xff;

    // COM1
    LCDDR05 = 0xff;
    LCDDR06 = 0xff;
    LCDDR07 = 0xff;

    // COM2
    LCDDR10 = 0xff;
    LCDDR11 = 0xff;
    LCDDR12 = 0xff;

    // 無限ループ
    while(1) ;
}

数字を出すのは今後の課題です。

秋月にATMega328P

2009-10-05 22:48:38 | AVR
秋月でATMega328Pの販売が始まりました(商品番号 I-03142)。価格はなんと250円。これはたまげた(死語)。レール(14個)で買うと1個あたり230円です。

ん?そういえば、ATMega168が300円じゃなかったっけ(過去記事)。現在の値段を調べてみました(秋月のATMegaのページ)。

ATMega88P 250円 (数割りなし)
ATMega168P 230円 (数割り 14個以上で210円)
ATMega328P 250円 (数割り 14個以上で230円)

なんか、すごいことになってます。

秋月のLCDオシロスコープキット

2009-09-24 03:44:07 | AVR
秋月からLCDオシロスコープキットという新製品が出ています。表面実装部品を実装済みのもの(通販コード K-03144 5700円 メーカー型番 06202KP)と未実装(通販コード K-03143 4800円 メーカー型番 06201KP)の2種類があります。


製造元は中国のメーカーみたいです。製造元の製品ページには回路図なんかもあります。製造元の写真を見るとチップ部品がいっぱい使われています。

回路図を見るとATMega64を使っていることが分かりました(AtmelのATMega64のページ)。64pinのパッケージで20MHzが供給されています。古いATMega64だと16MHzまでなので新しいものなんでしょうね。もしかするとオーバークロックで動かしているのかもしれません。

ねんのため調べてみました。
ATMega644ATMega644PATMega644PA TQFP44 20MHz
ATMega64ATMega64AATMega645 TQFP64 16MHz
ATMega6450ATMega640 TQFP100 16MHz
ATMega64で20MHz動作して64pinの製品はないっぽいです(AtmelのAVRデバイスページ)。実際に何が載っているのか知りたいところです。
と、ここまで調べて、メーカーの写真を見たら普通にATMega64でした(こちらのページのAssemblied board - rearと書かれているリンク)。

ISP用のコネクタ(J4、10ピン)も出ているて、オリジナルのファームのhexファイルもあるので、普通のマイコンボードとして使うのもありそうです(未確認)。残念なことに表面部品未実装版でもATMega64は実装済みなのでATMega128に載せ変えるという遊びは難しそうです。

A/D変換はTIのTLC5510という20Mサンプル/秒が可能な専用ICを使っています。20MHz動作のAVRで5Mサンプル/秒と1サンプルあたり4クロックを実現できているのはこのICのおかげです。秋月だとAD9283とかでしょうか(通販コード I-01526)。

AVRとGLCDでオシロというとO-familyさんが作られたものを思い出します(製作記事1製作記事2)。

9/27 追記 さっそく、そら。さんが作られています(記事)。
RLCさんも作られています(記事)。

ATMega329Pメモ

2009-09-14 00:08:07 | AVR
メモです。

Lチカの様子


20MHz動作
2.7V-5.5V (20MHzは4.5V以上)
JTAGデバッグ可能
フラッシュ 32k、SRAM 2k、EEPROM 1k(ATMega328Pと同じ)
LCDドライバ(4common 25segまで)
100ピンバージョン ATMega3290P

Vcc 2箇所
AVcc 1箇所
GND 3箇所
パスコンは3個

ISP用のピン
PB1 - SCK
PB2 - MOSI
PB3 - MISO
※DIP版のATMega328PはSCK(PB5)、MISO(PB4)、MOSI(PB3)の並びで、順番が入れ替わっているのに注意。

ヒューズの初期値 62 99 ff

Atmelのページ
digikeyのページ
wS☆NakさんのWSN187(400円)
ダイセンの64QFP(300円、未確認)
aitendoのTQFP64pinピッチ変換基板(200円、在庫切れ、未確認)

LCDドライバって今まで使ったAVRにない機能なので使ってみたいです。

シールドいっぱい

2009-09-06 21:59:17 | AVR
garileo7さんでは、Arduino用の色々なシールドを扱っています。

NKC Ethernet Shield for Arduino MEGA / Duemilanove / Diecimila DIY KIT
純正のイーサネットシールドはMEGAで使用不可ですがこれは、MEGA / Duemilanove とどちらでも使えます!


Color LCD & Joystick shield for Arduino
カラーLCDとジョイスティックのついたArduionoシールドです。


TellyMate Shield
TV出力を可能にするArduinoシールドです。


というような感じで、輸入された色々なシールドを扱っておられます(他にもあります)。

他に、オリジナルシールド製品もあります。
8x8 LED MATRIX "Direct" Shield

LEDマトリックスは配線がいっぱいでたいへんなので、シールドになっていると簡単そうでいい感じです。
LEDマトリックスというと、なんでも作っちゃう、かも。さんのDirect8x8ライブラリです。ピン配置だけ合わせてあげれば、そのまま使えそうな雰囲気です(未確認注意)。

Music Shield

micro SDカードスロットとVS1053が搭載されていて、MP3やMIDIを再生できるそうです。
回路図も見れて、musicシールド側にATMega168がいます。Arduinoでなく、普通にMP3開発キットみたいな使い方も考えられなくはないですね。回路図では水晶は24MHzになっていますが、写真を見ると、ちゃんと24.576MHzになっています(12.288MHzの2倍)。
キットみたいですが、かなり密度が高いので、そこそこハンダ難易度は高そうな感じです。

がんばってるお店を見かけると、ついつい応援しちゃいたくなります。

エレキジャックNO.14にpepperの基板が

2009-08-26 23:02:23 | AVR
最新のエレキジャックNo.14は、ついに創刊号以来続いていた基板付録がなくなりました。そのかわり、部品セット販売に付属させたり、無料プレゼントをするみたいです。
まだ準備できていないみたいですが、こちらのページに無料プレゼントの案内が載るはずです。
基板の写真も見れるのですが、左下にはpepperの基板があります。