Rev 1747 Rev 1748
Line 3... Line 3...
3 #case 3 #case
4   4  
5 #define REVERS 2 // 2*256 ms = 0,5 s 5 #define REVERS 2 // 2*256 ms = 0,5 s
6 #define GO 117 // 117*256 ms = 30 s 6 #define GO 117 // 117*256 ms = 30 s
7 #define GO_ZALUZIE 5 // 5*256 ms = 1,25 s 7 #define GO_ZALUZIE 5 // 5*256 ms = 1,25 s
-   8 #define RECEIVE 12 // 3 s
8   9  
9 #define S105A PIN_A0 10 #define S105A PIN_A0
10 #define R110AU PIN_A1 11 #define R110NU PIN_A1
11 #define R110AD PIN_A2 12 #define R110ND PIN_A2
12 #define S104A PIN_A3 13 #define S104A PIN_A3
13 #define R104AU PIN_A4 14 #define R104VU PIN_A4
14 #define R104AD PIN_A5 15 #define R104VD PIN_A5
15 #define R104BU PIN_A6 16 #define R104JU PIN_A6
16 #define R104BD PIN_A7 17 #define R104JD PIN_A7
17   18  
18 #define S103A PIN_B0 19 #define S103J PIN_B0
19 #define R103AU PIN_B1 20 #define R103VU PIN_B1
20 #define R103AD PIN_B2 21 #define R103VD PIN_B2
21 #define S106A PIN_B3 22 #define S106A PIN_B3
22 #define S107A PIN_B4 23 #define S107A PIN_B4
23 #define S109A PIN_B5 24 #define S109A PIN_B5
24   25  
25 //#define OS101 PIN_C0 26 //#define OS101 PIN_C0
Line 30... Line 31...
30 //#define PIN_C5 31765 31 //#define PIN_C5 31765
31   32  
32 //#define PIN_C6 31766 //TX 33 //#define PIN_C6 31766 //TX
33 //#define PIN_C7 31767 //RX 34 //#define PIN_C7 31767 //RX
34   35  
35 #define S101A PIN_D0 36 //#define S101A PIN_F0
36 #define S105D PIN_D1 37 #define S105Z PIN_F1
37 #define S102A PIN_D2 38 #define S102A PIN_F2
38 #define S110C PIN_D3 39 #define S110N PIN_F3
39 #define S108A PIN_D4 40 #define S108A PIN_F4
40 #define S201A PIN_D5 41 #define S201A PIN_F5
41 #define S110B PIN_D6 42 #define S110J PIN_F6
42   43  
43 /* 44 /*
44 #define PIN_E0 31776 45 #define PIN_E0 31776
45 #define PIN_E1 31777 46 #define PIN_E1 31777
46 #define PIN_E2 31778 47 #define PIN_E2 31778
Line 93... Line 94...
93 #define ON(port) output_low(port); 94 #define ON(port) output_low(port);
94 #define OFF(port) output_high(port); 95 #define OFF(port) output_high(port);
95   96  
96 typedef enum {GO_UP, GO_DOWN, REVERS_UP, REVERS_DOWN, STOP} state; 97 typedef enum {GO_UP, GO_DOWN, REVERS_UP, REVERS_DOWN, STOP} state;
97   98  
98 state r103A, r110A, r104A, r104B; // Stavy rolet 99 state r103V, r110N, r104V, r104J; // Stavy rolet
99 int8 tr103A, tr110A, tr104A, tr104B; // Casovace rolet 100 int8 tr103V, tr110N, tr104V, tr104J; // Casovace rolet
-   101 int8 timer; // Casovac komunikace
100   102  
101 #int_TIMER0 103 #int_TIMER0
102 void TIMER0_isr(void) 104 void TIMER0_isr(void)
103 { 105 {
104 if(tr103A>0) tr103A--; 106 if(tr103V>0) tr103V--;
105 if(tr110A>0) tr110A--; 107 if(tr110N>0) tr110N--;
106 if(tr104A>0) tr104A--; 108 if(tr104V>0) tr104V--;
107 if(tr104B>0) tr104B--; 109 if(tr104J>0) tr104J--;
-   110 if(timer>0) timer--;
108 output_toggle(LED2); 111 output_toggle(LED2);
109 } 112 }
110   113  
111 void up(state *status, int8 *timer) // Zmena stavu rolety smer nahoru 114 void up(state *status, int8 *timer) // Zmena stavu rolety smer nahoru
112 { 115 {
Line 172... Line 175...
172 } \ 175 } \
173 } 176 }
174   177  
175 void main() 178 void main()
176 { 179 {
177 char c; 180 char buf[10];
178 181
179 if(restart_cause()!= WDT_TIMEOUT) -  
180 { -  
181 setup_adc_ports(NO_ANALOGS|VSS_VDD); 182 setup_adc_ports(NO_ANALOGS|VSS_VDD);
182 setup_adc(ADC_CLOCK_DIV_2); 183 setup_adc(ADC_CLOCK_DIV_2);
183 setup_psp(PSP_DISABLED); 184 setup_psp(PSP_DISABLED);
184 setup_spi(SPI_SS_DISABLED); 185 setup_spi(SPI_SS_DISABLED);
185 setup_wdt(WDT_ON); 186 setup_wdt(WDT_OFF);
186 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 187 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
187 setup_timer_1(T1_DISABLED); 188 setup_timer_1(T1_DISABLED);
188 setup_timer_2(T2_DISABLED,0,1); 189 setup_timer_2(T2_DISABLED,0,1);
189 setup_timer_3(T3_DISABLED|T3_DIV_BY_1); 190 setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
190 setup_ccp1(CCP_OFF); 191 setup_ccp1(CCP_OFF);
191 setup_comparator(NC_NC_NC_NC); 192 setup_comparator(NC_NC_NC_NC);
192 setup_vref(FALSE); 193 setup_vref(FALSE);
-   194  
-   195 OFF(S105A); // Vsechno zhasni a zastav
-   196 OFF(R110NU);
-   197 OFF(R110ND);
-   198 OFF(S104A);
-   199 OFF(R104VU);
-   200 OFF(R104VD);
-   201 OFF(R104JU);
-   202 OFF(R104JD);
-   203 OFF(S103J);
-   204 OFF(R103VU);
-   205 OFF(R103VD);
-   206 OFF(S106A);
-   207 OFF(S107A);
-   208 OFF(S109A);
-   209 OFF(S105Z);
-   210 OFF(S102A);
-   211 OFF(S110N);
-   212 OFF(S108A);
-   213 OFF(S201A);
-   214 OFF(S110J);
-   215  
-   216 r103V=STOP; // Rolety jsou zastaveny
-   217 r110N=STOP;
-   218 r104V=STOP;
-   219 r104J=STOP;
-   220  
-   221 output_high(LED1); // Indikace restartu
-   222 delay_ms(100);
-   223 output_low(LED1);
-   224 delay_ms(30);
-   225 output_high(LED1);
-   226 restart_wdt();
-   227 delay_ms(100);
-   228 output_low(LED1);
-   229 delay_ms(30);
-   230 output_high(LED1);
-   231 restart_wdt();
193 232
194 OFF(S105A); // Vsechno zhasni a zastav -  
195 OFF(R110AU); -  
196 OFF(R110AD); -  
197 OFF(S104A); -  
198 OFF(R104AU); -  
199 OFF(R104AD); -  
200 OFF(R104BU); -  
201 OFF(R104BD); -  
202 OFF(S103A); -  
203 OFF(R103AU); -  
204 OFF(R103AD); -  
205 OFF(S106A); -  
206 OFF(S107A); -  
207 OFF(S109A); -  
208 OFF(S101A); -  
209 OFF(S105D); -  
210 OFF(S102A); -  
211 OFF(S110C); -  
212 OFF(S108A); -  
213 OFF(S201A); -  
214 OFF(S110B); -  
215   -  
216 r103A=STOP; // Rolety jsou zastaveny -  
217 r110A=STOP; -  
218 r104A=STOP; -  
219 r104B=STOP; -  
220   -  
221 enable_interrupts(INT_TIMER0); 233 enable_interrupts(INT_TIMER0);
222 enable_interrupts(GLOBAL); 234 enable_interrupts(GLOBAL);
223 } -  
224 235
225 CREN=0; CREN=1; // Reinitialise USART 236 CREN=0; CREN=1; // Reinitialise USART
226 237
227 while(TRUE) 238 while(TRUE)
228 { 239 {
-   240  
229 if(kbhit()) 241 if(kbhit()) // Chce po nas nekdo neco?
230 { 242 {
231 c=getc(); 243 buf[0]=getc();
232 if(c=='S') 244 if((buf[0]=='S')||(buf[0]=='R')) // Jinym znakem nesmi zacinat prikaz
233 { 245 {
-   246 int8 n=0; // Ukazatel do prijimaciho bufferu
-   247 timer=RECEIVE; // Timeout pro prijem znaku
-   248
234 if(getc()=='1') 249 do
235 { 250 {
236 switch(getc()) 251 if(kbhit()) // Je dalsi znak?
237 { 252 {
238 case '1': -  
239 output_toggle(S101A); -  
240 break; 253 n++;
241 case '2': -  
242 output_toggle(S102A); -  
243 break; -  
244 case '3': -  
245 output_toggle(S103A); -  
246 break; -  
247 case '4': -  
248 output_toggle(S104A); -  
249 break; -  
250 case '5': -  
251 c=getc(); 254 buf[n]=getc();
252 if(c=='A') {output_toggle(S105A);} -  
253 if(c=='D') {output_toggle(S105D);} -  
254 break; -  
255 case '6': -  
256 output_toggle(S106A); -  
257 break; -  
258 case '7': -  
259 output_toggle(S107A); -  
260 break; -  
261 case '8': -  
262 output_toggle(S108A); -  
263 break; -  
264 case '9': -  
265 output_toggle(S109A); -  
266 break; -  
267 case 'a': -  
268 output_toggle(S110B); -  
269 output_toggle(S110C); -  
270 break; -  
271 } 255 }
272 } 256 } while ((buf[n]!='\r')&&(timer>0)&&(n<7));
273 } 257
-   258 if (timer==0) { CREN=0; CREN=1; } // Reinitialise USART
274 259  
275 if(c=='R') 260 output_toggle(LED1); // Ukonceni prijimani prikazu
276 { 261
277 if(getc()=='1') 262 if((timer>0))
278 { 263 {
-   264  
-   265 if((buf[0]=='S')&&(n>=4)) // Zmena stavu svetla
-   266 {
-   267 if(buf[1]=='1')
-   268 {
279 switch(getc()) 269 switch(buf[2])
-   270 {
-   271 case '2':
-   272 output_toggle(S102A);
-   273 break;
-   274 case '3':
-   275 output_toggle(S103J);
-   276 break;
-   277 case '4':
-   278 output_toggle(S104A);
-   279 break;
-   280 case '5':
-   281 if(buf[3]=='A') {output_toggle(S105A);}
-   282 if(buf[3]=='Z') {output_toggle(S105Z);}
-   283 break;
-   284 case '6':
-   285 output_toggle(S106A);
-   286 break;
-   287 case '7':
-   288 output_toggle(S107A);
-   289 break;
-   290 case '8':
-   291 output_toggle(S108A);
-   292 break;
-   293 case '9':
-   294 output_toggle(S109A);
-   295 break;
-   296 case 'a':
-   297 output_toggle(S110J);
-   298 output_toggle(S110N);
-   299 break;
-   300 }
-   301 }
-   302 }
-   303
-   304 if((buf[0]=='R')&&(n>=5)) // Zmena stavu rolety
280 { 305 {
281 case '3': 306 if(buf[1]=='1')
282 getc(); // A 307 {
283 if((getc()=='U')) {up(&r103A,&tr103A);} else {down(&r103A,&tr103A);} 308 switch(buf[2])
284 break; 309 {
285 case '4': 310 case '3':
-   311 if(buf[4]=='U') {up(&r103V,&tr103V);} else {down(&r103V,&tr103V);}
-   312 break;
286 c=getc(); 313 case '4':
287 if(c=='A') if((getc()=='U')) {up(&r104A,&tr104A);} else {down(&r104A,&tr104A);} 314 if(buf[3]=='V') if((buf[4]=='U')) {up(&r104V,&tr104V);} else {down(&r104V,&tr104V);}
288 if(c=='B') if((getc()=='U')) {up(&r104B,&tr104B);} else {down(&r104B,&tr104B);} 315 if(buf[3]=='J') if((buf[4]=='U')) {up(&r104J,&tr104J);} else {down(&r104J,&tr104J);}
289 break; 316 break;
290 case 'a': 317 case 'a':
-   318 if((buf[4]=='U')) {up(&r110N,&tr110N);} else {down(&r110N,&tr110N);}
291 getc(); // A 319 break;
292 if((getc()=='U')) {up(&r110A,&tr110A);} else {down(&r110A,&tr110A);} 320 }
293 break; 321 }
294 } 322 }
-   323
295 } 324 }
296 } 325 }
297   -  
298 output_toggle(LED1); // Prijmuli jsme cely prikaz -  
299 } 326 }
300 else 327
301 { -  
302 run(103A); 328 run(103V); // Rizeni rolet za behu
303 run(104A); 329 run(104V);
304 run(104B); 330 run(104J);
305   331  
306 switch(r110A) 332 switch(r110N) // Zaluzie ma specielni rizeni
307 { 333 {
308 case STOP: 334 case STOP:
309 OFF(R110AU); 335 OFF(R110NU);
310 OFF(R110AD); 336 OFF(R110ND);
311 break; 337 break;
312 case GO_UP: 338 case GO_UP:
313 ON(R110AU); 339 ON(R110NU);
314 OFF(R110AD); 340 OFF(R110ND);
315 if(tr110A==0) {r110A=STOP;} 341 if(tr110N==0) {r110N=STOP;}
316 break; 342 break;
317 case GO_DOWN: 343 case GO_DOWN:
318 OFF(R110AU); 344 OFF(R110NU);
319 ON(R110AD); 345 ON(R110ND);
320 if(tr110A==0) {r110A=STOP;} 346 if(tr110N==0) {r110N=STOP;}
321 break; 347 break;
322 case REVERS_UP: 348 case REVERS_UP:
323 OFF(R110AU); 349 OFF(R110NU);
324 OFF(R110AD); 350 OFF(R110ND);
325 if(tr110A==0) {r110A=GO_UP; tr110A=GO_ZALUZIE;} 351 if(tr110N==0) {r110N=GO_UP; tr110N=GO_ZALUZIE;}
326 break; 352 break;
327 case REVERS_DOWN: 353 case REVERS_DOWN:
328 OFF(R110AU); 354 OFF(R110NU);
329 OFF(R110AD); 355 OFF(R110ND);
330 if(tr110A==0) {r110A=GO_DOWN; tr110A=GO_ZALUZIE;} 356 if(tr110N==0) {r110N=GO_DOWN; tr110N=GO_ZALUZIE;}
331 break; 357 break;
332 } 358 }
333 /* 359 /*
334 switch(r110A) 360 switch(r110A)
335 { 361 {
336 case GO_UP: 362 case GO_UP:
337 printf("U"); 363 printf("U");
Line 348... Line 374...
348 case STOP: 374 case STOP:
349 printf("S"); 375 printf("S");
350 break; 376 break;
351 } 377 }
352 */ 378 */
353 restart_wdt(); 379 restart_wdt();
354 } -  
355 } 380 }
356 } 381 }