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
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
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.
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
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.