verus diary このページをアンテナに追加 RSSフィード

Effective ひとり生活++

2009-09-16

Arduinoが届いた.そしてSDカードアクセス.

f:id:verus:20090916173338j:image:w400

スイッチサイエンスさんのところから,Arduinoが届いたので,早速GPSモジュールをさしてみたけど,

なんかGPSを全然測位してくれなくて涙目なので,SDカードアクセスを試みる.

#サンプルスケッチ通り,ピンアサインも確認もしたけど,ずっと受信データが全てのパラメータ0のまま,時刻だけ表示されているオワタ

こんな感じorz


0 0 0 0 0 0

2009 9 16 13 18 36 0

0 0 0 0 0 0

2009 9 16 13 18 37 0

0 0 0 0 0 0

2009 9 16 13 18 38 0





とりあえずArduinoSDカードアクセスと言ったらこれ!と言われているような,SDCardライブラリをゲット!


SD card read/write with Arduino

"The library can be downloaded here:"って書いてあるところだお.


そしたら,解凍したフォルダを\hardware\librariesディレクトリに入れるー.


んでもって,サンプルスケッチ(ディレクトリ内のarduino sd card example.cpp)をコンパイルしようとしたらエラーが起こる.

#error "no sd/mmc pin mapping available!"とか言ってる.


どうやら,Arduino Duemilanove 328がなかったころのライブラリだったと結論.

識別子__AVR_ATmega328P__をSDカードに対するピンマップ宣言っぽいところに追加してあげればいいっぽい気がしたので,

ライブラリフォルダ内のsd_raw_config.hを編集してあげる.


#if defined(__AVR_ATmega8__) || \
    defined(__AVR_ATmega48__) || \
    defined(__AVR_ATmega88__) || \
    defined(__AVR_ATmega168__) || \
    defined(__AVR_ATmega328P__)
    #define configure_pin_mosi() DDRB |= (1 << DDB3)
    #define configure_pin_sck() DDRB |= (1 << DDB5)
    #define configure_pin_ss() DDRB |= (1 << DDB2)
    #define configure_pin_miso() DDRB &= ~(1 << DDB4)

    #define select_card() PORTB &= ~(1 << PORTB2)
    #define unselect_card() PORTB |= (1 << PORTB2)

こんな雰囲気になるように書きかあえてあげてね!

書き換えているのは__AVR_ATmega328P__を追加しているのと,PB2をPORTB2に書き換えているあたり.

ほかの識別に影響しそうだけど,Arduino Duemilanove 328しかもってないからいっかー.


この変更後,サンプルスケッチをコンパイルしたら通ったー,やったー!


んで,このGPSシールドはJ7の/SSだけ結線されてなかったような気がしたので,ジャンピンぐワイヤでJ3にある10ピンにつなげておいた.


そいで,アップロードして実行すると,シリアル経由でなんか出力された.

------------------------

Data sampling system

send r to read disk

send s to start sampling

send q to stop sampling

Ready.....

-------------------------

rev: 32

serial: 0xA275C196

date: 3

8

size: 2013265920

copy: 0

wr.pr.: 0/0

format: 0

free:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sampling..

444

347

351

357

357

353

350

351

357

357

355


どうやら無事動いているようだ,よかた.

FAT16だからSDカードは2GBまで対応しているらしく,しっかり2GBさしておいたら,認識してsizeがいい感じで2GBぐらいになってる.

#勘違い.このライブラリは低レベルなインターフェースだけ提供していて,ファイルシステムは提供してなかった.


GPSが動かないことにくじけ始めたので,書き込みとかはまたあとでやることにしよう.

はぁ.