文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 10チャンネルデータロガー(PIC18F2320) ====== ===== 概要 ===== 初めてPIC18シリーズを使用しました。PIC18F2320を使用して、単純にAD変換したデータをRS232C経由でPCに送るだけのものを作成しました。 尚、計測モードは次の2種類としました。 * 1秒間に1回、AD変換(10チャンネル分)してPCにデータを送る。 * 1秒間に15回、AD変換(10チャンネル分)してPCにデータを送る。 AD変換の精度は10ビットです。なので最小単位は約5mvとなります。 精度を高めるには、電源電圧VCCを1023*5mv=5115mvと安定化する必要があります。 ===== 回路図 ===== {{:imgpaste:202004:admin-20200430-170942.png}} ===== ソースコード ===== <code c DataLogger_10channel.c> //********************************************************************** /* 「10チャンネルデータロガー」 ・10チャンネルのアナログデータをA/D変換し、RS232Cで送信し ます。 (秒間約5回のサンプリング) */ //********************************************************************** #define LED PORTC.F4 #define SW PORTB.F7 //********************************************************************** static unsigned short startCount; //********************************************************************** void interrupt(){ if (PIR1.TMR1IF == 1) { PIR1.TMR1IF = 0; // LED = ~LED; // if (startCount > 0) startCount--; } } //********************************************************************** void Usart_Write_String(char *buf) { static int len, i; len = strlen(buf); for (i = 0; i < len; i++) { Usart_Write(buf[i]); } } //********************************************************************** void main() { static unsigned int ad0, ad1, ad2, ad3, ad4, ad8, ad9, ad10, ad11, ad12, cnt; static unsigned char buf[10]; // OSCCON.IRCF2=1; OSCCON.IRCF1=1; OSCCON.IRCF0=1; // TRISA = 0b11111111; TRISB = 0b11111111; TRISC = 0b00000000; // // TIMER1の設定 PIE1.TMR1IE = 1; PIR1.TMR1IF = 0; TMR1L = 0; TMR1H = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 1; // startCount = 4; cnt = 0; // Usart_Init(9600); Delay_ms(100); Usart_Write_String("DataLogger(10channel)\r\n"); // 割り込み(全体)の設定 INTCON.PEIE = 1; INTCON.GIE = 1; // while(1) { if ((SW == 1) && (startCount != 0)) continue; // cnt++; WordToStr(cnt, buf); Usart_Write_String(buf); Usart_Write_String(": "); ad0 = Adc_Read(0); ad1 = Adc_Read(1); ad2 = Adc_Read(2); ad3 = Adc_Read(3); ad4 = Adc_Read(4); ad8 = Adc_Read(8); ad9 = Adc_Read(9); ad10 = Adc_Read(10); ad11 = Adc_Read(11); ad12 = Adc_Read(12); WordToStr(ad0 * 5, buf); Usart_Write_String(buf); WordToStr(ad1 * 5, buf); Usart_Write_String(buf); WordToStr(ad2 * 5, buf); Usart_Write_String(buf); WordToStr(ad3 * 5, buf); Usart_Write_String(buf); WordToStr(ad4 * 5, buf); Usart_Write_String(buf); WordToStr(ad8 * 5, buf); Usart_Write_String(buf); WordToStr(ad9 * 5, buf); Usart_Write_String(buf); WordToStr(ad10 * 5, buf); Usart_Write_String(buf); WordToStr(ad11 * 5, buf); Usart_Write_String(buf); WordToStr(ad12 * 5, buf); Usart_Write_String(buf); Usart_Write_String("\r\n"); startCount = 4; } } //********************************************************************** </code> ===== 動作確認 ===== 今回は部品点数がとても少ないのでブレッドボードに組んで確認しました。 PCとの接続には以前に作成したRS232Cレベル変換ユニットを使用しています。 {{:imgpaste:202004:admin-20200430-171112.png}}{{:imgpaste:202004:admin-20200430-171117.png}} {{:imgpaste:202004:admin-20200430-171123.png}}{{:imgpaste:202004:admin-20200430-171127.png}} Windowsに標準で付いているターミナルソフト(ハイパーターミナル)を使用してデータを表示します。 一番左のデータは、単なるカウント値です。その右からCH1~CH10の順番です。 {{:imgpaste:202004:admin-20200430-171132.png?500}} 取り込んだデータをExcelを使用してグラフ表示させてみました。 入力端子をオープン状態にして計測しましたのでノイズ(商用の60Hz)が乗っています。 入力端子を100kΩ位の抵抗でプルダウンすると良いと思います。 {{:imgpaste:202004:admin-20200430-171142.png}} <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/159.txt 最終更新: 2025/10/17 14:29by 127.0.0.1