Guten Tag, ich versuche gerade mit einer sehr geringen Baudrate (~38) Daten von einem µC zum PC zu übertragen, da der Controller selber kein UART unterstützt, hab ich versucht, das in Assembler nachzubauen. Mit Logic messe ich eine Bitdauer von ca. 26ms, der Async Serial Analyzer erkennt die übertragene Zahl 11 bei einer Baudrate von 38, von daher ging ich davon aus, das Windows das auch so erkennen würde, allerdings zeigt mir RealTerm und mein C#-Program entweder 0 oder 240 an? Kann Windows mit so geringen Baudraten nicht umgehen?
:
Verschoben durch Moderator
38 Bd ist jawohl auch keine Standardbaudrate. Stell mal eine genormte Baudrate auf beiden Seiten ein.
Welchen UART nutzt du auf dem PC? Evtl. kann der die 38bit/s schon rein hardwaremäßig nicht. Der klassische Mainboard-UART sollte diese Bitrate zwar hinbekommen, da ist dann nur die Frage, ob sie auch vom Treiber unterstützt wird. Ein USB-Serial-Converter mit dem FT232R bspw. geht nur bis 183bit/s hinunter, da hilft dann auch der beste Treiber nichts.
Yalu X. schrieb: > Ein USB-Serial-Converter Ich benutze in der Tat einen USB-Serial Converter mit CH340 Chip, kann das zum Problem werden?
Gibt soetwas was sich 'Datenblatt' nennt. Mal googeln.Auf der ersten Seite steht mindestens 50bps.
Die kleinsten (mir bekannten) Standardbaudraten sind 110 und 300 bps, dabei sollte letztere eigentlich überall funktionieren.
Dumdi D. schrieb: > Gibt soetwas was sich 'Datenblatt' nennt. Mal googeln.Auf der ersten > Seite steht mindestens 50bps. Danke dir, jetzt klappts, hab die Taktfrequenz des Prozessors verdoppelt und bin nun bei 78 Baud.
S. R. schrieb: > Die kleinsten (mir bekannten) Standardbaudraten sind 110 und 300 bps, Fernschreiber mit 5-Bit Codierung hatten oft 50 und 75.
Wenn ich den von WCH für Linux zur Verfügung gestellten Treibercode richtig verstanden habe, ist die niedrigste Bitrate des CH340 6 Mbit/s / 2⁹ / (2⁸-1) ≈ 46 bit/s
A. K. schrieb: > Fernschreiber mit 5-Bit Codierung hatten oft 50 und 75. Die Standard-UART im PC, 8250 bzw. 16550, verwendet im Baudratengenerator einen Takt mit 1.8432 MHz, der durch einen Prescaler von 16 und dann durch das Baudratenteilerregister weiter heruntergeteilt wird. Dadurch ergibt sich die bekannte Maximalbaudrate von 115200 Baud, und jede andere durch ganzzahlige Teilung aus diesem Wert ableitbare Baudrate. Für 50 Baud beträgt der Baudratenteiler 2304, für 75 Baud 1536. Auch niedrigere Baudraten sind möglich. Da aber die Hardwarearchitektur der üblichen USB-UART-Bridges eine komplett andere Baudratenerzeugung vorsieht, muss man sich an das Datenblatt der verwendeten USB-UART-Bridge halten, sofern es denn eines gibt. Von den CHS-Uarts habe ich bislang nur vage aus dem chinesischen übersetzte Beschreibungen, aber keine ernstgemeinten Datenblätter gesehen.
Rufus Τ. F. schrieb: > Für 50 Baud beträgt der Baudratenteiler 2304, für 75 Baud 1536. Auch > niedrigere Baudraten sind möglich. Ich staune. DOS hat mir damals nichts langsamer als 110 Baud angeboten, daher dachte ich, das wäre das Minimum. :-)
S. R. schrieb: > Ich staune. DOS hat mir damals nichts langsamer als 110 Baud angeboten, DOS hat fast überhaupt nichts angeboten, was eine sinnvolle Nutzung der seriellen Schnittstellen erlaubt hätte (vermutlich wollte Microsoft, wie so oft, die User nicht unnötig verwirren :)). Deswegen hat praktisch jedes Programm, das seriell kommunizierte, direkt auf die UART-Hardware zugegriffen, was letztendlich auch nicht viel schwieriger war, als die komischen DOS-Software-Interrupts zu verwenden.
Weshalb ladbare Device-Driver für die Nutzung der UART aufkamen, etwa die FOSSIL Treiber. Was den Vorteil hatte, dass man die Programme durch Ersatz des Treibers auch für ISDN nutzen konnte.
S. R. schrieb: > Die kleinsten (mir bekannten) Standardbaudraten sind 110 und 300 bps, > dabei sollte letztere eigentlich überall funktionieren. Lange vorher waren 45.45, 50 und 75 Bd gebräuchlich - schneller war die Mechanik damals nicht ;-)
Max M. schrieb: > ich versuche gerade mit einer sehr geringen Baudrate (~38) Daten von > einem µC zum PC zu übertragen, da der Controller selber kein UART > unterstützt, hab ich versucht, das in Assembler nachzubauen. Warum so extrem langsam? Bei meinen I2C-Sniffer auf dem ATtiny85 erreiche ich problemlos mit der SW-UART 460800 Baud (Assembler) bzw. 115200 Baud (C).
Das ist nur die lausige BIOS-Unterstützung für die Ansteuerung der seriellen Schnittstelle, die eh' kein ernstgemeines Programm verwendet hat. Steuert man den Baustein selbst an, kann man seine Möglichkeiten auch ausnutzen.
Rufus Τ. F. schrieb: > Steuert man den Baustein selbst an, kann man seine Möglichkeiten > auch ausnutzen. Ich hab auch mal den 16550 bare metal über seine IO-Adressen programmiert. Und der Witz ist, daß Programm funktioniert heute noch in DOSbox unter W7/64Bit an einem USB-RS232 Umsetzer. Da war ich echt verblüfft.
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.