アナログデータロガー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ライブラリ)を利用する。

<処理の流れ>

  1. SDカードを制御するための初期処理を行う。
  2. 記録開始スイッチが押されるのを待つ。
  3. 押されると、8CH全てをA/D変換で取り込む。
  4. 取り込んだデータを、文字列に変換する。(CSV形式)
  5. 文字列を、SDカードに書き込む。(ファイル名は、LOG.CSVとする)
  6. 記録停止スイッチが押されるまで?3.4.5.を繰り返す。
  7. 記録停止スイッチが押されると、2.に戻る。

本来であれば、+5V(VCC)、+3.3V(VCC3)の電源を用意し、次のような回路にするのが望ましいです。

※このプログラムは、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は、未接続の状態です。

SDカードに保存したデータ(LOG.CSV)を、Excelで開いてみました。

Excelでデータをグラフ表示させてみました。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/otherpic/173.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1