Rev 808 Rev 812
Line 15... Line 15...
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   18  
19 // pro komunikaci s OLSA, prvni se posila LSB 19 // pro komunikaci s OLSA, prvni se posila LSB
20 int1 main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B 20 int1 main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B
21 int1 set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F 21 int1 set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F
22 int1 clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00 22 int1 clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00
23   23  
24 int1 left_offset[8]={0,0,0,0,0,0,1,0}; // offset leveho segmentu senzoru 0x40 24 int1 left_offset[8]={0,0,0,0,0,0,1,0}; // offset leveho segmentu senzoru 0x40
25 int1 mid_offset[8]={0,1,0,0,0,0,1,0}; // offset prostredniho segmentu senzoru 0x42 25 int1 mid_offset[8]={0,1,0,0,0,0,1,0}; // offset prostredniho segmentu senzoru 0x42
26 int1 right_offset[8]={0,0,1,0,0,0,1,0}; // offset praveho segmentu senzoru 0x44 26 int1 right_offset[8]={0,0,1,0,0,0,1,0}; // offset praveho segmentu senzoru 0x44
27 int1 offset[8]={1,0,0,0,0,0,0,1}; // minus jedna - pouzit pro vsechny segmenty 0x81 27 int1 offset[8]={1,0,0,0,0,0,0,1}; // minus jedna - pouzit pro vsechny segmenty 0x81
28   28  
29 int1 left_gain[8]={1,0,0,0,0,0,1,0}; // zisk leveho segmentu 0x41 29 int1 left_gain[8]={1,0,0,0,0,0,1,0}; // zisk leveho segmentu 0x41
30 int1 mid_gain[8]={1,1,0,0,0,0,1,0}; // zisk leveho segmentu 0x43 30 int1 mid_gain[8]={1,1,0,0,0,0,1,0}; // zisk leveho segmentu 0x43
31 int1 right_gain[8]={1,0,1,0,0,0,1,0}; // zisk leveho segmentu 0x45 31 int1 right_gain[8]={1,0,1,0,0,0,1,0}; // zisk leveho segmentu 0x45
32 int1 gain[8]={1,0,1,0,0,0,0,0}; // zisk = 5 - pouzit pro vsechny segmenty 0x5 32 int1 gain[8]={1,0,1,0,0,0,0,0}; // zisk = 5 - pouzit pro vsechny segmenty 0x5
33   33  
34 int1 start_int[8]={0,0,0,1,0,0,0,0}; // zacatek integrace 0x08 34 int1 start_int[8]={0,0,0,1,0,0,0,0}; // zacatek integrace 0x08
35 int1 stop_int[8]={0,0,0,0,1,0,0,0}; // konec integrace 0x10 35 int1 stop_int[8]={0,0,0,0,1,0,0,0}; // konec integrace 0x10
36 int1 readout[8]={0,1,0,0,0,0,0,0}; // cteni senzoru 0x02 36 int1 readout[8]={0,1,0,0,0,0,0,0}; // cteni senzoru 0x02
37   37  
38 int8 olsa_lseg[51]={0}; // leva cast radky (pixely 0 - 50) 38 int8 olsa_lseg[51]={0}; // leva cast radky (pixely 0 - 50)
39 int8 olsa_rseg[51]={0}; // prava cast radky (pixely 51 - 101) 39 int8 olsa_rseg[51]={0}; // prava cast radky (pixely 51 - 101)
40 int8 *line_lp=&olsa_lseg; // ukazatel na levou cast radky 40 int8 *line_lp=&olsa_lseg; // ukazatel na levou cast radky
41 int8 *line_rp=&olsa_rseg; // ukazatel na pravou cast radky 41 int8 *line_rp=&olsa_rseg; // ukazatel na pravou cast radky
-   42  
42 int8 pixel; // dec hodnota jednoho pixelu 43 int8 pixel; // dec hodnota jednoho pixelu
-   44 int1 bpixel[8]={0}; // bin hodnota jednoho pixelu
43 int8 rpx; // pocet prectenych pixelu 45 int8 rpx; // pocet prectenych pixelu
44 int8 rbit; 46 int8 rbit; // pocet prectenych bitu
-   47 int8 cbit; // pocet prevedenych pixelu
45   48  
46 //naraznik 49 //naraznik
47 #define BUMPL input(PIN_D6) 50 #define BUMPL input(PIN_D6)
48 #define BUMPR input(PIN_D7) 51 #define BUMPR input(PIN_D7)
49   52  
Line 146... Line 149...
146 olsa_pulses(22); 149 olsa_pulses(22);
147 olsa_send(stop_int); // konec integrace senzoru 150 olsa_send(stop_int); // konec integrace senzoru
148 olsa_pulses(5); 151 olsa_pulses(5);
149 } 152 }
150   153  
151 int1 bity[8] = { 0, 1, 1, 1, 0, 0, 1, 0 }; -  
152 int8 bajt; -  
153   -  
154 void bit_to_bajt() -  
155 { -  
156 int i; -  
157 -  
158 bajt = 0; -  
159 for (i = 0; i < 8; i++) -  
160 bajt |= bity[i] << i; -  
161 -  
162 printf("bajt: %x\n", bajt); -  
163 } -  
164   -  
165 void olsa_bit_save() // ukladani jednotlivych bitu pixelu 154 void olsa_bit_save() // ukladani jednotlivych bitu pixelu
166 { 155 {
167 t_bit_save: 156 t_bit_save:
168 if(SDOUT==0) // zacatek prenosu 157 if(SDOUT==0) // zacatek prenosu
169 { 158 {
170 do // prijimej zpravy 159 do // prijimej zpravy
171 { 160 {
-   161 if(SDOUT==1) // zapise do bitu 1
-   162 {
172 //program pro prijem 163 bpixel[rbit]=1;
-   164 }
-   165 else // zapise do bitu 0
-   166 {
-   167 bpixel[rbit]=0;
-   168 }
173 rbit++; // zapocita precteni bitu 0 - 7 169 rbit++; // zapocita precteni bitu 0 - 7
174 } 170 }
175 while(rbit==7); 171 while(rbit==7);
176 goto e_bit_save; // skoc na konec prenosu 172 goto e_bit_save; // skoc na konec prenosu
177 } 173 }
178 else // posli impulz a cekej na prenos 174 else // posli impulz a cekej na prenos
179 { 175 {
180 olsa_pulse(); 176 olsa_pulse();
181 goto t_bit_save; // skoci na zacatek prenosu, pokud SDOUT == 1 177 goto t_bit_save; // skoci na zacatek prenosu, pokud SDOUT == 1
182 } 178 }
183 e_bit_save: 179 e_bit_save:
184 olsa_pulse(); // posle impulz pro generovani stop bitu 180 olsa_pulse(); // posle impulz pro generovani stop bitu
185 } 181 }
186 182
187 void olsa_convert() 183 void olsa_convert() // prevede pole prijmutych bitu na pixel
188 { 184 {
-   185 pixel=0; // vynuluje pixel
-   186 for(cbit=0;cbit<8;cbit++)
-   187 {
-   188 pixel|=bpixel[cbit]<<cbit; // prevadi bity do pixelu
-   189 }
189 } 190 }
190   191  
191 void olsa_byte_save() // zapis pixelu do pole 192 void olsa_byte_save() // zapis pixelu do pole
192 { 193 {
193 if(rpx<=51) // leva polovina radky 194 if(rpx<=51) // leva polovina radky