Forum: Mikrocontroller und Digitale Elektronik uart sendet nicht immer richtig


von keineahnung (Gast)


Angehängte Dateien:

Lesenswert?

Irgendwie bekomme ich es nicht auf die Reihe einfache Zeichen über den 
Uart an den Computer zu senden..
In meinem Programm sollen einfach nur 2 zeichen gesendet werden die ich 
dann im Hyperterminal aufnehme, doch statt "MA" kommen andauernd andere 
Buchstaben, mal SXSXSX oder was auch immer. Die Baudrate würde ich nach 
meiner Recherche schonmal ausschließen, so wie ich das verstanden hab 
kommt dann ja nur Mist. Irgendwie kommt mir das so vor als wenn er 
einfach zu früh oder zu spät beginnt abzutasten, wenn ich das serielle 
kabel mal reinstecke und wieder rausziehe ist es ca alle 5 mal wieder 
richtig.. Das Fusebit für den externen oszillator hab ich mit der myavr 
software gesetzt (im übrigen funktioniert der uart mit dem testprogramm 
auch 100%ig) also gehe ich davon aus das der fehler in meinem quellcode 
liegt.. vielleicht kann mal jemand drüber schauen.. vielleicht hab ich 
auch einfach gerade ein brett vor dem kopf

von Igor M. (bastel-wastel)


Lesenswert?

Wo ist "F_CPU" definiert?
Die Übertragungsrate wird damit ja ausgerechnet.

Wenn du zwei Zeichen sendest und mehrere Zeichen ankommen, dann sieht 
das sehr nach Baudratenfehler aus. Hast du diesen mal von Hand 
ausgerechnet und mit dem Ergebnis verglichen, dass dir der Simulator 
ausspuckt?

PS: Die Variable "Zeichen" kannst du dir auch sparen. Schreib einfach:

USART_SENDEN('M');

von Hannes (Gast)


Lesenswert?

Du sendest einen endlosen Datenstrom. Da wird sich das Terminalprogramm 
evtl. nicht richtig synchronisieren. Mach mal nach den zwei chars eine 
kleine Pause.

von Matthias L. (Gast)


Lesenswert?

>doch statt "MA"

>Die Baudrate...kommt dann ja nur Mist.

Wie würdest du das denn bezeichnen:
>mal SXSXSX oder was auch immer

von keineahnung (Gast)


Lesenswert?

ja klar aber immerhin ist es ein gleichmässiger "mist" und alle paar 
male passt es ja auch wieder (wenn ich das kabel ziehe und wieder 
reinstecke) ich guck mal gerade wie fcpu definiert ist, hab ich im 
makefile gemacht

von Igor M. (bastel-wastel)


Lesenswert?

Du schreibst ein Zeichen in eine signed char Variable.
Diese übergibst du einer Funktion als unsigned char.
Gibt der Compiler keine Warunung aus, oder ist sowas nicht relevant?

von keineahnung (Gast)


Lesenswert?

fcpu ist 3686400

von keineahnung (Gast)


Lesenswert?

achso, ich setze 2 zeichen hintereinander @igor

von keineahnung (Gast)


Lesenswert?

beim kompilieren gibts keine fehlermeldungen.. ich nutze winavr

von Igor M. (bastel-wastel)


Lesenswert?

keineahnung wrote:
> achso, ich setze 2 zeichen hintereinander @igor

Ja und?

von keineahnung (Gast)


Lesenswert?

besten dank euch!! jetzt klappts, es war tatsächlich die pause die 
fehlte, jetzt läuft es einwandfrei

von Hannes (Gast)


Lesenswert?

sag ich doch...

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.