アナログデータロガーV3(SDカード対応)(PIC18F452)
概要
今迄に各種のアナログデータロガーを製作しました。
◎アナログデータロガー
◎10チャンネルデータロガー
◎8チャンネルデータロガー(MCP3208)
◎アナログデータロガーV2(携帯型)
これらのロガーは、全てRS232C経由でパソコンにデータを転送する方式なので、次のような問題がありました。
- 操作が煩わしい
- RS232Cケーブルでパソコンに接続する。
- 通信ソフト(ハイパーターミナル等)を立ち上げる。
- 受信データのキャプチャ(保存)設定をする。
- データを受信しファイルに保存する。
- 最近のパソコンは、「RS232Cポート」が付いていないケース( オプション)が多いので、新たに、
USB/シリアル変換ケーブルを購入する必要がある。
そこで、もう少し手軽に出来る方法を考えてみました。
SanDisk製のマイクロSDカード(1Gバイト)が、変換アダプタ付で600円で秋月電子で販売していましたので、これを使ってみることにしました。(8MBのSDカードであれば100円です)
動作原理
今回は、極力単純な方法(多分、これ以上単純には出来ないのではと思います)としました。
- SDカードの電圧が、3.3Vなので、PICと直結するために、PICの電圧も3.3Vとする。
※これは推奨される使い方ではありません。実際に製作する場合には、次のことに留意してください。- PICの電圧を本来の5Vにする。
- PICからSDカードへの出力は、抵抗(2kΩと3kΩ)で分圧する。
- SDカードの制御シーケンスは複雑なので、mikroCが提供している、関数(MMCライブラリ)を利用する。
<処理の流れ>
- SDカードを制御するための初期処理を行う。
- 記録開始スイッチが押されるのを待つ。
- 押されると、8CH全てをA/D変換で取り込む。
- 取り込んだデータを、文字列に変換する。(CSV形式)
- 文字列を、SDカードに書き込む。(ファイル名は、LOG.CSVとする)
- 記録停止スイッチが押されるまで?3.4.5.を繰り返す。
- 記録停止スイッチが押されると、2.に戻る。
回路図
ソースコード
※このプログラムは、mikroCの試用版の制限を越えるため正式版でなければコンパイルできません。
- AnalogLoggerSDC.c
//********************************************************************** /* 『アナログデータロガー(SDカード対応)』 ■A/D変換の精度 ・10ビット ■チャネル数 ・8チャネル ■記録媒体 ・SDカード ■記録形式 ・CSV形式 ■記録周期 ・約0.1秒 */ //********************************************************************** #define LED PORTB.F7 #define SW_START PORTB.F6 #define SW_STOP PORTB.F5 #define ON 1 #define OFF 0 #define CR 0x0d #define LF 0x0a //********************************************************************** void main() { static char buf[50]; short cnt, channel, len, pnt; unsigned ad; // ADCON1 = 0x10000000; TRISA = 0b11111111; TRISB = 0b01100000; // for (cnt = 0; cnt < 10; cnt++) { LED = ON; Delay_ms(50); LED = OFF; Delay_ms(50); } // Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); if (!Mmc_Fat_Init(&PORTC, 2)) { Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); while (1) { while (SW_START == 1) { Delay_ms(10); } Mmc_Fat_Assign("log.csv", 0xA0); Mmc_Fat_Rewrite(); Mmc_Fat_Write("$START\r\n", 8); while (SW_STOP == 1) { pnt = 0; for (channel = 0; channel < 8; channel++) { ad = Adc_Read(channel); ad = (double)ad * 3.22265625; WordToStr(ad, &buf[pnt]); pnt += 6; } buf[5] = ','; buf[11] = ','; buf[17] = ','; buf[23] = ','; buf[29] = ','; buf[35] = ','; buf[41] = ','; buf[47] = CR; buf[48] = LF; Mmc_Fat_Write(buf, 49); // LED = ON; Delay_ms(100); LED = OFF; } Mmc_Fat_Write("$STOP\r\n", 7); // for (cnt = 0; cnt < 10; cnt++) { LED = ON; Delay_ms(50); LED = OFF; Delay_ms(50); } } } }//~! //**********************************************************************
動作確認
左上:マイクロSDカード本体です。
右上:変換アダプタです。
左下:変換アダプタにマイクロSDカード本体を挿入しました。
右下:変換アダプタ+マイクロSDカード本体をSDカードスロットに挿入しました。



左側から、記録開始スイッチ(黄色)、記録停止スイッチ(緑色)、LED、PIC18F452、SDカードです。
SDカードに保存したデータ(LOG.CSV)を、メモ帳(notepad)で開いてみました。
左側から、CH1、CH2、CH3、CH4、CH5、CH6、CH7、CH8です。単位はmVです。
CH1は、Vccに接続しました。
CH2は、Gndに接続しました。
CH3~CH8は、未接続の状態です。



