Forum: Mikrocontroller und Digitale Elektronik Störung nach überscheidung von eingehenden und ausgehenden Daten via UART


von Anthony S. (anthony_02)


Lesenswert?

Hallo,

ich verwende die UART Schnittstelle des ATmega8.

in einer Endlosschleife in der main() wird jede Sekunde ein 37 Byte 
großes Datenpaket an einen Rechner geschickt.

Zudem wird ein "USART_RXC_vect" verwendet um eingehende Daten entgegen 
zu nehmen.

Treffen nun Daten ein während der ATmega8 versucht Daten raus zu 
schicken, kehrt er nicht mehr in die main() zurück.

-> Daten können weiter zum ATmega8 geschickt werden (Der Interrupt 
funktioniert weiterhin)

-> Daten werden aber nicht mehr vom ATmega8 versendet (Er macht nichts 
mehr was in der main() steht)


*Initialisierung des UART:
1
    UBRRH |= UBRR_VAL >> 8;
2
    UBRRL |= UBRR_VAL & 0xFF;
3
    
4
    UCSRB |= (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);


*Funktion zum senden von Daten in der Endlosschleife:
1
while(1)
2
{
3
    /* Wait for empty transmit buffer */
4
    while (!(UCSRA & (1 << UDRE)));
5
6
    /* Start transmittion */
7
    UDR = data;
8
9
    _delay_ms(1000);
10
}


*Interruptfunktion zum empfangen von Daten:
1
ISR(USART_RXC_vect)
2
{
3
    temp_data = UDR;
4
}

Hat jemand eine Idee woran das liegen könnte?

Wichtig bei der Lösung ist nur das die zu EMPFANGEN Daten sicher 
ankommen, die zu SENDENEN Daten können auch verloren gehen, da sie nach 
na sekunde erneut abgefragt werden

von Oliver J. (skriptkiddy)


Lesenswert?

Zeig mal deinen kompletten Code. Diese Fragmente sind nicht 
kompilierbar.

Gruß Oliver

von Udo S. (urschmitt)


Lesenswert?

Anthony Swofford schrieb:
> UDR = data;

Damit willst du 37 Byte auf einmal senden? Denn danach kommt deine 
1000ms Warteschleife.

von Anthony S. (anthony_02)


Angehängte Dateien:

Lesenswert?

War hier wohl doch etwas zu kurz dargestellt.

Hab in den Anhang jetzt das ganze Projekt gepackt.
Hoffe das es einigermaßen übersichtlich ist und das jemand noch ne 
Lösung hat.

Gruß
Philipp

von Karl H. (kbuchegg)


Lesenswert?

Anthony Swofford schrieb:
> War hier wohl doch etwas zu kurz dargestellt.

Das kannst du ganz leicht testen.

Nimm deine 4 Fragmente aus deinem ersten Post, schraub sie zu einem 
kompletten Programm zusammen und sieh nach, ob du immer noch das Problem 
hast.

Wenn nicht, ist es sehr wahrscheinlich, dass dein eigentliches Problem 
ganz woanders sitzt und du nur aufgrund der Symptome die UART 
beschuldigst.

von Anthony S. (anthony_02)


Lesenswert?

Da hast du recht,

daran hatte ich diesmal irgendwie nicht gedacht.

Das Problem war, das ich in dem Receive Interrupt des UART Werte über 
TWI abgefragt habe. Das scheint ihm nicht gefallen zu haben.

Hab das rausnehmen können, jetzt funktionierts wieder.

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.