Rev 730 Rev 741
Line 10... Line 10...
10 //piezo pipak 10 //piezo pipak
11 #DEFINE SOUND_HI PIN_B4 11 #DEFINE SOUND_HI PIN_B4
12 #DEFINE SOUND_LO PIN_B5 12 #DEFINE SOUND_LO PIN_B5
13   13  
14 //radkovy senzor 14 //radkovy senzor
15 #define SDIN PIN_D4 // seriovy vstup 15 #define SDIN PIN_D4 // seriovy vstup
16 #define SDOUT input(PIN_B2) // seriovy vystup 16 #define SDOUT input(PIN_B2) // seriovy vystup
17 #define SCLK PIN_D5 // takt 17 #define SCLK PIN_D5 // takt
-   18  
-   19 //int test[8]={1,0,0,0,0,0,0,0};
-   20 int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset
-   21 int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapsani do MODE registru
-   22 int clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru
18   23  
19 int test[8]={1,0,0,0,0,0,0,0}; // pole pro test -  
20   24  
21 //naraznik 25 //naraznik
22 #define BUMPL input(PIN_D6) 26 #define BUMPL input(PIN_D6)
23 #define BUMPR input(PIN_D7) 27 #define BUMPR input(PIN_D7)
24   28  
25 //nouzove senzory 29 //nouzove senzory
26 #define LINEL 0 30 #define LINEL 0
27 #define LINER 1 31 #define LINER 1
28 #define TRESHOLD 200 // rozhodovaci uroven (zmereno 0 - cerna, 255 cerna) 32 #define TRESHOLD 200 // rozhodovaci uroven (zmereno 0 - cerna, 255 cerna)
29 int8 line_l; 33 int8 line_l;
30 int8 line_r; 34 int8 line_r;
31   35  
32 // motory 36 // motory
33 #define LMF PIN_D0 37 #define LMF PIN_D0
Line 37... Line 41...
37   41  
38 //PODPROGRAMY 42 //PODPROGRAMY
39 //SENZORY 43 //SENZORY
40   44  
41 //OLSA01A 45 //OLSA01A
42 void pulse(int pocet) // vytvori impulzy pro ridici logiku 46 void olsa_pulses(int count) // vytvori impulzy pro ridici logiku
43 { 47 {
44 int8 pc; 48 int8 ct;
45 for(pc=0;pc<=pocet;pc++) 49 for(ct=0;ct<=count;ct++)
46 { 50 {
-   51 delay_us(1);
47 output_high(SCLK); 52 output_high(SCLK);
-   53 delay_us(1);
48 output_low(SCLK); 54 output_low(SCLK);
49 } 55 }
50 } 56 }
51   57  
52 void send(int info[]) // USART komunikace s modulem OLSA01A 58 void olsa_pulse() // vytvori jeden impulz
53 { 59 {
-   60 delay_us(1);
-   61 output_high(SCLK);
-   62 delay_us(1);
-   63 output_low(SCLK);
-   64 }
-   65  
-   66 void olsa_send(int info[]) // USART komunikace s modulem OLSA01A - poslani zpravy
-   67 {
54 int8 *ip = &info; // ukazatel na pole s informaci 68 int8 *ip = &info; // ukazatel na pole s informaci
55 int i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN 69 int i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN
-   70
-   71 output_low(SDIN); // start bit
56 for(ip=0;ip<8;ip++) 72 olsa_pulse();
-   73 for(ip=0;ip<8;ip++) // predani informace - 8 bit, LSB prvni > MSB posledni
57 { 74 {
58 i=info[ip]; // ziskani hodnoty z pole 75 i=info[ip]; // ziskani hodnoty z pole
59 if(i==1) // vyhodnoceni obsahu informace - nastav 1 76 if(i==1) // vyhodnoceni obsahu informace - nastav 1
60 { 77 {
61 output_high(SDIN); 78 output_high(SDIN);
62 } 79 }
63 else // vyhodnoceni obsahu informace - nastav 0 80 else // vyhodnoceni obsahu informace - nastav 0
64 { 81 {
65 output_low(SDIN); 82 output_low(SDIN);
66 } 83 }
67 delay_us(1); // vytvor impulz - delay je pouze pro zabraneni hazardnich stavu -  
68 output_high(SCLK); -  
69 delay_us(1); 84 olsa_pulse();
70 output_low(SCLK); -  
71 } 85 }
-   86 output_high(SDIN); // stop bit
-   87 olsa_pulse();
72 } 88 }
73   89  
-   90 void olsa_reset() // hlavni RESET - provadi se po zapnuti
-   91 {
-   92 output_low(SDIN);
-   93 output_low(SCLK);
-   94 olsa_pulses(30); // reset radkoveho senzoru
-   95 output_high(SDIN);
-   96 olsa_pulses(10); // start bit - synchronizace
-   97 olsa_send(main_reset);
-   98 olsa_pulses(5);
-   99 olsa_send(set_mode_rg);
-   100 olsa_send(clear_mode_rg);
-   101 }
-   102  
-   103 //ZACHRANNE SENZORY
74 void read_blue_sensors() // cteni nouzovych senzoru 104 void read_blue_sensors() // cteni nouzovych senzoru
75 { 105 {
76 set_adc_channel(LINEL); // cti levy nouzovy senzor 106 set_adc_channel(LINEL); // cti levy nouzovy senzor
77 delay_us(10); 107 delay_us(10);
78 line_l=read_adc(); 108 line_l=read_adc();
Line 80... Line 110...
80 set_adc_channel(LINER); // cti pravy nouzovy senzor 110 set_adc_channel(LINER); // cti pravy nouzovy senzor
81 delay_us(10); 111 delay_us(10);
82 line_r=read_adc(); 112 line_r=read_adc();
83 } 113 }
84 114
85   -  
86   -  
87 //PIPAK 115 //PIPAK
88 void beep(int16 period,int16 length) 116 void beep(int16 period,int16 length)
89 { 117 {
90 int16 bp; //promenna pro nastaveni delky 118 int16 bp; //promenna pro nastaveni delky
91 119
Line 224... Line 252...
224 void main() 252 void main()
225 { 253 {
226 printf("POWER ON \n"); 254 printf("POWER ON \n");
227 // NASTAVENI > provede se pouze pri zapnuti 255 // NASTAVENI > provede se pouze pri zapnuti
228 setup_adc_ports(sAN0-sAN1-sAN2); 256 setup_adc_ports(sAN0-sAN1-sAN2);
229 setup_adc(ADC_CLOCK_INTERNAL); 257 setup_adc(ADC_CLOCK_INTERNAL); // interni hodniny pro AD prevodnik
230 setup_spi(SPI_SS_DISABLED); 258 setup_spi(SPI_SS_DISABLED);
231 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 259 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
232 setup_timer_1(T1_DISABLED); 260 setup_timer_1(T1_DISABLED);
233 setup_timer_2(T2_DIV_BY_16,255,1); //casovac pro PWM 261 setup_timer_2(T2_DIV_BY_16,255,1); // casovac pro PWM
234 setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2 262 setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2
235 setup_ccp2(CCP_PWM); // povolĂ­ PWM na pinu RC1 263 setup_ccp2(CCP_PWM); // povolĂ­ PWM na pinu RC1
236 setup_comparator(NC_NC_NC_NC); 264 setup_comparator(NC_NC_NC_NC);
237 setup_vref(FALSE); 265 setup_vref(FALSE);
238 output_high(LED1); // zhasne LED1 266 output_high(LED1); // zhasne LED1
239 output_high(LED2); // zhasne LED2 267 output_high(LED2); // zhasne LED2
240 l_motor_off(); // vypne oba motory 268 l_motor_off(); // vypne levy motor
241 r_motor_off(); // vypne oba motory 269 r_motor_off(); // vypne pravy motor
-   270 olsa_reset(); // reset logiky radkoveho senzoru
242 beep(500,200); // pipni pri startu 271 beep(500,200); // pipni pri startu
243 printf("OK! \n"); 272 printf("OK! \n");
244 delay_ms(500); 273 delay_ms(500);
245 printf("VYBRAT MOD... \n"); 274 printf("VYBRAT MOD... \n");
246 while(true) 275 while(true)
247 { 276 {
248 send(test); -  
249 } 277 }
250 } 278 }