Hallo,
ich versuche schon eine Weile mehrere Byte per UART vom einem Funkboard
zu empfängen. Dabei handelt es sich um ein Startbyte das ignoriert wird
und 7 Datenbyte.
Ich initialisiere meine UART so auf Baud 9600.
1 | void uart_init(void)
|
2 | {
|
3 | UBRRH = 0x00;
|
4 | UBRRL = 0x40;
|
5 | UCSRB = (1<<RXEN)|(1<<RXCIE); // UART RX und RX Interrupt einschalten
|
6 | }
|
Mein Empfängsinterrupt sieht so aus:
1 | ISR(USART_RXC_vect)
|
2 | {
|
3 | akku=UDR;
|
4 | PORTD|=0b10000000;
|
5 | if(daten_counter==1)
|
6 | {wert_h=akku;}
|
7 | if(daten_counter==2)
|
8 | {wert_l=akku;}
|
9 | if(daten_counter==3)
|
10 | {stunden=akku;}
|
11 | if(daten_counter==4)
|
12 | {minuten=akku;}
|
13 | if(daten_counter==5)
|
14 | {tage=akku;}
|
15 | if(daten_counter==6)
|
16 | {monate=akku;}
|
17 | if(daten_counter==7)
|
18 | {jahre=akku;
|
19 | daten_counter=255;
|
20 | wert = ( (uint16_t)wert_h << 8 ) | wert_l;
|
21 | PORTD&=0b01111111;}
|
22 | daten_counter=daten_counter+1;
|
23 | }
|
Allerdings wird so immer nur 1 Byte empfängen! Kann es sein das der
Interrupt zu langsam ist? Mein Atmega läuft mit 10 MHz.
Gruß und Danke Michael