--- trunk/Embedded/main.lst 2007/12/04 19:07:00 150 +++ trunk/Embedded/main.lst 2007/12/05 07:30:04 151 @@ -24,363 +24,372 @@ 24: unsigned int global_emergency_counter = 600, global_time_interval = 3600; 25: unsigned char global_temp = 0; 26: - 27: unsigned short global_imei_tversum; + 27: unsigned char global_lcd_buf[16]; 28: - 29: unsigned char cell_nr[15] = ""; // = "21681784"; - 30: bit global_modem_init = 0; - 31: - 32: __EEPROM_DATA( 60, 0, 1, 8, '2', '1', '6', '8'); - 33: __EEPROM_DATA( '1', '7', '8', '4',0,0,0,0); - 34: - 35: void serial_recieved(void); - 36: void serial_send(void); - 37: void update_lcd(void); - 38: void convertTemp(void); - 39: void timer1_interrupt(void); - 40: void on_recieve(void); - 41: void on_initial_recieve(void); - 42: - 43: - 44: void reset_recieve_buffer(void) - 45: { - 46: global_recieve_done = 0; - 47: global_serial_byte_counter=0; - 48: } - 49: - 50: - 51: void ad_init(void) // Nicked from H7 - 52: { - 53: // AD Conversion clock - 54: ADCS0 = 0; - 55: ADCS1 = 0; - 56: ADCS2 = 0; - 57: - 58: //Select AN0/RA0 for AD source - 59: // In this (000) setup, it's only RA0/AN0 that does ad convertion. - 60: CHS0=0; - 61: CHS1=0; - 62: CHS2=0; - 63: - 64: //Only AN0 is selected for AD and with Vdd/Vss as limits - 65: PCFG0=0; - 66: PCFG1=1; - 67: PCFG2=1; - 68: PCFG3=1; - 69: - 70: //Result is right justified - 71: ADFM=1; - 72: - 73: //Fire up for A/D converter module - 74: ADON=1; - 75: } - 76: - 77: void rs232_init(void) - 78: { - 79: SPEN = 0; // Serial Port Enable Bit... 0 = disabled - 80: TRISC6 = 0; - 81: TRISC7 = 1; - 82: - 83: SPBRG = 207; // 1200 baud rate... 25 = 9600 - 84: // x = (Fosc / (16*[baud rate]) )-1 - 85: TXSTA = 0x24; // Enables BRGH and TXEN inthe TXSTA register - 86: RCSTA = 0x90; // 0x90 enables SPEN and CREN in the RCSTA register - 87: } - 88: - 89: void interrupt_init(void) - 90: { - 91: // Assumes that all interrupts default is 0 - 92: PEIE = 1; - 93: GIE = 1; - 94: RCIE = 1; // Recieve interrupt enable. - 95: IPEN = 0; // Nfo interrupt priority - 96: TXIE = 0; // Serial interrupt enabled - 97: TMR1IE = 1; // Enables timer 1 - 98: } - 99: - 100: void timer_init(void) - 101: { - 102: TMR1CS = 1; //use external clock - 103: - 104: T1CKPS1 = 1; //1:8 prescale - 105: T1CKPS0 = 1; - 106: - 107: TMR1H = 0xEF; - 108: TMR1L = 0xFF; - 109: - 110: T1OSCEN = 1; //enable oscillator circuit - 111: RD16 = 0; //normal 8 bit writes - 112: TMR1ON = 1; - 113: } - 114: - 115: void pic18_io_init(void) - 116: { - 117: TRISA0 = 1; // analog input - 118: TRISA1 = 0; // Output - 119: TRISB1 = 1; // TRISB1-4 Digital input - 120: TRISB2 = 1; - 121: TRISB3 = 1; - 122: TRISB4 = 1; - 123: } - 124: - 125: void sms_init(void) - 126: { - 127: int i; - 128: - 129: reset_recieve_buffer(); - 130: sprintf(global_serial_send,"at+cgsn\r"); - 131: serial_send(); - 132: DelaySek(1); - 133: while(!global_recieve_done) ; - 134: - 135: - 136: sprintf(global_serial_send,"%s", "at+cpin=8043\r"); - 137: serial_send(); - 138: - 139: while(global_modem_init == 0) - 140: { - 141: on_initial_recieve(); - 142: } - 143: } - 144: - 145: - 146: void interrupt interrupt_handler(void) - 147: { - 148: // Finds out what interrupt have been trigged, and starts the respective function. - 149: if(RCIF == 1) // Serial recieve interrupt - 150: { - 151: serial_recieved(); - 152: RCIF = 0; - 153: } - 154: - 155: if(TMR1IF == 1) // timer1 interrupt trigger. - 156: { - 157: timer1_interrupt(); - 158: TMR1IF = 0; - 159: } - 160: } - 161: - 162: - 163: void serial_send(void) - 164: { - 165: int i; - 166: char data_byte; - 167: for(i = 0; i < BUFFER; i++) - 168: { - 169: data_byte = global_serial_send[i]; - 170: if( data_byte == '\r') - 171: i = (BUFFER - 1); - 172: TXREG = data_byte; - 173: while(TRMT==0) ; - 174: DelayMs(10); - 175: } - 176: DelayMs(250); - 177: DelayMs(250); - 178: } - 179: - 180: void serial_recieved(void) - 181: { - 182: char data_byte, saved_data[LCD_LENGTH]; - 183: - 184: data_byte = RCREG; + 29: unsigned short global_imei_tversum; + 30: + 31: unsigned char cell_nr[15] = ""; // = "21681784"; + 32: bit global_modem_init = 0; + 33: + 34: __EEPROM_DATA( 60, 0, 1, 8, '2', '1', '6', '8'); + 35: __EEPROM_DATA( '1', '7', '8', '4',0,0,0,0); + 36: + 37: void serial_recieved(void); + 38: void serial_send(void); + 39: void update_lcd(void); + 40: void convertTemp(void); + 41: void timer1_interrupt(void); + 42: void on_recieve(void); + 43: void on_initial_recieve(void); + 44: + 45: + 46: void reset_recieve_buffer(void) + 47: { + 48: global_recieve_done = 0; + 49: global_serial_byte_counter=0; + 50: } + 51: + 52: + 53: void ad_init(void) // Nicked from H7 + 54: { + 55: // AD Conversion clock + 56: ADCS0 = 0; + 57: ADCS1 = 0; + 58: ADCS2 = 0; + 59: + 60: //Select AN0/RA0 for AD source + 61: // In this (000) setup, it's only RA0/AN0 that does ad convertion. + 62: CHS0=0; + 63: CHS1=0; + 64: CHS2=0; + 65: + 66: //Only AN0 is selected for AD and with Vdd/Vss as limits + 67: PCFG0=0; + 68: PCFG1=1; + 69: PCFG2=1; + 70: PCFG3=1; + 71: + 72: //Result is right justified + 73: ADFM=1; + 74: + 75: //Fire up for A/D converter module + 76: ADON=1; + 77: } + 78: + 79: void rs232_init(void) + 80: { + 81: SPEN = 0; // Serial Port Enable Bit... 0 = disabled + 82: TRISC6 = 0; + 83: TRISC7 = 1; + 84: + 85: SPBRG = 207; // 1200 baud rate... 25 = 9600 + 86: // x = (Fosc / (16*[baud rate]) )-1 + 87: TXSTA = 0x24; // Enables BRGH and TXEN inthe TXSTA register + 88: RCSTA = 0x90; // 0x90 enables SPEN and CREN in the RCSTA register + 89: } + 90: + 91: void interrupt_init(void) + 92: { + 93: // Assumes that all interrupts default is 0 + 94: PEIE = 1; + 95: GIE = 1; + 96: RCIE = 1; // Recieve interrupt enable. + 97: IPEN = 0; // Nfo interrupt priority + 98: TXIE = 0; // Serial interrupt enabled + 99: TMR1IE = 1; // Enables timer 1 + 100: } + 101: + 102: void timer_init(void) + 103: { + 104: TMR1CS = 1; //use external clock + 105: + 106: T1CKPS1 = 1; //1:8 prescale + 107: T1CKPS0 = 1; + 108: + 109: TMR1H = 0xEF; + 110: TMR1L = 0xFF; + 111: + 112: T1OSCEN = 1; //enable oscillator circuit + 113: RD16 = 0; //normal 8 bit writes + 114: TMR1ON = 1; + 115: } + 116: + 117: void pic18_io_init(void) + 118: { + 119: TRISA0 = 1; // analog input + 120: TRISA1 = 0; // Output + 121: TRISB1 = 1; // TRISB1-4 Digital input + 122: TRISB2 = 1; + 123: TRISB3 = 1; + 124: TRISB4 = 1; + 125: } + 126: + 127: void sms_init(void) + 128: { + 129: int i; + 130: + 131: reset_recieve_buffer(); + 132: sprintf(global_serial_send,"at+cgsn\r"); + 133: serial_send(); + 134: DelaySek(1); + 135: while(!global_recieve_done) ; + 136: + 137: + 138: sprintf(global_serial_send,"%s", "at+cpin=8043\r"); + 139: serial_send(); + 140: + 141: while(global_modem_init == 0) + 142: { + 143: on_initial_recieve(); + 144: } + 145: } + 146: + 147: + 148: void interrupt interrupt_handler(void) + 149: { + 150: // Finds out what interrupt have been trigged, and starts the respective function. + 151: if(RCIF == 1) // Serial recieve interrupt + 152: { + 153: serial_recieved(); + 154: RCIF = 0; + 155: } + 156: + 157: if(TMR1IF == 1) // timer1 interrupt trigger. + 158: { + 159: timer1_interrupt(); + 160: TMR1IF = 0; + 161: } + 162: } + 163: + 164: + 165: void serial_send(void) + 166: { + 167: int i; + 168: char data_byte; + 169: for(i = 0; i < BUFFER; i++) + 170: { + 171: data_byte = global_serial_send[i]; + 172: if( data_byte == '\r') + 173: i = (BUFFER - 1); + 174: TXREG = data_byte; + 175: while(TRMT==0) ; + 176: DelayMs(10); + 177: } + 178: DelayMs(250); + 179: DelayMs(250); + 180: } + 181: + 182: void serial_recieved(void) + 183: { + 184: char data_byte, saved_data[LCD_LENGTH]; 185: - 186: if (data_byte == '\n') - 187: return; - 188: - 189: global_serial_recieve_buffer[global_serial_byte_counter] = data_byte; + 186: data_byte = RCREG; + 187: + 188: if (data_byte == '\n') + 189: return; 190: - 191: if (data_byte == '\r') - 192: { - 193: global_recieve_done = 1; - 194: //global_serial_byte_counter = 0; - 195: global_serial_recieve_buffer[global_serial_byte_counter+1] = 0; //zero terminate - 196: } - 197: else - 198: { - 199: global_serial_byte_counter++; - 200: } - 201: - 202: } - 203: - 204: void timer1_interrupt(void) - 205: { - 206: TMR1H = 0xEF; - 207: TMR1L = 0xFF; - 208: global_time_counter++; - 209: global_emergency_counter++; - 210: RA1 = !RA1; - 211: } - 212: - 213: void update_lcd(void) - 214: { - 215: lcd_clear(); - 216: lcd_goto(0x00); - 217: lcd_puts(global_temp); - 218: - 219: } - 220: - 221: void send_update(void) - 222: { - 223: sprintf(global_serial_send, "at+cmgs=\"%s\"\r", cell_nr); - 224: serial_send(); - 225: sprintf(global_serial_send, "%d:%d:%d:%d:%d:%d%c", global_sms_counter, global_temp, FIREDET, EMPTYTANK, FEEDING, PWRFAIL, 0x1A); - 226: lcd_goto(40); - 227: lcd_puts(global_serial_send); - 228: serial_send(); - 229: DelayMs(250); - 230: global_sms_counter++; - 231: } - 232: - 233: void convertTemp() - 234: { - 235: short adVal; - 236: adVal = (global_Pot_Hi << 8) | global_Pot_Lo; - 237: if( adVal >=840 ) - 238: global_temp = 100; - 239: else - 240: global_temp = (adVal / 8.3886); - 241: } - 242: - 243: - 244: - 245: void eeprom_writer(void) - 246: { - 247: char len,i; - 248: - 249: len = strlen(cell_nr); - 250: eeprom_write(0, (global_time_interval/60)); - 251: eeprom_write(1, global_sms_counter>>8); - 252: eeprom_write(2, global_sms_counter); - 253: eeprom_write(3, len); - 254: - 255: for (i=0; i= 90 || PWRFAIL == 1 || FIREDET == 0 || FEEDING == 1 || EMPTYTANK == 1) && global_emergency_counter >= 600 ) - 349: { - 350: send_update(); - 351: global_emergency_counter = 0; - 352: } - 353: // Every X sec. a status sms is send. - 354: if(global_time_counter >= 3600) - 355: { - 356: send_update(); - 357: global_time_counter = 0; - 358: } - 359: // To avoid buffer overrun. - 360: if( global_emergency_counter > 7200 ) - 361: global_emergency_counter = 600; - 362: - 363: // Checks if there has been recieved a config sms. - 364: if(global_interval_changed ) - 365: { - 366: eeprom_writer(); - 367: global_interval_changed = 0; - 368: } - 369: // Checking if A/D convertion is done, and save the data in global_Pot_?? - 370: if(GODONE==0) - 371: { - 372: global_Pot_Hi = ADRESH; - 373: global_Pot_Lo = ADRESL; - 374: convertTemp(); - 375: update_lcd(); - 376: GODONE = 1; - 377: } - 378: - 379: //if (global_recieve_done) - 380: //{ - 381: on_recieve(); - 382: // global_recieve_done = 0; - 383: // global_serial_byte_counter = 0; - 384: //} - 385: } - 386: } + 191: if (global_serial_byte_counter == 0 && data_byte == '\r') + 192: return; + 193: + 194: global_serial_recieve_buffer[global_serial_byte_counter] = data_byte; + 195: + 196: if (data_byte == '\r') + 197: { + 198: global_recieve_done = 1; + 199: //global_serial_byte_counter = 0; + 200: global_serial_recieve_buffer[global_serial_byte_counter+1] = 0; //zero terminate + 201: } + 202: else + 203: { + 204: global_serial_byte_counter++; + 205: } + 206: + 207: } + 208: + 209: void timer1_interrupt(void) + 210: { + 211: TMR1H = 0xEF; + 212: TMR1L = 0xFF; + 213: global_time_counter++; + 214: global_emergency_counter++; + 215: RA1 = !RA1; + 216: } + 217: + 218: void update_lcd(void) + 219: { + 220: lcd_clear(); + 221: lcd_goto(0x00); + 222: + 223: sprintf(global_lcd_buf, "%d", global_temp); + 224: lcd_puts(global_lcd_buf); + 225: + 226: } + 227: + 228: void send_update(void) + 229: { + 230: sprintf(global_serial_send, "at+cmgs=\"%s\"\r", cell_nr); + 231: serial_send(); + 232: sprintf(global_serial_send, "%d:%d:%d:%d:%d:%d%c", global_sms_counter, global_temp, FIREDET, EMPTYTANK, FEEDING, PWRFAIL, 0x1A); + 233: lcd_goto(40); + 234: lcd_puts(global_serial_send); + 235: serial_send(); + 236: DelayMs(250); + 237: global_sms_counter++; + 238: } + 239: + 240: void convertTemp() + 241: { + 242: short adVal; + 243: adVal = (global_Pot_Hi << 8) | global_Pot_Lo; + 244: if( adVal >=840 ) + 245: global_temp = 100; + 246: else + 247: global_temp = (adVal / 8.3886); + 248: } + 249: + 250: + 251: + 252: void eeprom_writer(void) + 253: { + 254: char len,i; + 255: + 256: len = strlen(cell_nr); + 257: eeprom_write(0, (global_time_interval/60)); + 258: eeprom_write(1, global_sms_counter>>8); + 259: eeprom_write(2, global_sms_counter); + 260: eeprom_write(3, len); + 261: + 262: for (i=0; i= 90 || PWRFAIL == 1 || FIREDET == 0 || FEEDING == 1 || EMPTYTANK == 1) && global_emergency_counter >= 600 ) + 363: { + 364: send_update(); + 365: global_emergency_counter = 0; + 366: } + 367: // Every X sec. a status sms is send. + 368: if(global_time_counter >= 3600) + 369: { + 370: send_update(); + 371: global_time_counter = 0; + 372: } + 373: // To avoid buffer overrun. + 374: if( global_emergency_counter > 7200 ) + 375: global_emergency_counter = 600; + 376: + 377: // Checks if there has been recieved a config sms. + 378: if(global_interval_changed ) + 379: { + 380: eeprom_writer(); + 381: global_interval_changed = 0; + 382: } + 383: // Checking if A/D convertion is done, and save the data in global_Pot_?? + 384: if(GODONE==0) + 385: { + 386: global_Pot_Hi = ADRESH; + 387: global_Pot_Lo = ADRESL; + 388: convertTemp(); + 389: //update_lcd(); + 390: GODONE = 1; + 391: } + 392: // Handels the recieve sms'es. + 393: on_recieve(); + 394: } + 395: }