Hallo, ich verwende den AT90CAN128 mit einem externen Quarz (8MHz). Mit Hilfe des Tutorials habe ich mir ein Programm geschrieben um Daten an die serielle Schnittstelle des PCs zu senden. Eigentlich funktioniert es wunderbar, allerdings nur 10 Sekunden lang. Die Ausgabe sieht dann immer so aus (jede Sekunde wird eine Zeile ausgegeben): initialising uart 1 Sekunde! 2 Sekunden! 3 Sekunden! 4 Sekunden! 5 Sekunden! 6 Sekunden! 7 Sekunden! 8 Sekunden! 9 Sekunden! •Õ¹‘þ¡ø 16 ÷en! ¹‘•¹…{s¹‘•¹þkundå Sek¹ Es dauert immer zwischen 8 und 10 Sekunden. Als wenn sich da irgend etwas an der Taktung "verstimmen" würde. Die Fuses habe ich mehrfach überprüft und sind richtig gesetzt. Weiß jemand womit das zusammenhängen kann? Vielen Dank schon mal.
Gast
#640697
Hängt zwischen PC und µC ein USB-RS232-Umsetzer?
nee ich glau mal minimal falsche baudrate, am anfang gehts noch und nach den 10 sekunden ist die abweichung zu groß.... uLuxx
Luxx .. wrote: > nee ich glau mal minimal falsche baudrate, am anfang gehts noch und nach > den 10 sekunden ist die abweichung zu groß.... Wie soll das gehen? Bei UART wird mit jedem Byte neu synchronisiert. Das ist also sicher keine Erklärung...
1) Stimmt Deine l2a-Routine? Wieso machst Du das nicht mit sprintf()??? 2) Wird Windows nicht überfahren? Mal niedrigere Baudrate probiert?
Gast
#640706
vielleicht wird Dein Quarz warm und er verändert dadurch seine Frequenz? Wenn die Übertragung beim Einschalten vlt. schon zusätzlich Grenzwertig läuft, kann soetwas schon einmal passieren. Gruß
Quarzler wrote: > vielleicht wird Dein Quarz warm und er verändert dadurch seine Frequenz? > Wenn die Übertragung beim Einschalten vlt. schon zusätzlich Grenzwertig > läuft, kann soetwas schon einmal passieren. > > Gruß So ein völliger Quatsch! Mache Deine message[4] mal größer. tab[] in l2a() sollte man "static" deklarieren...
Gast
#640731
Vielen Dank erstmal für eure Antworten. hier mal einige Zusätze meinerseits: - ja, ich verwende einen MAX232. - die l2a funktion hab ich hier aus der Codesammlung (die ist auch nicht das Problem, da das gleiche Verhalten auch bei Ausgaben ohne diese auftritt). - mit verschiedenen Datenraten (bis minimal 2400) hab ich's auch versucht -> gleiches Verhalten. Eine "leicht falsche" Datenrate kann ich mir auch nicht vorstellen, da jedes Frame ja neu synchronisiert wird. Dieses Verhalten ist auch aufgetreten, wenn ich nur die Funktion uart1_send_char verwendet habe. Ich glaucbe also nicht, dass der Fehler in l2a oder uart1_send_str steckt. Es könnte allerdings die Funktion uart1_send_char sein - aber die is doch so primitiv! Hat denn noch niemand dieses Problem gehabt??
Gast
#640805
Hallo Richard, sinkt evtl. die durch den Max erzeugte Spannung nach und nach ab? Otto
Gast
#640812
Alle Käse. Das ist zu 99,9999% ein Softwarefehler. Dein Programm verhaspelt sich. MAX232 und Quarz scheiden praktisch aus. MfG Falk
OK, damit kann ich leben. Aber kannst du mir auch sagen wo? Ich bin den Quelltext schon zig-fach durchgegangen und hab fast alles mit Beispielen aus dem Netz verifizieren können. So viel gibt es ja eigentlich nicht softwaretechnisch einzustellen. Ich bin im Moment ziemlich ratlos.
Gast
#640939
Hallo Richard,
wenn gar nichts hilft, kommentiere alles aus und sende zyklisch
irgendeinen Testsatz ("the quick brown fox..."), wenn es dann geht, hat
"falk" recht.
Gruss Otto
Mache Deinen message[4]; buffer mal größer!!! Mit l2a(2366,message); schreibst Du über den Buffer (\0 nicht vergessen). Ich kenne das Speicherlayout der AVRs nicht, aber solche Buffer- bzw. Stackoverruns können immer spassige Seiteneffekte haben...
Hi, vielen Dank für eure Hilfe. Hab die Lösung gefunden. Die Versorgungspannung des Netzteils war etwas zu niedrig. Die Beschriftung stimmte nicht mit der gemessenen Spannung überein.
Mach trotzdem den Buffer größer.
Gast
#641463
Genau, mach jetzt den verdammten Buffer größer oder du wirst vom Forum gesteinigt! :D
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.