Forum: Mikrocontroller und Digitale Elektronik UART wieder einmal


von Thomas K (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich benutze einen ATMega16 und programmiere mit AVR-GCC bzw. winavr.
Das Senden von einzelnen Zeichen funktioniert.
Im angehängten Programm soll "Test" and den PC geschickt werden.
Das erste Mal funktioniert auch super, doch dann wird nur noch "Te"
gesendet.

Was mache ich da falsch?


Danke,
Thomas K

von Rahul (Gast)


Lesenswert?

liegt vielleicht daran, dass Du aus einer Interrupt-Routine heraus eine
andere Routine aufrufst. Irgendwann wird das zu langsam...
Warum überhaupt so kompliziert mit Timer etc?
Es würde völlig reichen, in der Main UARTsendChar nach Belieben
aufzurufen.
Ich denke, Du hast ein Timing-Problem zwischen Timer und
Hauptprogramm.
Ausserdem solltest Du die Baudrate entweder als "#define" übergeben
oder feste Werte eintragen. Variablen sind erst erforderlich, wenn Du
die Baudrate per Software vorgeben willst (eher selten).
Unsauber ist dein Programm auch noch wegen Mehrfachzuweisungen
(UBRRL).
Gruß Rahul

von pauko (Gast)


Lesenswert?

in UARTsendchar ist ein kleiner semantischer fehler mit großer
auswirkung: ein logisches "&&" statt einem bitweisen "&"!

du musst den AND-operator ("&") anwenden, um UDRE im UCSRA zu
maskieren.

von Thomas K (Gast)


Lesenswert?

Also ein Timing Problem kann ich mir nicht vorstellen.
Die Zeit zwischen den Interrupts ist länger als eine Sekunde!

Außerdem hat der Interrupt nur den Zweck nicht gleich den COM-Port zu
überfluten. Ist also sowieso nur mal zum Testen

von Thomas K (Gast)


Lesenswert?

Danke Pauko! Das war's!!

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.