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 |