Hallo,
ich hab ein ganz komisches problem. der Code unten funktioniert ab und
zu aber nicht immer. ich hab ein screenshot von der uebertragung im
anhang. Es wird 0xDDDD gesendet. danach eine Zahl wieviele Pakete meines
Structs folgen. die pakete sollten immer folgende Form haben:
0xAABBCC
manchmal klappt, manchmal nicht. und ich find den fehler nicht.
WinAVR 20070122, AVRSTUDIO 4.13Build528
wenn ich folgende Zeile
1 | SPI_data[SPI_i].ADC_value = 0xAA; // <= ist nur ein test
|
durch
1 | SPI_data[SPI_i].ADC_value = data2[i]; //<= so sollte es sein
|
ersetze, dann kommen nur noch 0x00 !?!?!???
bitte um hilfe...
gruss
Patrick
1 | typedef struct {
|
2 | uint8_t x_coord;
|
3 | uint8_t y_coord;
|
4 | uint8_t ADC_value;
|
5 | } SPI_data_type;
|
6 |
|
7 | uint8_t SPI_packets_to_send;
|
8 | uint8_t SPI_i;
|
9 |
|
10 | SPI_data_type SPI_data[16];
|
11 | SPI_data_type test;
|
12 |
|
13 |
|
14 | /*********
|
15 | main
|
16 | *********/
|
17 |
|
18 | int main(){
|
19 | sei();
|
20 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
21 |
|
22 | while(1) {
|
23 | ADC_8Channels(data1_p); //fuellen des arrays #1
|
24 |
|
25 | ADC_8Channels2(data2_p); //fuellen des arrays #2
|
26 |
|
27 | SPI_i = 0;
|
28 |
|
29 | test.ADC_value = 0xAB;
|
30 | test.x_coord = 0xCD;
|
31 | test.y_coord = 0xEF; // das hier klappt wunderbar
|
32 |
|
33 |
|
34 | for (i=0; i<8; i++){
|
35 | if (data2[i]<ADC_threshold) {
|
36 | SPI_data[SPI_i].ADC_value = 0xAA; //data2[i];
|
37 | SPI_data[SPI_i].x_coord = 0xBB; //def_coord_x + i;
|
38 | SPI_data[SPI_i].y_coord = 0xCC; //def_coord_y + 1;
|
39 | SPI_i++;
|
40 | }
|
41 | }
|
42 |
|
43 | SPI_packets_to_send=SPI_i;
|
44 |
|
45 | _delay_ms(200);
|
46 | uart_putc(0xDD); //damit ich weiss wann es los geht
|
47 | uart_putc(0xDD);
|
48 | uart_putc(SPI_packets_to_send); //wieviele pakete a 3 byte werden geschickt.
|
49 |
|
50 | for (i=0; i<SPI_packets_to_send; i++){ // dies ausgabe klappt ab und zu aber nicht immer
|
51 | uart_putc(SPI_data[SPI_i].ADC_value);
|
52 | _delay_ms(200);
|
53 | uart_putc(SPI_data[SPI_i].x_coord);
|
54 | uart_putc(SPI_data[SPI_i].y_coord);
|
55 | _delay_ms(200);
|
56 | }
|
57 | uart_putc(test.ADC_value); //diese ausgabe klappt wunderbar
|
58 | uart_putc(test.x_coord);
|
59 | uart_putc(test.y_coord);
|
60 | }
|
61 | }
|