Gast
#138231
Hallo, ich verwende bei 16Mhz eine Baudrate von 38000, leider werden recht viele Fehler übertragen, wisst ihr, wie ich das ändern kann? Gruß Martin
|
Anzeige
|
Fehler bei RS232
Gast
#138231
Hallo, ich verwende bei 16Mhz eine Baudrate von 38000, leider werden recht viele Fehler übertragen, wisst ihr, wie ich das ändern kann? Gruß Martin
Gast
#138232
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
Gast
#138233
Woran erkennst du, daß Fehler übertragen werden? Die üblichen Terminalprogramme kennen z. B. nur 38400 Baud, klar das dann Fehler auftreten. Gruß Thorsten
Gast
#138234
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.
Gast
#138235
Aha, seltsam! Probier mal ein anderes Terminalprogramm. Hast du auch das Handshaking ausgeschaltet, vorausgesetzt du benutzt es nicht?
Gast
#138236
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?
Gast
#138237
@Martin fehlen dir Zeichen oder werden falsche Zeichen empfangen? In welcher Datenrichtung passieren die Fehler? Robert
Gast
#138238
Ich sende vom µC an den PC, und es werden teils Zeichen wie @ angezeigt.
Gast
#138239
Du willst eine Zeitmessung bauen? Erzähl mal mehr davon. Was für Zeiten willst du messen (rein interessehalber)? MH
Gast
#138240
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.
Gast
#138241
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.
Gast
#138242
Evtl. Parity, start / stop bit oder sowas??? 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
Gast
#138244
@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
Gast
#138245
Hast du ein Scope? Wenn ja, schau dir an, wie lange die Bits sind.
Gast
#138246
Hallo, also ein Oszi hab ich (leider) nicht. Mit 38400 Baud sende ich, da mit nem 16 MHZ nur diese Baudrate geht oder?
Gast
#138247
Auf welchen Wert hast du das UBRR-Register gesetzt? Es muß für 38400Baud@16MHz auf 25 stehen.
Gast
#138248
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
Gast
#138249
Clock steht auf 8MHz und oben erwähnest du 16MHz. MW
Gast
#138250
Hm, ich verwende im Moment noch Bascom. Und auf dem Rechner mit XP, der viel neuer ist geht es ja auch mit dem Programm. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|