Rev 958 Rev 959
Line 203... Line 203...
203 { 203 {
204 olsa_pulse(); // impulz pro generovani dalsiho bitu 204 olsa_pulse(); // impulz pro generovani dalsiho bitu
205 205
206 if(SDOUT) // zachycena 1 206 if(SDOUT) // zachycena 1
207 { 207 {
208 bit_set(pixel,cbit); // zapise do bitu pixelu 1 - OR 208 bit_set(pixel,cbit); // zapise do bitu (dano cbit) bytu (pixelu) prislusnou hodnotu
209 } 209 }
210 } 210 }
211 olsa_pulse(); // generuje stop bit 211 olsa_pulse(); // generuje stop bit
212 if(cpixel<52) // ulozeni do pole 212 if(cpixel<52) // ulozeni do pole
213 { 213 {
Line 236... Line 236...
236 int8 bright; // nejsvetlejsi pixel 236 int8 bright; // nejsvetlejsi pixel
237 dark=0xff; 237 dark=0xff;
238 bright=0x00; 238 bright=0x00;
239 for(searchp=0;searchp<51;searchp++) // prohlizi levou cast radky 239 for(searchp=0;searchp<51;searchp++) // prohlizi levou cast radky
240 { 240 {
241 if(olsa_lseg[searchp]<dark) // porovna pixel s doposud nejtmavsim 241 if(olsa_lseg[searchp]<dark) // porovna pixel s doposud nejtmavsim
242 { 242 {
243 dark=olsa_lseg[searchp]; // ulozi nejtmavsi pixel 243 dark=olsa_lseg[searchp]; // ulozi nejtmavsi pixel
244 position=searchp; // ulozi polohu nejtmavsiho pixelu 244 position=searchp; // ulozi polohu nejtmavsiho pixelu
245 } 245 }
246 if(olsa_lseg[searchp]>bright) 246 if(olsa_lseg[searchp]>bright)
247 { 247 {
248 bright=olsa_lseg[searchp]; // ulozi nejsvetlejsi pixel 248 bright=olsa_lseg[searchp]; // ulozi nejsvetlejsi pixel
249 } 249 }
250 } 250 }
251 for(searchp=0;searchp<49;searchp++) // prohlizi levou cast radky 251 for(searchp=0;searchp<49;searchp++) // prohlizi levou cast radky
252 { 252 {
253 if(olsa_rseg[searchp]<dark) // porovna pixel s doposud nejtmavsim 253 if(olsa_rseg[searchp]<dark) // porovna pixel s doposud nejtmavsim
254 { 254 {
255 dark=olsa_rseg[searchp]; // ulozi nejtmavsi pixel 255 dark=olsa_rseg[searchp]; // ulozi nejtmavsi pixel
256 position=(searchp+51); // ulozi polohu nejtmavsiho pixelu 256 position=(searchp+51); // ulozi polohu nejtmavsiho pixelu
257 } 257 }
258 if(olsa_rseg[searchp]>bright) 258 if(olsa_rseg[searchp]>bright)
259 { 259 {
260 bright=olsa_rseg[searchp]; // ulozi nejsvetlejsi pixel 260 bright=olsa_rseg[searchp]; // ulozi nejsvetlejsi pixel
261 } 261 }
262 } 262 }
263 contrast=(bright-dark); 263 contrast=(bright-dark);
264 if(contrast<CONT) 264 if(contrast<CONT)
265 { 265 {
Line 325... Line 325...
325 void calc_regulator() 325 void calc_regulator()
326 { 326 {
327 int8 p_reg; 327 int8 p_reg;
328 int8 i_reg; 328 int8 i_reg;
329 int8 d_reg; 329 int8 d_reg;
330 p_reg=(CONP*err5); // vypocet proporcionalni slozky 330 p_reg=(CONP*err5); // vypocet proporcionalni slozky
331 i_reg=(CONI*(errp/100)); // vypocet integracni slozky 331 i_reg=(CONI*(errp/100)); // vypocet integracni slozky
332 if(position>old_position) // vypocet derivacni slozky 332 if(position>old_position) // vypocet derivacni slozky
333 { 333 {
334 d_reg=(COND*((position-old_position)/100)); // pokud je aktualni pozice vetsi nez predesla 334 d_reg=(COND*((position-old_position)/100)); // pokud je aktualni pozice vetsi nez predesla
335 } 335 }
336 else 336 else
337 { 337 {
338 d_reg=(COND*((old_position-position)/100)); // pokud je aktualni pozice mensi nez predesla 338 d_reg=(COND*((old_position-position)/100)); // pokud je aktualni pozice mensi nez predesla
339 } 339 }
340 reg_out=(p_reg+i_reg+d_reg); // vypocet celeho regulatoru 340 reg_out=(p_reg+i_reg+d_reg); // vypocet celeho regulatoru
341 } 341 }
342   342  
343 // ================================== MOTORY =================================== 343 // ================================== MOTORY ===================================
344   344  
345 void l_motor_fwd(int8 speedl) // levy motor dopredu 345 void l_motor_fwd(int8 speedl) // levy motor dopredu
Line 531... Line 531...
531 void main() 531 void main()
532 { 532 {
533 printf("POWER ON \r\n"); 533 printf("POWER ON \r\n");
534 // NASTAVENI > provede se pouze pri zapnuti 534 // NASTAVENI > provede se pouze pri zapnuti
535 setup_adc(ADC_CLOCK_INTERNAL); // interni hodniny pro AD prevodnik 535 setup_adc(ADC_CLOCK_INTERNAL); // interni hodniny pro AD prevodnik
536 setup_adc_ports(ALL_ANALOG); // aktivní analogové vstupy RA0, RA1 a RA2 536 setup_adc_ports(ALL_ANALOG); // aktivni vsechny analogove vstupy
537 setup_spi(SPI_SS_DISABLED); 537 setup_spi(SPI_SS_DISABLED);
538 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 538 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
539 setup_timer_1(T1_DISABLED); 539 setup_timer_1(T1_DISABLED);
540 setup_timer_2(T2_DIV_BY_16,255,1); // casovac pro PWM 540 setup_timer_2(T2_DIV_BY_16,255,1); // casovac pro PWM
541 setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2 541 setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2
Line 614... Line 614...
614 if(gap>SPACE) 614 if(gap>SPACE)
615 { 615 {
616 if(line_sector==LEFT) 616 if(line_sector==LEFT)
617 { 617 {
618 position=1; 618 position=1;
-   619 line_sector=LEFT;
619 } 620 }
620 if(line_sector==RIGHT) 621 if(line_sector==RIGHT)
621 { 622 {
622 position=99; 623 position=99;
-   624 line_sector=RIGHT;
623 } 625 }
624 } 626 }
625 if(position<20) // pro ostre zataceni 627 if(position<20) // pro ostre zataceni
626 { 628 {
627 position=1; 629 position=1;