| 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 | } |