UART receive data

#826986
Lesenswert?

Hallo ihr,

kann mir mal einer helfen bei der UART programmierung. (AT90S2313)
ich möchte mit dem UART von einem anderen avr daten empfangen.
Diese sollen per interrupt, ausgewertet werden.
Nur leider springt der processor die int routine nicht an.
im Anhang habe ich mein testbeispiel.
Das transmitt über den UART funktioniert, warum das receive nicht.
Die eingehenden Daten am processor sehe ich an einem logik analyzer.
Was ist in der register programmierung des UART falsch.



Gruss W.G
Angehängte Dateien:
Gast #826994
Lesenswert?

Der Transmit Interrupt wird genau einmal ausgelöst, da Du nur vor der 
while-Schleife das Datenregister beschreibst.
Da Du die Funktion des Empfangens mit Port B feststellen willst, 
solltest Du einmal versuchen Value als volatile zu deklarieren. Sonst 
könnte der Compiler die Variable wegoptimieren.

Gruß Matthias
#827002
Lesenswert?

Danke für den tip

aber das senden in dem Beispiel ist nur zum test. die receive daten
bekomme ich wo anders her, von einem anderen processor (board).
Stream liegt an pd0 an (sehe ich am Logic analyzer). das sende byte sehe 
ich an des LED des STK200.
es muesste doch wenn das empfangen funtioniert irgend was anderes
als die 15 vom senden an port B zu sehen sein.


W.G.
#827015
Lesenswert?

habe ich gemacht ohne erfolg.
frage: die UART Programierung ist im prinzip o.K. ?
ich sehe an pin 2 des 2313 die impulse.
sie werden von einem Mega8515 mit baud 9600 erzeugt.
wenn der UART ein irgenwie geartetes Startbit bekommt und danach nur 
noch 1 muss er doch irgendwann in die int routime springen oder ??? !!!

w.g.
Gast #827021
Lesenswert?

Vielleicht ist die Baudrate falsch eingestellt. Ich kenn mich jetzt dem 
Controller nicht aus, aber schau doch mal nach, ob der Controller genau 
mit der Frequenz läuft für die Du die Baudrate eingestellt hast.

Gruß Matthias
#827044
Lesenswert?

also der 8515 ist auf einem STK500 board und der 2313 auf einem STK200
board. mit den orginal internen quarzen der boards.
habe wirklich die werte für ubrr aus den Atmel unterlagen
genommen.
Meiner Messung mit dem LA habe ich einen unterschied von 1 us.
mueste doch noch gehen.
werde mal die Werte der UBRR register variieren. vielleicht bringt das 
was.

W.G.
Gast #827055
Lesenswert?

Hi

Eine Datenübertragung mit dem Oszillator vom STK500 kannst du knicken. 
die Genauigkeit reicht um eine Led Blinken zu lassen, mehr aber auch 
nicht.
Der UART-Interrupt wird erst ausgelöst wenn ein Datenbyte incl. Start- 
und Stopbit vollständig empfangen wurde.
Zum Testen würde es reichen beide µC mit einem Quarz gleichen Wertes zu 
betreiben. Die absolute Baudrate ist nicht so wichtig, nur die muss bei 
beiden Teilen gleich sein.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren