Guten Tag, ich möchte mich ein wenig mit der USART Schnittstelle vertraut machen, und habe ein kleines Programm geschrieben das Zeichenketten an den PC senden soll. Der quellcode ist im Anhang. Ich habe 2 verschiedene Methoden ausrobiert, eine davon ist auskommentiert. Das programm scheint soweit auch zu funktionieren, der Controler sendet munter, jedoch kommt beim Hyperterminal nur Schrott an. Der interpretiert seltsame zeichen in die Daten. Im Program ist extra eine synchronisationszeit einprogrammiert, daran kann es eigentlich nicht liegen. Außerdem müsste sich der HypertTerminal spätestens nach einem Reset synchronisieren. Das Format ist standartmäßig auf 8 bit und 1 Stoppbit. Am UCSRC Register verstell ich eigentlich nichts, ich habe lediglich mal probiert ob das ganze im Synchronmodus funktioniert. Ich habe mit dem Osziloskop mal verschiedene Zeichen durchgemessen. Die Bitmuster entsprechen alle ihrem Wert und die Baudrate müsste auch stimmen. Beim Hyperterminal habe ich eigentlich auch alles richtig eingestellt ( 8 bit, keine Paritätsprüfung, 1 stoppbit, keine Flussteuerung ) Ich habe die Baudraten 2400 und 9600 ausprobiert, der Oszilator osziliert mit 3,686 MHz.
CKDIV8 noch gesetzt? Ansonsten wäre Quellcode(sic!) hilfreich.
Hopla, hab versehentlich die .aps datei angehängt anstadt die .asm Datei. Jetzt müssts aber die richtige sein. An CKDIV8 hab ich auch schon gedacht, der ist nicht gesetzt. Außerdem hab ich die Baudrate ja mit dem Osziloskop überprüft. Die müsste eigentlich stimmen. Ich benutze übrigens das STK500
Wenn die Gegenstelle etwas anderes empfängt als der Sender sendet, dann liegt das zu 99% praktisch immer daran, dass der µC nicht mit der Taktfrequenz arbeitet mit der der Programmierer rechnet. Das kann jetzt zb sein, weil der µC immer noch auf internen Oszillator steht und nicht auf externem Quarz. Programmier dir doch einfach mal eine Warteschleife, mit der du eine LED blinken lässt. Leg deine 3.irgendwas Mhz zugrunde und berechne das Ganze so, dass die LED 1 Sekunde an, 1 Sekunde aus ist. Und dann siehst du dir das Blinken an und entscheidest ob das Timing stimmen kann. Ob die Taktfrequenz aufs letzte Herz stimmt, kannst du damit natürlich nicht feststellen, aber den Unterschied zwischen 1Mhz und 3Mhz sieht man dann schon sehr deutlich :-)
Und wieder mal ein UART-Problem. Das 1002te. http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
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.