softdev:tempmeter2
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
softdev:tempmeter2 [2012/03/07 23:56] – [回路図] king | softdev:tempmeter2 [2013/07/15 20:25] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 38: | 行 38: | ||
{{: | {{: | ||
+ | * RTC初期化時に設定する必要があるので、SWは二つ。 | ||
+ | * RTCは3Wire | ||
+ | * CN1はPICkit3接続ポート | ||
+ | * バイクバッテリ(12V)から5Vをドロッパで作り動作させる。 | ||
+ | PICkit3では、PGC, | ||
+ | ででで、ソース | ||
+ | ===== ソース ===== | ||
+ | 題して、バイクメータ、そのままやんけ。\\ | ||
+ | main初期化部 | ||
+ | <code c#> | ||
+ | / | ||
+ | // for PIC18F1320 | ||
+ | // | ||
+ | // | ||
+ | ******************************************************/ | ||
+ | #include < | ||
+ | #include < | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | // VCFG1, | ||
+ | // CHS2,1,0 AN0=000, | ||
+ | #define ADON_AN1 0b00000101 | ||
+ | #define ADON_AN2 0b00001001 | ||
+ | #define LED_pwr PORTAbits.RA0 | ||
+ | #define LED_paper PORTAbits.RA4 | ||
+ | #define SW_feed PORTAbits.RA7 | ||
+ | #define SW_menu PORTAbits.RA6 | ||
+ | |||
+ | void send_dec3(char, | ||
+ | void rtc_init(void); | ||
+ | void rtc_init_mode_in(void); | ||
+ | void get_minmax(int, | ||
+ | |||
+ | // | ||
+ | char rtc_today[7]; | ||
+ | int temp_max, | ||
+ | char start_time[7]; | ||
+ | // | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | /* | ||
+ | // | ||
+ | __EEPROM_DATA(" | ||
+ | __EEPROM_DATA(" | ||
+ | __EEPROM_DATA(" | ||
+ | __EEPROM_DATA(" | ||
+ | __EEPROM_DATA(" | ||
+ | */ | ||
+ | char a; | ||
+ | char led1, | ||
+ | int an1data, | ||
+ | // | ||
+ | unsigned int past_time, | ||
+ | long tmp10_long; | ||
+ | // | ||
+ | char mm, | ||
+ | char mode; | ||
+ | |||
+ | OSCCON = 0b01111111; | ||
+ | |||
+ | EECON1 = 0b00010001; | ||
+ | |||
+ | ADCON0 = ADON_AN1; | ||
+ | ADCON1 = 0xFD; // AN1 only use | ||
+ | ADCON2 = 0b10100101; | ||
+ | |||
+ | PORTA = 0;// IO 初期化 | ||
+ | PORTB = 0; | ||
+ | TRISA = 0xEE; // 0=Out RA0,RA4 | ||
+ | TRISB = 0b10100000; | ||
+ | |||
+ | temp_max = -1000; | ||
+ | temp_min = 1000; | ||
+ | volt_max = 0; | ||
+ | volt_min = 300; | ||
+ | |||
+ | mode=0; | ||
+ | |||
+ | led1 = 1; | ||
+ | LED_pwr = led1; | ||
+ | LED_paper = led1; | ||
+ | |||
+ | |||
+ | rtc_portinit(); | ||
+ | lcd_init(); | ||
+ | |||
+ | if(rtc_get_stat() > 0 ){ | ||
+ | rtc_init_mode_in(); | ||
+ | rtc_init(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | LCD関係 | ||
+ | <code c> | ||
+ | void shiftreg_lat() | ||
+ | { | ||
+ | SOLAT = 1; /* latch is rise edge */ | ||
+ | DelayUs(1); | ||
+ | SOLAT = 0; | ||
+ | } | ||
+ | |||
+ | |||
+ | void send_data(char data) | ||
+ | { | ||
+ | signed char c; | ||
+ | /* send MSB first */ | ||
+ | for(c=7; | ||
+ | SODAT = data>> | ||
+ | DelayUs(1); | ||
+ | SOCLK = 1; | ||
+ | DelayUs(1); | ||
+ | SOCLK = 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void send_to_lcd(char data,char rs) | ||
+ | { | ||
+ | char ctrl_data; | ||
+ | /* data MSB 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 LSB*/ | ||
+ | /* 0 0 0 BkON BkHi 0 RS E Data---- | ||
+ | |||
+ | ctrl_data = 0x01 | BKL_AKARUI | rs ; /* E=1, | ||
+ | send_data( ctrl_data ); | ||
+ | send_data( data ); | ||
+ | shiftreg_lat(); | ||
+ | |||
+ | ctrl_data = ctrl_data & 0b11111110 ; /* E=0 */ | ||
+ | send_data( ctrl_data ); | ||
+ | send_data( data ); | ||
+ | shiftreg_lat(); | ||
+ | } | ||
+ | |||
+ | void lcd_locate(char location) | ||
+ | { | ||
+ | /* location 00h=Row1/ | ||
+ | location |= 0x80; /* rise bit7=1 */ | ||
+ | send_to_lcd( location , RS0); /*set DDRAM addr to 40h */ | ||
+ | } | ||
+ | |||
+ | /* write a string of chars to the LCD */ | ||
+ | void lcd_puts(const char * s) | ||
+ | { | ||
+ | while(*s) | ||
+ | send_to_lcd( *s++ , RS1 ); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ADCのところ | ||
+ | <code c> | ||
+ | while(1){ | ||
+ | ADCON0 = ADON_AN1; | ||
+ | GO_DONE=1; | ||
+ | while(GO_DONE); | ||
+ | an1data = (ADRESH<< | ||
+ | |||
+ | DelayMs(10); | ||
+ | |||
+ | ADCON0 = ADON_AN2; | ||
+ | GO_DONE=1; | ||
+ | while(GO_DONE); | ||
+ | an2data = (ADRESH<< | ||
+ | an2data = an2data * 5 * 10 / 256; | ||
+ | |||
+ | tmp10_long = (long)an1data * 500 - 245760; | ||
+ | tmp10_long = tmp10_long / 410; | ||
+ | tmp10 = (int)tmp10_long; | ||
+ | |||
+ | </ | ||
+ | メモリが足りてるので、温度はlongで計算。 | ||
softdev/tempmeter2.1331132190.txt.gz · 最終更新: 2013/07/15 20:28 (外部編集)