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 |
int 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 |
int 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 |
int clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00 |
- |
|
23 |
int test[8]={1,0,1,0,1,0,1,0,}; |
23 |
|
24 |
|
24 |
int1 left_offset[8]={0,0,0,0,0,0,1,0}; // offset leveho segmentu senzoru 0x40 |
25 |
int 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 |
26 |
int 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 |
27 |
int 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 |
28 |
int offset[8]={1,0,0,0,0,0,0,1}; // minus jedna - pouzit pro vsechny segmenty 0x81 |
28 |
|
29 |
|
29 |
int1 left_gain[8]={1,0,0,0,0,0,1,0}; // zisk leveho segmentu 0x41 |
30 |
int 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 |
31 |
int 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 |
32 |
int 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 |
33 |
int gain[8]={1,0,1,0,0,0,0,0}; // zisk = 5 - pouzit pro vsechny segmenty 0x5 |
33 |
|
34 |
|
34 |
int1 start_int[8]={0,0,0,1,0,0,0,0}; // zacatek integrace 0x08 |
35 |
int 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 |
36 |
int 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 |
37 |
int readout[8]={0,1,0,0,0,0,0,0}; // cteni senzoru 0x02 |
37 |
|
38 |
|
38 |
int8 olsa_lseg[51]={0}; // leva cast radky (pixely 0 - 50) |
39 |
int olsa_lseg[51]={0}; // leva cast radky (pixely 0 - 50) |
39 |
int8 olsa_rseg[51]={0}; // prava cast radky (pixely 51 - 101) |
40 |
int olsa_rseg[51]={0}; // prava cast radky (pixely 51 - 101) |
40 |
int8 *line_lp=&olsa_lseg; // ukazatel na levou cast radky |
41 |
int8 *line_lp=&olsa_lseg; // ukazatel na levou cast radky |
41 |
int8 *line_rp=&olsa_rseg; // ukazatel na pravou cast radky |
42 |
int8 *line_rp=&olsa_rseg; // ukazatel na pravou cast radky |
42 |
|
43 |
|
43 |
int8 pixel; // dec hodnota jednoho pixelu |
44 |
int8 pixel; // dec hodnota jednoho pixelu |
44 |
int1 bpixel[8]={0}; // bin hodnota jednoho pixelu |
45 |
int1 bpixel[8]={0}; // bin hodnota jednoho pixelu |
Line 73... |
Line 74... |
73 |
void olsa_pulses(int count) // vytvori impulzy pro ridici logiku |
74 |
void olsa_pulses(int count) // vytvori impulzy pro ridici logiku |
74 |
{ |
75 |
{ |
75 |
int8 ct; |
76 |
int8 ct; |
76 |
for(ct=0;ct<=count;ct++) |
77 |
for(ct=0;ct<=count;ct++) |
77 |
{ |
78 |
{ |
78 |
delay_us(1); // doba pro ustaleni |
- |
|
79 |
output_high(SCLK); |
79 |
output_high(SCLK); |
80 |
delay_us(1); // doba pro ustaleni |
- |
|
81 |
output_low(SCLK); |
80 |
output_low(SCLK); |
82 |
} |
81 |
} |
83 |
} |
82 |
} |
84 |
|
83 |
|
85 |
void olsa_pulse() // vytvori jeden impulz |
84 |
void olsa_pulse() // vytvori jeden impulz |
86 |
{ |
85 |
{ |
87 |
delay_us(1); // doba pro ustaleni |
- |
|
88 |
output_high(SCLK); |
86 |
output_high(SCLK); |
89 |
delay_us(1); // doba pro ustaleni |
- |
|
90 |
output_low(SCLK); |
87 |
output_low(SCLK); |
91 |
} |
88 |
} |
92 |
|
89 |
|
93 |
void olsa_send(int1 info[8]) // USART komunikace s modulem OLSA01A - poslani zpravy |
90 |
void olsa_send(int8 info[8]) // USART komunikace s modulem OLSA01A - poslani zpravy |
94 |
{ |
91 |
{ |
95 |
int8 ip; // ukazatel na pole s informaci |
92 |
int *ip; // ukazatel na pole s informaci |
96 |
int1 i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN |
93 |
int8 i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN |
97 |
|
- |
|
98 |
output_low(SDIN); // start bit |
94 |
output_low(SDIN); // start bit |
99 |
olsa_pulse(); |
95 |
olsa_pulse(); |
100 |
for(ip=0;ip<8;ip++) // predani informace - 8 bit, LSB prvni > MSB posledni |
96 |
for(ip=0;ip<8;ip++) // predani informace - 8 bit, LSB prvni > MSB posledni |
101 |
{ |
97 |
{ |
102 |
i=info[ip]; // ziskani hodnoty z pole |
98 |
i=info[ip]; // ziskani hodnoty z pole |
Line 398... |
Line 394... |
398 |
delay_ms(500); |
394 |
delay_ms(500); |
399 |
printf("VYBRAT MOD... \r\n"); |
395 |
printf("VYBRAT MOD... \r\n"); |
400 |
|
396 |
|
401 |
while(true) |
397 |
while(true) |
402 |
{ |
398 |
{ |
403 |
diagnostika(); |
399 |
olsa_send(test); |
404 |
} |
400 |
} |
405 |
} |
401 |
} |