softdev:tempmeter2
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| softdev:tempmeter2 [2013/01/08 23:00] – [ソース] king | softdev:tempmeter2 [2013/07/15 20:25] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 47: | 行 47: | ||
| ででで、ソース | ででで、ソース | ||
| ===== ソース ===== | ===== ソース ===== | ||
| - | 題して、バイクメータ、そのままやんけ。 | + | 題して、バイクメータ、そのままやんけ。\\ |
| + | 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 = | ||
| + | |||
| + | mode=0; | ||
| + | |||
| + | led1 = 1; | ||
| + | LED_pwr = led1; | ||
| + | LED_paper = led1; | ||
| + | |||
| + | |||
| + | rtc_portinit(); | ||
| + | lcd_init(); | ||
| + | |||
| + | if(rtc_get_stat() | ||
| + | rtc_init_mode_in(); | ||
| + | rtc_init(); | ||
| + | } | ||
| </ | </ | ||
| + | |||
| + | LCD関係 | ||
| <code c> | <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> | <code c> | ||
| - | </ | + | while(1){ |
| - | <code c> | + | ADCON0 = ADON_AN1; |
| - | </code> | + | GO_DONE=1; |
| + | while(GO_DONE); | ||
| + | an1data = (ADRESH<<8) | ADRESL ; // Temperatrure | ||
| + | |||
| + | 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.1357653641.txt.gz · 最終更新: (外部編集)
