Forum: Mikrocontroller und Digitale Elektronik UART receive data


von Wolfgang G. (wgrimm55)


Angehängte Dateien:

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

von Matthias Kölling (Gast)


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

von Wolfgang G. (wgrimm55)


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.

von Matthias Kölling (Gast)


Lesenswert?

Dann gib doch mal nicht Value sondern z.B. 0xAA aus.

Gruß Matthias

von Wolfgang G. (wgrimm55)


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.

von Matthias Kölling (Gast)


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

von Wolfgang G. (wgrimm55)


Lesenswert?

ich habe die standard werte aus den Unterlagen
genommen der 8515 mit 3.6MhZ -> 23
den 2313 mit 4 MHz -> 25
Wenn im Programm nichts falsch ist, werde ich mal mit dem
Oszi die Daten des 8515 mit dem daten das 2313 vergleichen müssen.

gruss W.G.

von Wolfgang G. (wgrimm55)


Lesenswert?

also ich habe beim Senden (8515) eine low breite von 108 us
und beim senden des 2313 eine lowbreite von 107 us
muesste doch eigentlich gehen oder ??

von Wolfgang G. (wgrimm55)


Lesenswert?

habe nochmal die beiden boards auf massse verbindung geprüft, ist auch 
verbunden.
was nun jetzt bin ich am ende.
wer hat die goldene idee, such nähmlich schon seit tagen nach dem fehler 
??


w.G.

von Spess53 (Gast)


Lesenswert?

Hi

Wie sicher sind deine Quarzfrequenzen. 3,6Mhz liefert schon einen 
kritischen Baudratenfehler von 1,9%. Zusammen mit den 0,2% bei 4MHz 
könnte eine Kommunikation gestört sein.

MfG Spess

von Wolfgang G. (wgrimm55)


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.

von Spess53 (Gast)


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

von Wolfgang G. (wgrimm55)


Lesenswert?

Danke für den tipp,

ich dachte beide boards werden mit einem quarz gesteuert.
werde wohl mal auf exteren quarz für die boards umschalten muessen
muss aber dazu mir quarze besorgen


W.G.

von Spess53 (Gast)


Lesenswert?

Hi

Auf dem STK200 schon. Aber auf dem STK500 wird der (einstellbare) Takt 
von dem Controller auf dem Board (der Käfer bei den Sub-D-Buchsen) 
erzeugt.

MfG Spess

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.