====== アナログデータロガーV4(SDカード対応)(PIC18F2550) ======
===== 概要 =====
前回製作した、アナログデータロガーV3(SDカード対応)は、SDカード制御の実験の意味もあって、かなりハードウエアを簡略化しました。
今回は、次の点を考慮し製作しました。
* データロガーだけの機能なので、28ピンのPIC18F2550を使用する。
* A/D変換(4チャンネル分)で取り込んだデータを、LCDに表示させる。
* PICとLCDの電圧は5V、SDカードの電圧は3.3Vとする。
===== 動作原理 =====
SDカード用の電圧を得るために、手持ちのTL431(可変シャントレギュレータ)を使いました。
出力電圧は、次の式で求めることが出来ます。
3.3V≒(1+(1kΩ÷3kΩ))×2.495V
{{:imgpaste:202004:admin-20200430-184325.png}}
※3.3Vの3端子レギュレータがあればそれを使ってください。
PIC18F2550は、最高クロック48MHzで動作させることが出来るので、外付けに20MHzのセラミック発振子(セラロック)を使用した場合には、次の項目を設定します。
* PLL-DIV→÷5
* クロックモード→HS-PLL
* CPU-DIV→÷2
{{:imgpaste:202004:admin-20200430-184417.png?500}}
{{:imgpaste:202004:admin-20200430-184430.png?500}}
<処理の流れ>
- LCDを制御するための初期処理を行う。
- 記録開始スイッチが押されるのを待つ。
- 押されると、SDカードを制御するための初期処理を行う。
- A/D変換で4CH分全てを取り込む。
- 取り込んだデータを、LCDに表示する。
- 取り込んだデータを、文字列に変換する。(CSV形式)
- 文字列を、SDカードに書き込む。(ファイル名は、LOG.CSVとする)
- 記録停止スイッチが押されるまで4.~7.を繰り返す。
- 記録停止スイッチが押されると、SDカードに書き込んだ件数をLCDに表示する。
- 2.に戻る。
===== 回路図 =====
{{:imgpaste:202004:admin-20200430-184625.png}}
===== ソースコード =====
//**********************************************************************
/*
『アナログデータロガーV4(SDカード対応)』
■A/D変換の精度
・10ビット
■チャネル数
・4チャネル
■記録媒体
・SDカード
■記録形式
・CSV形式
■記録周期
・約0.1秒
*/
//**********************************************************************
#define LED PORTB.F7
#define SW_START PORTA.F4
#define SW_STOP PORTA.F5
#define ON 1
#define OFF 0
#define CR 0x0d
#define LF 0x0a
//**********************************************************************
void main()
{
//変数の定義
static char buf[50];
short cnt, channel, pnt;
unsigned ad;
long dataCnt;
//A/D変換の設定
ADCON1.PCFG3 = 1;
ADCON1.PCFG2 = 0;
ADCON1.PCFG1 = 1;
ADCON1.PCFG0 = 1;
//ポートの設定
TRISA = 0b11111111;
TRISB = 0b00000000;
TRISC = 0b00000000;
//LCDの初期化
Lcd_Custom_Config(&PORTB,5,4,3,2,&PORTC,0,1,6);
Lcd_Custom_Cmd(LCD_CURSOR_OFF);
Lcd_Custom_Cmd(LCD_CLEAR);
for (cnt = 1; cnt <= 16; cnt++) {
Lcd_Custom_Chr(1, cnt, 0xFF);
LED = ON;
Delay_ms(50);
LED = OFF;
Delay_ms(50);
}
for (cnt = 1; cnt <= 16; cnt++) {
Lcd_Custom_Chr(2, cnt, 0xFF);
LED = ON;
Delay_ms(50);
LED = OFF;
Delay_ms(50);
}
Lcd_Custom_Cmd(LCD_CLEAR);
//
while (1) {
//開始スイッチが押されるのをチェックする。
while (SW_START == 1) {
Delay_ms(10);
}
dataCnt = 0;
//MMCの初期化
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);
Mmc_Fat_Assign("log.csv", 0xA0);
Mmc_Fat_Rewrite();
Mmc_Fat_Write("$START\r\n", 8);
//停止スイッチが押されるまで処理を繰り返す。
while (SW_STOP == 1) {
pnt = 0;
//4チャンネル分のA/D変換を行い、LCDに表示する。
for (channel = 0; channel < 4; channel++) {
ad = Adc_Read(channel);
ad = (double)ad * 4.8828125;
WordToStr(ad, &buf[pnt]);
switch (channel) {
case 0:
Lcd_Custom_Out(1, 1, "1:");
Lcd_Custom_Out(1, 3, &buf[pnt + 1]);
break;
case 1:
Lcd_Custom_Out(1, 9, "2:");
Lcd_Custom_Out(1, 11, &buf[pnt + 1]);
break;
case 2:
Lcd_Custom_Out(2, 1, "3:");
Lcd_Custom_Out(2, 3, &buf[pnt + 1]);
break;
case 3:
Lcd_Custom_Out(2, 9, "4:");
Lcd_Custom_Out(2, 11, &buf[pnt + 1]);
break;
}
pnt += 6;
}
buf[5] = ',';
buf[11] = ',';
buf[17] = ',';
buf[23] = CR;
buf[24] = LF;
//4チャンネル分まとめてMMCに書き込む。
Mmc_Fat_Write(buf, 25);
//
LED = ON;
Delay_ms(100);
LED = OFF;
//
dataCnt++;
}
Mmc_Fat_Write("$STOP\r\n", 7);
//書き込んだ件数をLCDに表示する。
LongToStr(dataCnt, buf);
Lcd_Custom_Cmd(LCD_CLEAR);
Lcd_Custom_Out(1, 1, buf);
//
for (cnt = 0; cnt < 10; cnt++) {
LED = ON;
Delay_ms(50);
LED = OFF;
Delay_ms(50);
}
}
}
}//~!
//**********************************************************************
===== 動作確認 =====
{{:imgpaste:202004:admin-20200430-184726.png?500}}
左側:開始(黄色)スイッチ、停止(緑色)スイッチ、LED、PIC18F2550、TL431
右側:PIC18F2550、SDカード、LCD
{{:imgpaste:202004:admin-20200430-184750.png}}{{:imgpaste:202004:admin-20200430-184758.png}}
SDカードスロットと512MBのSDカードです。
{{:imgpaste:202004:admin-20200430-184816.png}}{{:imgpaste:202004:admin-20200430-184820.png}}
左側:開始スイッチを押すと、4チャンネル分のアナログデータを周期的に記録します。
右側:停止スイッチを押すと、記録を停止し、SDカードに記録した件数を表示します。
{{:imgpaste:202004:admin-20200430-184826.png}}{{:imgpaste:202004:admin-20200430-184829.png}}
SDカードに保存したデータ(LOG.CSV)を、メモ帳(notepad)で開いてみました。
左側から、CH1、CH2、CH3、CH4です。単位はmVです。
{{:imgpaste:202004:admin-20200430-184836.png}}
Excelでデータをグラフ表示させてみました。
{{:imgpaste:202004:admin-20200430-184844.png?500}}
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]