Forum: Mikrocontroller und Digitale Elektronik USART und mein Code


von PowerProgrammer (Gast)


Lesenswert?

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!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

In Zeile 42 ist ein logischer Fehler.

von Otto (Gast)


Lesenswert?

Du hast wahrscheinlich die Fuses nicht gesetzt.....

Otto

von PowerProgrammer (Gast)


Lesenswert?

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

von 2921 (Gast)


Lesenswert?

Ich wuerd mit einem Scope mal messen was denn so rauskommt.

von PowerProgrammer (Gast)


Lesenswert?

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?

von Otto (Gast)


Lesenswert?

> 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

von PowerProgrammer (Gast)


Lesenswert?

Sehr komisch, ich habe ja ein fertiges Programm auf den ATMega gepackt, 
da klappte das mit dem internen DingOo
Aber probieren geht über studieren...

von PowerProgrammer (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Zeile 23 war's - schön ;-)

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
Noch kein Account? Hier anmelden.