Hallo! Ich möchte ein bisschen was über den USART meines ATmega16 senden und am PC anzeigen lassen. Dazu habe ich ein Programm in C geschrieben, dass ca. alle 500 ms ein Zeichen senden soll. Aber ankommen tut am PC etwas anderes, da steht dann diese eine Zeichen, dass immer kommt, wenn er das Zeichen nicht kennt. Ich habe keine Ahnung, woran es liegen könnte, Baudrate und so ist alles eingestellt. Ich benutze den Code, der überall in diversen Tuts samt des Datenblattes steht. Hatte jemand schonmal ein ähnliches Problem? Was mache ich falsch? (Es muss übrigens an meiner Software liegen, ich habe ein anderes Programm, das läuft einwandfrei, dass aber nicht von mir ist und auch nicht in C) Vielen Dank schon mal im Voraus!
@stefb: Lustig, pech nur, dass es keine Zeile 42 gibt;) http://rafb.net/p/vbKsup34.html <-- da wäre der Code! @Otto: Wie meinst du das denn? Die CPU-Geschwindigkeit falsch? Ist nicht, ist Werkseinstellung mit 1 MHz Intern.
Scope? Ist das ne Abkürzung für Oszilloskop? Würde ich gerne machen, aber ich besitze keins. Ich bin ein armer Schüler, so dass ich mir nichtmal nen gescheiten Programmer leisten kann und ein Billig-Eigenbau-Teil nutzen muss;) Jedenfalls habe ich keine Idee, wie ich die Daten sonst auslesen kann:( Was kann ich weiterhin tuen?
> Otto: Wie meinst du das denn? > Die CPU-Geschwindigkeit falsch? Ist > nicht, ist Werkseinstellung mit 1 MHz Intern. lies bitte das Tutorium mit dem internen Oszillator kannst Du bei der UART keinen Blumentopf gewinnen. Du brauchst einen Quarz und musst auf ext. Oszillator umstellen. Gruss Otto
Sehr komisch, ich habe ja ein fertiges Programm auf den ATMega gepackt, da klappte das mit dem internen DingOo Aber probieren geht über studieren...
Der |Jan| aus dem IRC-Chat hat den Fehler gefunden! Der Junge ist genial, er hat bemerkt, dass ich im 7-Bit-Modus bin und nicht im 8-Bit:D Die entsprechende Zeile muss lauten: UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); Vielen Dank, Leute!
Poste bitte deinen Code hier. Soooo gross ist der Code nun auch wieder nicht. UCSRC = (1<<URSEL)|(1<<UCSZ0); // Asynchron 8N1 Damit hast du aber nicht 8 Bit eingestellt, sondern nur 6 Bit. Kein Wunder, dass dein PC damit nichts anfangen kann. Solche Bitbelegungen immer im Datenblatt nachschlagen!
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.