UART wieder einmal

Gast #91628
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
Angehängte Dateien:
Gast #91629
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
Gast #91630
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.
Gast #91631
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

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