Rev 2177 Rev 4248
1 /**** IR Mrakomer 4 ****/ 1 /**** IR Mrakomer 4 ****/
2 #define VERSION "4.1" 2 #define VERSION "4.1"
3 #define ID "$Id: irmrak4.c 2177 2011-09-05 18:56:16Z kaklik $" 3 #define ID "$Id: irmrak4.c 4248 2015-10-19 18:09:23Z kakl $"
4   4  
5 #include "irmrak4.h" 5 #include "irmrak4.h"
6   6  
7 #bit CREN = 0x18.4 // USART registers 7 #bit CREN = 0x18.4 // USART registers
8 #bit SPEN = 0x18.7 8 #bit SPEN = 0x18.7
9 #bit OERR = 0x18.1 9 #bit OERR = 0x18.1
10 #bit FERR = 0x18.2 10 #bit FERR = 0x18.2
11   11  
12 #include <string.h> 12 #include <string.h>
13   13  
14 #CASE // Case sensitive compiler 14 #CASE // Case sensitive compiler
15   15  
16 #define MAXHEAT 20 // Number of cycles for heating 16 #define MAXHEAT 20 // Number of cycles for heating
17 #define MAXOPEN 20 // Number of cycles for dome open 17 #define MAXOPEN 20 // Number of cycles for dome open
18 #define MEASURE_DELAY 6000 // Delay to a next measurement 18 #define MEASURE_DELAY 6000 // Delay to a next measurement
19 #define RESPONSE_DELAY 100 // Reaction time after receiving a command 19 #define RESPONSE_DELAY 100 // Reaction time after receiving a command
20 #define SAFETY_COUNT 90 // Time of one emergency cycle 20 #define SAFETY_COUNT 90 // Time of one emergency cycle
21 #define SEND_DELAY 50 // Time between two characters on RS232 21 #define SEND_DELAY 50 // Time between two characters on RS232
22 #define TEMPERATURE_INSIDE 1800 // Keep this temperature inside MM's box 22 #define TEMPERATURE_INSIDE 1800 // Keep this temperature inside MM's box
23   23  
24 #define DOME PIN_B4 // Dome controll port 24 #define DOME PIN_B4 // Dome controll port
25 #define HEATING PIN_B3 // Heating for defrosting 25 #define HEATING PIN_B3 // Heating for defrosting
26   26  
27   27  
28 char VER[4]=VERSION; // Buffer for concatenate of a version string 28 char VER[4]=VERSION; // Buffer for concatenate of a version string
29   29  
30 int8 heat; // Status variables 30 int8 heat; // Status variables
31 int8 open; 31 int8 open;
32   32  
33 inline void toggle_dome(void) // Wire exercise 33 inline void toggle_dome(void) // Wire exercise
34 { 34 {
35 if (open>0) 35 if (open>0)
36 {output_toggle(DOME);} // Toggle = Open Dome 36 {output_toggle(DOME);} // Toggle = Open Dome
37 else 37 else
38 {output_high(DOME);} // Do not toggle = Close Dome 38 {output_high(DOME);} // Do not toggle = Close Dome
39 } 39 }
40   40  
41 void delay(int16 cycles) // Wire exercise with delay 41 void delay(int16 cycles) // Wire exercise with delay
42 { 42 {
43 int16 i; 43 int16 i;
44   44  
45 for(i=0; i<cycles; i++) {toggle_dome(); delay_us(100);} 45 for(i=0; i<cycles; i++) {toggle_dome(); delay_us(100);}
46 } 46 }
47   47  
48 void welcome(void) // Welcome message 48 void welcome(void) // Welcome message
49 { 49 {
50 char REV[50]=ID; // Buffer for concatenate of a version string 50 char REV[50]=ID; // Buffer for concatenate of a version string
51   51  
52 if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0; 52 if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
53 printf("\r\n\r\n# Mrakomer %s (C) 2011 UST\r\n",VER); // Welcome message 53 printf("\r\n\r\n# Mrakomer %s (C) 2011 UST\r\n",VER); // Welcome message
54 printf("#%s\r\n",&REV[4]); 54 printf("#%s\r\n",&REV[4]);
55 // printf("#\r\n"); 55 // printf("#\r\n");
56 // printf("# commands: h, c, o, l, x, i, r, a, s, u\r\n"); 56 // printf("# commands: h, c, o, l, x, i, r, a, s, u\r\n");
57 // printf("# h_eat, c_old, o_pen, l_ock, x_open, "); 57 // printf("# h_eat, c_old, o_pen, l_ock, x_open, ");
58 // printf("i_nfo, r_epeat, a_uto, s_single, u_pdate\r\n"); 58 // printf("i_nfo, r_epeat, a_uto, s_single, u_pdate\r\n");
59 // printf("#\r\n"); 59 // printf("#\r\n");
60 // printf("# ver seq in[1/100 C] sky[1/100 C] sky[1/100 C] "); 60 // printf("# ver seq in[1/100 C] sky[1/100 C] sky[1/100 C] ");
61 // printf("out[1/100 C] heat[s] dome[s] check\r\n\r\n"); 61 // printf("out[1/100 C] heat[s] dome[s] check\r\n\r\n");
62   62  
63 //---WDT 63 //---WDT
64 restart_wdt(); 64 restart_wdt();
65 } 65 }
66   66  
67   67  
68 #include "smb.c" // System Management Bus driver 68 #include "smb.c" // System Management Bus driver
69 #include "TOUCH.C" 69 #include "TOUCH.C"
70   70  
71   71  
72 // Read sensor's RAM 72 // Read sensor's RAM
73 // Returns temperature in °K 73 // Returns temperature in °K
74 int16 ReadTemp(int8 addr, int8 select) 74 int16 ReadTemp(int8 addr, int8 select)
75 { 75 {
76 unsigned char arr[6]; // Buffer for the sent bytes 76 unsigned char arr[6]; // Buffer for the sent bytes
77 int8 crc; // Readed CRC 77 int8 crc; // Readed CRC
78 int16 temp; // Readed temperature 78 int16 temp; // Readed temperature
79   79  
80 addr<<=1; 80 addr<<=1;
81   81  
82 SMB_STOP_bit(); //If slave send NACK stop comunication 82 SMB_STOP_bit(); //If slave send NACK stop comunication
83 SMB_START_bit(); //Start condition 83 SMB_START_bit(); //Start condition
84 SMB_TX_byte(addr); 84 SMB_TX_byte(addr);
85 SMB_TX_byte(RAM_Access|select); 85 SMB_TX_byte(RAM_Access|select);
86 SMB_START_bit(); //Repeated Start condition 86 SMB_START_bit(); //Repeated Start condition
87 SMB_TX_byte(addr); 87 SMB_TX_byte(addr);
88 arr[2]=SMB_RX_byte(ACK); //Read low data,master must send ACK 88 arr[2]=SMB_RX_byte(ACK); //Read low data,master must send ACK
89 arr[1]=SMB_RX_byte(ACK); //Read high data,master must send ACK 89 arr[1]=SMB_RX_byte(ACK); //Read high data,master must send ACK
90 temp=make16(arr[1],arr[2]); 90 temp=make16(arr[1],arr[2]);
91 crc=SMB_RX_byte(NACK); //Read PEC byte, master must send NACK 91 crc=SMB_RX_byte(NACK); //Read PEC byte, master must send NACK
92 SMB_STOP_bit(); //Stop condition 92 SMB_STOP_bit(); //Stop condition
93   93  
94 arr[5]=addr; 94 arr[5]=addr;
95 arr[4]=RAM_Access|select; 95 arr[4]=RAM_Access|select;
96 arr[3]=addr; 96 arr[3]=addr;
97 arr[0]=0; 97 arr[0]=0;
98 if (crc != PEC_calculation(arr)) temp=0; // Calculate and check CRC 98 if (crc != PEC_calculation(arr)) temp=0; // Calculate and check CRC
99   99  
100 return temp; 100 return temp;
101 } 101 }
102   102  
103 // compute CRC 103 // compute CRC
104 // *sn - pointer to the byte array 104 // *sn - pointer to the byte array
105 // num - length of array 105 // num - length of array
106 inline int8 TM_check_CRC(unsigned int8 *sn, unsigned int8 num) 106 inline int8 TM_check_CRC(unsigned int8 *sn, unsigned int8 num)
107 { 107 {
108 // CRC table 108 // CRC table
109 const int8 TouchCRC[256]= { 109 const int8 TouchCRC[256]= {
110 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 110 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
111 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 111 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
112 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 112 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
113 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 113 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
114 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 114 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
115 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 115 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
116 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 116 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
117 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 117 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
118 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 118 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
119 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 119 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
120 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 120 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
121 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 121 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
122 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 122 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
123 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 123 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
124 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 124 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
125 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}; 125 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
126   126  
127 int8 CRC; 127 int8 CRC;
128 int8 i; 128 int8 i;
129   129  
130 CRC=0; 130 CRC=0;
131 for(i=0;i<num;i++) CRC=TouchCRC[CRC ^ *(sn+i)]; 131 for(i=0;i<num;i++) CRC=TouchCRC[CRC ^ *(sn+i)];
132 return(CRC); 132 return(CRC);
133 } 133 }
134   134  
135   135  
136 /*-------------------------------- MAIN --------------------------------------*/ 136 /*-------------------------------- MAIN --------------------------------------*/
137 void main() 137 void main()
138 { 138 {
139 unsigned int16 seq, temp, tempa; 139 unsigned int16 seq, temp, tempa;
140 signed int16 ta, to1, to2, tTouch; 140 signed int16 ta, to1, to2, tTouch;
141 int8 tLSB,tMSB; // Temperatures from TouchMemory 141 int8 tLSB,tMSB; // Temperatures from TouchMemory
142 int8 safety_counter; 142 int8 safety_counter;
143 int8 heatTime; 143 int8 heatTime;
144 int1 repeat; // Status flags 144 int1 repeat; // Status flags
145 int1 automatic; 145 int1 automatic;
146   146  
-   147 //KAKL!!!
-   148 int8 SN[10];
-   149  
-   150  
147 output_high(DOME); // Close Dome 151 output_high(DOME); // Close Dome
148 output_low(HEATING); // Heating off 152 output_low(HEATING); // Heating off
149   153  
150 delay_ms(1000); 154 delay_ms(1000);
151 restart_wdt(); 155 restart_wdt();
152   156  
153 seq=0; // Variables initiation 157 seq=0; // Variables initiation
154 heat=0; 158 heat=0;
155 open=0; 159 open=0;
156 heatTime=0; 160 heatTime=0;
157 repeat=TRUE; 161 repeat=TRUE;
158 automatic=FALSE; 162 automatic=FALSE;
159   163  
160 welcome(); 164 welcome();
161   165  
162 tempa=ReadTemp(SA, RAM_Tamb); // Dummy read 166 tempa=ReadTemp(SA, RAM_Tamb); // Dummy read
163 temp=ReadTemp(SA, RAM_Tobj1); 167 temp=ReadTemp(SA, RAM_Tobj1);
164 touch_present(); //Issues a reset of Touch Memory device 168 touch_present(); //Issues a reset of Touch Memory device
165 touch_write_byte(0xCC); 169 touch_write_byte(0xCC);
166 touch_write_byte(0x44); 170 touch_write_byte(0x44);
167   171  
168 delay_ms(1000); 172 delay_ms(1000);
169 //---WDT 173 //---WDT
170 restart_wdt(); 174 restart_wdt();
171 175
172 while(TRUE) // Main Loop 176 while(TRUE) // Main Loop
173 { 177 {
174 safety_counter=SAFETY_COUNT; // Heating and Dome Count Down 178 safety_counter=SAFETY_COUNT; // Heating and Dome Count Down
175 do 179 do
176 { 180 {
177 if (safety_counter<SAFETY_COUNT) safety_counter++; 181 if (safety_counter<SAFETY_COUNT) safety_counter++;
178   182  
179 delay(RESPONSE_DELAY); 183 delay(RESPONSE_DELAY);
180   184  
181 if (safety_counter>=SAFETY_COUNT) 185 if (safety_counter>=SAFETY_COUNT)
182 { 186 {
183 if (heat>0) { output_high(HEATING); } else { output_low(HEATING); } 187 if (heat>0) { output_high(HEATING); } else { output_low(HEATING); }
184   188  
185 if (heat>0) heat--; 189 if (heat>0) heat--;
186 if (open>0) open--; 190 if (open>0) open--;
187   191  
188 safety_counter=0; 192 safety_counter=0;
189 //---WDT 193 //---WDT
190 restart_wdt(); 194 restart_wdt();
191 } 195 }
192 } while (!kbhit()&&!repeat); 196 } while (!kbhit()&&!repeat);
193   197  
194 //---WDT 198 //---WDT
195 restart_wdt(); 199 restart_wdt();
196 { // Retrieve command 200 { // Retrieve command
197 char ch='k'; 201 char ch='k';
198   202  
199 if(kbhit()) ch=getc(); 203 if(kbhit()) ch=getc();
200   204  
201 switch (ch) 205 switch (ch)
202 { 206 {
203 case 'h': 207 case 'h':
204 heat=MAXHEAT; // Need heating 208 heat=MAXHEAT; // Need heating
205 automatic=FALSE; 209 automatic=FALSE;
206 break; 210 break;
207   211  
208 case 'c': 212 case 'c':
209 heat=0; // Need colder 213 heat=0; // Need colder
210 automatic=FALSE; 214 automatic=FALSE;
211 break; 215 break;
212   216  
213 case 'o': 217 case 'o':
214 open=MAXOPEN; // Open the dome 218 open=MAXOPEN; // Open the dome
215 automatic=FALSE; 219 automatic=FALSE;
216 break; 220 break;
217   221  
218 case 'x': 222 case 'x':
219 open=MAXOPEN; // Open the dome 223 open=MAXOPEN; // Open the dome
220 heat=MAXHEAT; // Need heating 224 heat=MAXHEAT; // Need heating
221 automatic=FALSE; 225 automatic=FALSE;
222 break; 226 break;
223   227  
224 case 'l': 228 case 'l':
225 open=0; // Lock the dome 229 open=0; // Lock the dome
226 automatic=FALSE; 230 automatic=FALSE;
227 break; 231 break;
228   232  
229 case 'i': 233 case 'i':
230 if (open==0) welcome(); // Information about version, etc... 234 if (open==0) welcome(); // Information about version, etc...
231 break; // Only when dome is closed 235 break; // Only when dome is closed
232   236  
233 case 'r': 237 case 'r':
234 repeat=TRUE; // Repeated measure mode 238 repeat=TRUE; // Repeated measure mode
235 automatic=FALSE; 239 automatic=FALSE;
236 break; 240 break;
237   241  
238 case 's': 242 case 's':
239 repeat=FALSE; // Single measure mode 243 repeat=FALSE; // Single measure mode
240 automatic=FALSE; 244 automatic=FALSE;
241 break; 245 break;
242   246  
243 case 'a': 247 case 'a':
244 repeat=TRUE; // Automatic mode 248 repeat=TRUE; // Automatic mode
245 automatic=TRUE; 249 automatic=TRUE;
246 break; 250 break;
247   251  
248 case 'u': 252 case 'u':
249 reset_cpu(); // Update firmware 253 reset_cpu(); // Update firmware
250 } 254 }
251 } 255 }
252 CREN=0; CREN=1; // Reinitialise USART 256 CREN=0; CREN=1; // Reinitialise USART
253   257  
254 seq++; // Increment the number of measurement 258 seq++; // Increment the number of measurement
255   259  
256 tempa=ReadTemp(SA, RAM_Tamb); // Read temperatures from sensor 260 tempa=ReadTemp(SA, RAM_Tamb); // Read temperatures from sensor
257 ta=tempa*2-27315; // °K -> °C 261 ta=tempa*2-27315; // °K -> °C
258   262  
259 temp=ReadTemp(SA, RAM_Tobj1); 263 temp=ReadTemp(SA, RAM_Tobj1);
260 if (temp>0x48E1) {to1=-27315;} else {to1=temp*2-27315;} 264 if (temp>0x48E1) {to1=-27315;} else {to1=temp*2-27315;}
261 temp=ReadTemp(SA, RAM_Tobj2); 265 temp=ReadTemp(SA, RAM_Tobj2);
262 if (temp>0x48E1) {to2=-27315;} else {to2=temp*2-27315;} 266 if (temp>0x48E1) {to2=-27315;} else {to2=temp*2-27315;}
263   267  
264 touch_present(); //Issues a reset of Touch Memory device 268 touch_present(); //Issues a reset of Touch Memory device
265 touch_write_byte(0xCC); 269 touch_write_byte(0xCC);
266 touch_write_byte(0x44); 270 touch_write_byte(0x44);
267 271
268 //---WDT 272 //---WDT
269 restart_wdt(); 273 restart_wdt();
270 delay(MEASURE_DELAY); // Delay to a next measurement 274 delay(MEASURE_DELAY); // Delay to a next measurement
271   275  
272 { 276 {
273 int8 SN[10]; 277 //KAKL!!! int8 SN[10];
274 int8 n; 278 int8 n;
275   279  
276 touch_present(); //Issues a reset and returns true if the touch device is there. 280 touch_present(); //Issues a reset and returns true if the touch device is there.
277 touch_write_byte(0xCC); 281 touch_write_byte(0xCC);
278 touch_write_byte(0xBE); 282 touch_write_byte(0xBE);
279 for(n=0;n<9;n++) SN[n]=touch_read_byte(); 283 for(n=0;n<9;n++) SN[n]=touch_read_byte();
280 tLSB=SN[0]; 284 tLSB=SN[0];
281 tMSB=SN[1]; 285 tMSB=SN[1];
282 if ((SN[8]==TM_check_CRC(SN,8))&&(SN[7]==0x10)) // Check CRC and family code to prevent O's error 286 if ((SN[8]==TM_check_CRC(SN,8))&&(SN[7]==0x10)) // Check CRC and family code to prevent O's error
283 { 287 {
284 tTouch=make16(tMSB,tLSB); 288 tTouch=make16(tMSB,tLSB);
285 tTouch=tTouch*6+tTouch/4; // 1bit = 0,0625gradC recalculate to 1/100gradC 289 tTouch=tTouch*6+tTouch/4; // 1bit = 0,0625gradC recalculate to 1/100gradC
286 } 290 }
287 else 291 else
288 { 292 {
289 tTouch=-27315; 293 tTouch=-27315;
290 } 294 }
291 } 295 }
292 296
-   297 /*
293 if(automatic) // Solve automatic mode 298 if(automatic) // Solve automatic mode
294 { 299 {
295 if (heatTime==0) 300 if (heatTime==0)
296 { 301 {
297 if((tTouch<=-300)&&(ta<=300)) {heat=(700-tTouch)/400;} else {heat=1;} // Needs warmer? 302 if((tTouch<=-300)&&(ta<=300)) {heat=(700-tTouch)/400;} else {heat=1;} // Needs warmer?
298 heatTime=MAXHEAT; 303 heatTime=MAXHEAT;
299 } 304 }
300 heatTime--; 305 heatTime--;
301 306
302 if(ta>2000) heat=0; // Overtemperature protection 307 if(ta>2000) heat=0; // Overtemperature protection
303 if(tTouch>2000) heat=0; 308 if(tTouch>2000) heat=0;
304 if(ta<-10000) heat=0; // Sensor Error protection 309 if(ta<-10000) heat=0; // Sensor Error protection
305 if(tTouch<-10000) heat=0; 310 if(tTouch<-10000) heat=0;
306 311
307 if((abs(to1-to2)<100)&&(tTouch>to1)&&(abs(tTouch-to1)>800)) open=1; // Control the dome 312 if((abs(to1-to2)<100)&&(tTouch>to1)&&(abs(tTouch-to1)>800)) open=1; // Control the dome
308 if(to1<-10000) open=0; // Sensor Error protection 313 if(to1<-10000) open=0; // Sensor Error protection
309 if(tTouch<-10000) open=0; 314 if(tTouch<-10000) open=0;
310 } 315 }
311   316 */
312 { // printf 317 { // printf
313 char output[8]; // Output buffer 318 char output[8]; // Output buffer
314 int8 j; // String pointer 319 int8 j; // String pointer
315 int8 check=0; // Checksum is calculated between '$' and '*' 320 int8 check=0; // Checksum is calculated between '$' and '*'
316   321  
317 delay(SEND_DELAY); 322 delay(SEND_DELAY);
318 putc('$'); 323 putc('$');
319 delay(SEND_DELAY); 324 delay(SEND_DELAY);
320 sprintf(output,"M%s \0",VER); 325 sprintf(output,"M%s \0",VER);
321 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 326 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
322 sprintf(output,"%Lu \0", seq); 327 sprintf(output,"%Lu \0", seq);
323 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 328 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
324 sprintf(output,"%Ld \0", ta); 329 sprintf(output,"%Ld \0", ta);
325 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 330 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
326 sprintf(output,"%Ld \0", to1); 331 sprintf(output,"%Ld \0", to1);
327 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 332 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
328 sprintf(output,"%Ld \0", to2); 333 sprintf(output,"%Ld \0", to2);
329 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 334 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
330 sprintf(output,"%Ld \0",tTouch); 335 sprintf(output,"%Ld \0",tTouch);
331 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 336 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
332 sprintf(output,"%u \0", heat); 337 sprintf(output,"%u \0", heat);
333 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 338 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
334 sprintf(output,"%u \0", open); 339 sprintf(output,"%u \0", open);
335 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; } 340 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
-   341 //KAKL!!! sprintf(output,"*%X\r\n\0", check);
336 sprintf(output,"*%X\r\n\0", check); 342 sprintf(output,"*%X \0", check);
-   343 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); }
-   344 {
-   345 int n;
-   346 for (n=0;n<9;n++)
-   347 {
-   348 sprintf(output,"%X \0", SN[n]);
-   349
-   350 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); }
-   351 }
-   352 }
-   353 sprintf(output,"\r\n\0");
337 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); } 354 j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j++]); }
-   355  
338 delay(SEND_DELAY); 356 delay(SEND_DELAY);
339 } 357 }
340 358
341 //---WDT 359 //---WDT
342 restart_wdt(); 360 restart_wdt();
343 } 361 }
344 } 362 }
345   363  
346   364  
347 #include "dbloader.c" // Space reservation for the BootLoader 365 #include "dbloader.c" // Space reservation for the BootLoader