Rev 1292 Rev 1293
Line 1... Line 1...
1 /**** IR Mrakomer 4 ****/ 1 /**** IR Mrakomer 4 ****/
2 #define VERSION "4.0" 2 #define VERSION "4.0"
3 #define ID "$Id: irmrak4.c 1292 2009-01-08 19:51:56Z kakl $" 3 #define ID "$Id: irmrak4.c 1293 2009-01-11 22:53:46Z kakl $"
-   4  
4 #include "irmrak4.h" 5 #include "irmrak4.h"
5   6  
-   7 #bit CREN = 0x18.4 // USART registers
-   8 #bit SPEN = 0x18.7
-   9 #bit OERR = 0x18.1
-   10 #bit FERR = 0x18.2
-   11  
-   12 #include <string.h>
-   13 #include "bloader.c" // Boot Loader driver
-   14  
6 #CASE // Case sensitive compiler 15 #CASE // Case sensitive compiler
7   16  
8 #define MAXHEAT 20 // Number of cycles for heating 17 #define MAXHEAT 20 // Number of cycles for heating
9 #define MAXOPEN 20 // Number of cycles for dome open 18 #define MAXOPEN 20 // Number of cycles for dome open
10 #define MEASURE_DELAY 6000 // Delay to a next measurement 19 #define MEASURE_DELAY 6000 // Delay to a next measurement
Line 13... Line 22...
13 #define SEND_DELAY 50 // Time between two characters on RS232 22 #define SEND_DELAY 50 // Time between two characters on RS232
14   23  
15 #define DOME PIN_B4 // Dome controll port 24 #define DOME PIN_B4 // Dome controll port
16 #define HEATING PIN_B3 // Heating for defrosting 25 #define HEATING PIN_B3 // Heating for defrosting
17   26  
18 #bit CREN = 0x18.4 // USART registers -  
19 #bit SPEN = 0x18.7 -  
20 #bit OERR = 0x18.1 -  
21 #bit FERR = 0x18.2 -  
22   27  
23 char VER[4]=VERSION; // Buffer for concatenate of a version string 28 char VER[4]=VERSION; // Buffer for concatenate of a version string
24 char REV[50]=ID; -  
25   29  
26 int8 heat; // Status variables 30 int8 heat; // Status variables
27 int8 open; 31 int8 open;
28   32  
29 inline void toggle_dome(void) // Wire exercise 33 inline void toggle_dome(void) // Wire exercise
Line 41... Line 45...
41 for(i=0; i<cycles; i++) {toggle_dome(); delay_us(100);} 45 for(i=0; i<cycles; i++) {toggle_dome(); delay_us(100);}
42 } 46 }
43   47  
44 void welcome(void) // Welcome message 48 void welcome(void) // Welcome message
45 { 49 {
-   50 char REV[50]=ID; // Buffer for concatenate of a version string
-   51  
-   52 if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
46 printf("\n\r* Mrakomer %s (C) 2007 KAKL *\n\r",VER); // Welcome message 53 printf("\n\r# Mrakomer %s (C) 2007 KAKL\n\r",VER); // Welcome message
47 printf("* %s *\n\r",REV); 54 printf("#%s\n\r",&REV[4]);
48 printf("<#sequence> <ambient [1/100 C]> <sky [1/100 C]> "); 55 printf("# <sequence> <ambient[1/100 C]> <sky[1/100 C]> ");
49 printf("<heating [s]> <dome [s]>\n\r\n\r"); 56 printf("<heating[s]> <dome[s]> <check>\n\r\n\r");
50 } 57 }
51   58  
52   59  
53 #include "smb.c" // System Management Bus driver 60 #include "smb.c" // System Management Bus driver
54   61  
55   62  
56 // Read sensor RAM 63 // Read sensor's RAM
57 // Returns temperature in °K 64 // Returns temperature in °K
58 int16 ReadTemp(int8 addr, int8 select) 65 int16 ReadTemp(int8 addr, int8 select)
59 { 66 {
60 unsigned char arr[6]; // Buffer for the sent bytes 67 unsigned char arr[6]; // Buffer for the sent bytes
61 int8 crc; // Readed CRC 68 int8 crc; // Readed CRC
Line 183... Line 190...
183 break; 190 break;
184   191  
185 case 's': 192 case 's':
186 repeat=FALSE; // Single measure mode 193 repeat=FALSE; // Single measure mode
187 break; 194 break;
-   195  
-   196 case 'u':
-   197 load_program(); // Update firmware
188 } 198 }
189 } 199 }
190 // while(kbhit()) getc(); // Flush USART buffer 200 // while(kbhit()) getc(); // Flush USART buffer
191 CREN=0; CREN=1; // Reinitialise USART 201 CREN=0; CREN=1; // Reinitialise USART
192   202  
Line 199... Line 209...
199 to=temp*2-27315; 209 to=temp*2-27315;
200   210  
201 { // printf 211 { // printf
202 char output[8]; // Output buffer 212 char output[8]; // Output buffer
203 int8 j; // String pointer 213 int8 j; // String pointer
-   214 int8 check=0; // Checksum is calculated between '$' and '*'
204   215  
205 delay(SEND_DELAY); 216 delay(SEND_DELAY);
-   217 putc('$');
-   218 delay(SEND_DELAY);
-   219 sprintf(output,"M%s ",VER);
-   220 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
206 sprintf(output,"#%Lu ", seq); 221 sprintf(output,"%Lu ", seq);
207 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } 222 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
208 sprintf(output,"%Ld ", ta); 223 sprintf(output,"%Ld ", ta);
209 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } 224 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
210 sprintf(output,"%Ld ", to); 225 sprintf(output,"%Ld ", to);
211 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } 226 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
212 sprintf(output,"%u ", heat); 227 sprintf(output,"%u ", heat);
-   228 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
-   229 sprintf(output,"%u ", open);
-   230 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
-   231 sprintf(output,"*%X\n\r\0", check);
213 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } 232 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); }
214 sprintf(output,"%u\n\r\0", open); 233 delay(SEND_DELAY);
215 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } -  
216 } 234 }
217   235  
218 delay(MEASURE_DELAY); // Delay to a next measurement 236 delay(MEASURE_DELAY); // Delay to a next measurement
219 //---WDT 237 //---WDT
220 restart_wdt(); 238 restart_wdt();
221 } 239 }
222 } 240 }
223   -