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