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
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
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.
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.
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
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.
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 ??
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.
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.