Forum: Mikrocontroller und Digitale Elektronik Fehler bei RS232


von Martin (Gast)


Lesenswert?

Hallo,
ich verwende bei 16Mhz eine Baudrate von 38000, leider werden recht
viele Fehler übertragen, wisst ihr, wie ich das ändern kann?
Gruß
Martin

von leo9 (Gast)


Lesenswert?

baudrate auf 38400 ändern, dadurch sinkt der Fehler von 1,2% auf 0,2%;
anderen Quarz verwenden oder die UART in SW nachbilden, dann sind fast
alle krummen baudraten möglich.

grüße leo9

von Thorsten (Gast)


Lesenswert?

Woran erkennst du, daß Fehler übertragen werden? Die üblichen
Terminalprogramme kennen z. B. nur 38400 Baud, klar das dann Fehler
auftreten.

Gruß
Thorsten

von Martin (Gast)


Lesenswert?

Oh, sry meinte 38400. Das komische ist, dass die Fehler bei einem Pc mit
Win 98 ME auftreten, den ich für die µC's verwende, da es mit XP grad
net geht. Wenn ich den µC jedoch mit dem XP-Pc verbinde, geht es.

von Thorsten (Gast)


Lesenswert?

Aha, seltsam! Probier mal ein anderes Terminalprogramm. Hast du auch das
Handshaking ausgeschaltet, vorausgesetzt du benutzt es nicht?

von Martin (Gast)


Lesenswert?

Hm,
also wenn ich auf dem Win 98 Pc mit einer Baudrate von 2400 bei 1 Mhz
sende klappt es, das dumme ist halt nur, dass ich ne Zeitmessung bauen
will und da schon gern 16Mhz hätte und net immer zum XP-PC umswitchen
will. An zu alter Hardware wird es bei einem PC mit 900 Mhz ja wohl
nicht liegen oder?

von Robert (Gast)


Lesenswert?

@Martin

fehlen dir Zeichen oder werden falsche Zeichen empfangen? In welcher
Datenrichtung passieren die Fehler?

Robert

von Martin (Gast)


Lesenswert?

Ich sende vom µC an den PC, und es werden teils Zeichen wie @ angezeigt.

von Max Headroom (Gast)


Lesenswert?

Du willst eine Zeitmessung bauen? Erzähl mal mehr davon. Was für Zeiten
willst du messen (rein interessehalber)?

MH

von Martin (Gast)


Lesenswert?

Die Zeitmessung soll für eine Carrerabahn herhalten, jetzt muss ich mal
sehn, wie ich das mach wenn das an dem einen PC nicht richtig klappt
mit 16 MHZ.

von Max Headroom (Gast)


Lesenswert?

Aha, Carrerabahn.

Zeitmessung hab' ich auch schon gemacht. Mit der PC-Kommunikation
hatte ich da nie Probleme. Das sollte eigentlich zu schaffen sein. Zum
Testen auf der PC-Seite schreibe ich mir immer ein VB Programm, dass
alles mitloggt. Aber warum muss denn die Baudrate so hoch sein? Ich
nehme fast immer 9600.

von Jens123 (Gast)


Lesenswert?

Evtl. Parity, start / stop bit oder sowas???

von Peter D. (peda)


Lesenswert?

Der Zeitmessung kann es doch herzlich egal sein, ob 16MHz oder sonstwas,
hauptsache es ist quarzstabil.

Falls Du es vergessen hast, der AVR kann auch rechnen, z.B. beliebige
Zählwerte umrechnen in 1/1000 Sekunden oder was Du willst (kannst es
aber auch den PC machen lassen).

Für übliche Baudraten ist ein Standardquarz z.B. 11,0592 oder
14,7456MHz gut geeignet.


Peter

von Robert (Gast)


Lesenswert?

@Martin,

wenn ein @ angezeigt wird, was für ein Zeichen hast du stattdessen
erwartet? Das deutet evtl. auf einen framing error hin. Will heissen
Baudrate ist ungenau oder Datenlänge, parity, stoppbits sind falsch
eingestellt.

Wenn ich eine Übertragung teste, fange ich immer damit an eine binäre 0
zu senden, und schau ob die jeweils auf der anderen Seite ankommt. Du
könntest z.B. auch vom PC am Anfang immer 0en senden und damit deine
Baudrate am AVR abgleichen. Dazu misst man die Zeit vom Start- zum
Stoppbit, teilt das ganze z.B. durch 9 oder 10 je nach Datenlänge und
hat die Bitlänge. Das ist universell und geht auch mit RC
Oszillatoren.

Robert

von Thorsten (Gast)


Lesenswert?

Hast du ein Scope? Wenn ja, schau dir an, wie lange die Bits sind.

von Martin (Gast)


Lesenswert?

Hallo,
also ein Oszi hab ich (leider) nicht. Mit 38400 Baud sende ich, da mit
nem 16 MHZ nur diese Baudrate geht oder?

von Thorsten (Gast)


Lesenswert?

Auf welchen Wert hast du das UBRR-Register gesetzt? Es muß für
38400Baud@16MHz auf 25 stehen.

von Jens123 (Gast)


Lesenswert?

Hallo, cih habe bisher Übertragungsraten zwichen 9600 und 19200
getestet. Bei einem Quarz mit 8MHz und RC Oszilator von 4 / 8 MHz

in asm und c war es nie ein problem

versuch evtl. mal einen anderen Terminal
der von Br@y ist sehr gut klein fein genau ;)

zumindest besser, als Hyperterminal

bei ASM Habe ich die werte so defniert:
.equ sramstart = 0x0060
.equ CLOCK = 8000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

        ; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp

        sbi UCSRB, RXCIE                  ; Interrupt bei Empfang
        sbi UCSRB, RXEN                   ; RX (Empfang) aktivieren
     sbi UCSRB, TXEN                    ; TX aktivieren

in dieser Art sollte es auch in C kein thema sein
Peter Fluery hat eine gute lib dazu in c geschrieben

Gruss Jens

von Michael Wilhelm (Gast)


Lesenswert?

Clock steht auf 8MHz und oben erwähnest du 16MHz.
MW

von Martin (Gast)


Lesenswert?

Hm, ich verwende im Moment noch Bascom. Und auf dem Rechner mit XP, der
viel neuer ist geht es ja auch mit dem Programm.

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.