文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== アナログデータロガー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}} ===== ソースコード ===== <code c AnalogDataLoggerSDC.c> //********************************************************************** /* 『アナログデータロガー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); } } } }//~! //********************************************************************** </code> ===== 動作確認 ===== {{: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}} <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖した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]] </callout> elechobby/picdic/otherpic/174.txt 最終更新: 2025/10/17 14:29by 127.0.0.1