Hallo Ich will mit einem mega8 (8Mhz) und MAX232 eine Baudrate von 5Bd (!) nutzen. Bei einigen Versuchen mit dem Windows Terminalprogi bin ich aber nur bis runter zu 150Bd gekommen. Bei 110 kommt nur noch Müll an (niedriger geht das Terminalprogramm eh nicht). Ich denke, 5Bd wird dann auch nicht klappen. Liegt das am µC oder am PC? Was kann da falsch sein und gibt es eine Lösung? Danke.
Warum so eine kleine Baudrate? Ich sehe darin keinen Sinn so eine kleine Baudrate. Gruss Weihnachtsmann
@Weihnachtsmann Naja, entschuldige, aber ob DU darin einen Sinn siehst, interessiert MICH herzlich wenig.
Ob sich jetzt noch jemand findet, der seinerseits in einer konstruktiven Antwort Sinn sieht?
Die niedrigste Baudrate für den Atmega-8 mit 8Mhz im asynchronen Modus ist 122 Baud. Das Baudratenregister ist nur 12 Bit breit, da kannst du also max. 4096-1 eintragen. Im synchronen Modus kannst du den USART extern takten. (XCK-Eingang) Dann kannst du mit der Baudrate im Prinzip beliebig niedrig werden. Mfg Heinz
und wenn er den mega 8 mit 1Mhz taktet? (Keine Ahnung ob das praktisch geht, bei mega128 geht es jedenfalls) Dein Problem ist aber, dass Du mit einem Max 232 die Pegelwandlung für die Schnittstelle zum PC vornimmst und das geht bei 300bd schon an die grenzen der Lesbarkeit, weil die Kondensatoren, die die Spannung für die PC-Seite erzeugen nicht so lange halten. Schmeiß den 232 raus und ersetze ihn durch 2 optokoppler. Für die seite von Mega8 zum Pc genügt es den transistor des OK zwischen DTR und RXT zu schalten und die Diode hängst Du an den tx-Port des Mega 128. dann kannst Du auch 1baud übertragen, wenn Du ein Terminal-Prog findest, das das kann.
Über den Sinn oder Unsinn solcher extrem niedrigen Datenraten kann man natürlich geteilten Meinung sein, 200 ms pro Bit. Aber es war ja auch nicht von der vorgegebenen Nutzung des Hardware UART die Rede. Per Software UART ist das Problem mit Sicherheit lösbar ;)
> dann kannst Du auch 1baud > übertragen, wenn Du ein Terminal-Prog findest, das das kann. Das würde mich sehr wundern, wenn die Begrenzung am "Terminal-Prog" liegt. Ich denke sie legt eher in der PC-Hardware. Denn welches "Terminal-Prog" benutzt denn nicht die offiziellen WinAPI-Funktionen zur Kommunikation? Wenn man mit den WinAPI-Funktionen 1 Baud festlegen möchte und die das nicht akzeptieren, liegt's nicht am "Terminal-Prog". Allerdings bin ich der Meinung, dass Florian so eine Antwort gar nicht mehr verdient hat, nach seinem Ausbruch im dritten Posting. @Florian: Überleg dir bitte vorher, wer hier hilft: 1) Bezahlte Support-Fachleute mit erzwungenem, immer aufgesetzten Lächeln, die man alles fragen kann. 2) Elektronik-Interessierte und Profis, die in ihrer Freizeit kostenlos anderen Leuten mit ihrem Wissen helfen möchten. Und dann überleg dir, ob solche Postings wie dein drittes wirklich nötig sind.
Ach so, wenn ich eine vernünftige Frage stelle und dann eine schwachsinnige Gegenfrage erhalte, die nichts mit der Frage zu tun hat, bin ich der böse Bube? Nein danke! Dann verzichte ich lieber auf Antworten diser "Fachleute", die vermutlich eh nicht die eigentliche Frage beantworten können, denn sonst würden sie ja nicht ihre Unwissenheit mit einem Statement überspielen müssen, nach dem sie keiner gefragt hat. Wie wäre es mit folgendem Dialog: F: "Wie kann ich meinen Aschenbecher im Auto leeren?" A: "Kauf Dir doch ein neues Auto. Alles andere ist unfug, denn ich mach das so und was ich mache, ist schlau." Aber hier im Forum (und in anderen) findet man leider oft solche Diskussionen, die nicht zum Thema beitragen und die Sache nur aufblähen. Womit wir zur Antwort auf Deine Frage kämen: Ja, mein Posting war nötig, aber das von Weihnachtsmann nicht. P.S.: Danke an diejenigen, die sich (trotzdem) noch fachlich äußern. Mal sehen, wie ich damit weiterkomme.
@Florian Statt Zeit und inneren Frust damit zu verschwenden solche Prologe zu schreiben ignoriere solche Postings einfach. Sich in ein Problem reinzudenken und die Frage zu verstehen, ist nicht jedermans Sache in diesem Forum und Du tust weder Dir noch sonst jemandem einen Gefallen damit. @Weihnachtsmann. Es gibt fertige Industriemodule ect. die mit Datenraten von 300 / 150 und sogar 75 Baud arbeiten. Als Beispiel seien hier mal dcf77-Uhren genannt. Also Sinn oder nicht Sinn ist hier nicht die Frage.
Was ist falsch daran, Interesse am Hintergrund der Problemstellung zu zeigen? Nur allzuoft denkt man sich als Anfänger Dinge aus, welche in ihrer Realisierung z.T. sehr kompliziert werden können. Schildert man einem "Erfahrenen" dann den Einsatzzweck, so kann dieser nicht selten mit Alternativlösungen aufwarten. Diese können wesentlich produktiver als die eigentliche Idee sein. Wie dem auch sei: Dein Ziel wirst du auf direktem Weg nicht erreichen. Selbst wenn ich ein DCF77-Modul an den PC hängen wollte, müsste ich noch eine Logik dazwischen schalten.
Es macht schon Sinn, über den Sinn einer Frage nachzudenken. Z.B. ob die Entwickler der Hardware es für sinnvoll erachtet haben könnten und es unterstützen oder nicht. Bei den ersten AVRs konnte man nicht mal mehr 1200 Baud erzeugen, da nur ein 8-Bit Teiler verwendet wurde: 8MHz 16 256 = 1953 Baud Die neueren AVRs können bei maximalem CPU-Takt bis herunter zu: 20MHz 16 4096 = 305 Baud Da bleibt Dir also nur die Software-UART übrig. Und man bricht sich auch überhaupt nichts ab, wenn man bei sehr ungewöhnlichen Fragen etwas näher erläutert, worum es geht. Oftmals beruhen ungewönliche Fragen nämlich auf Mißverständnissen. Peter
@Florian Ich wollte dir nur helfen da du aber nicht im stande bist eine anständige Antwort zu geben musst du dich nicht verwundern wenn du solche Antworten erhältst auch musst du dich nune nicht der als Opfer darstellen.
Die im PC verwendete serielle Schnittstelle ist kompatibel zum "guten alten" 16550(8250 und verwendet einen 1.8432-MHz-Takt für die Baudratenerzeugung. Dieser wird durch einen 1:16-Prescaler gejagt und kann dann durch einen 16-Bit-Wert geteilt werden, um langsamere Baudraten als 115200 (Teiler = 1) zu erzeugen. Für 50 Baud beträgt der Teiler demnach 2304; aufgrund des 16-Bit-Baudratenteilers sind also noch deutlich langsamere Baudraten möglich. Der Windows-Devicetreiber müsste aus der übergebenen Baudrate den entsprechenden Wert für die Register DLL und DLM (Divisor Latch LSB & MSB) des 16550/8250 berechnen. Ob er das tut, sollte sich mit dem unter http://www.mikrocontroller.net/forum/read-8-155472.html#new geposteten Terminalprogramm überprüfen lassen, da das die Eingabe beliebiger Baudraten zulässt.
Nicht nur der AVR, auch das Gegenstück benötigt solch niedrige Baudraten jenseits der Norm. Früher nutze man 50/75 Baud und eben RTS/CTS z.B. bei mechanischen Fernschreiber (z.B. Wagenrücklauf). 5 Baud in der geforderten Form gabs also noch nie in der V24 Geschichte, selbst in Zusammenarbeit mit langsamer Mechanik. Die Frage ist also mehr als berechtigt.
Tja, der Unterschied zwischen einer Frage aus Interesse an der Materie und der Behauptung "sinnlos" sollte auch für den sprachlichen Laien differenzierbar sein. Auf "Hey, interessante Frage. Keine Ahnung, aber wofür braucht man denn so was? Hört sich nach einem interessanten Thema an, mal so außerhalb der üblichen 'Gepflogenheiten' zu arbeiten." Hätte ich sofort gerne mit der URL http://www.hex.co.za/vaginfo/index.html geantwortet. Aber "Ich sehe darin keinen Sinn" ist ziemlich egozentrisch und spricht nicht für die technische Weitsicht desjenigen. Nicht nur "früher" und "gab's noch nie in V24" scheint da nicht so angebracht zu sein. OK, VAG ist sicher nicht immer auf dem neusten Stand, aber anscheinend ist es ja wohl mehr, als nur unüblich, wenn's dafür sogar einen Standard gibt, reichlich unmechanisch und macht vielleicht doch Sinn. ;-)
Ich habe geschrieben: Warum so eine kleine Baudrate? Ich sehe darin keinen Sinn so eine kleine Baudrate. Da ich auch eine Frage gestellt habe, da es für mich "Sinnlos" ist könnte man dies mit einem gewissen Anstand beantworten. Da ich nie behaupte dass ich alles weiss lasse ich mich eines besseren belehren. Aber diese Baudrate ist unter normalen Bedingungen "Sinnlos". Was in deinem Fall nicht so ist. Aber es scheint dass dein Anstand noch nicht über den Standkasten hinaus gekommen ist.
@Florian: Einerseits war das Statment von Weihnachtsmann "...sinnlos..." fachlich nicht qualifiziert und leicht im Ton vergriffen. Andererseits ist die darauf von Dir folgende Antwort fachlich sehr qualifiziert aber fast noch weiter im Ton daneben! Selbst wenn Du nicht die Absicht hast, zu veröffentlichen, wozu du etwas bestimmtes brauchst (was ansich nichts verwerfliches ist), hättest Du den guten Weihnachtsmann höflicher darauf hinweisen können. Gruß, Michael
Hallo zusammen, Um ganz ehrlich zu sein habe ich selbst noch nie die V.24/V.28, RS232E, DIN66020 usw. in den Händen gehalten. Somit weiss ich nicht, ob es überhaupt eine festlegung für die niedrigste Baudrate gibt. Wenn man asynchrone Datenübertragung benutzt ist es allerdings ziemlich egal.
Mein Programm, zu dem Rufus oben schon den Link gepostet hat ( http://www.der-hammer.info/terminal/index.htm ) kommt problemlos mit solchen niedrigen Baudraten zurecht. Bestätigt wurden mir 25baud aber auch niedrigere sollten Funktioneren. Die Windows API akzeptiert Baudraten bis runter zu einem baud ohne Fehlermeldung! Nur die meisten Terminal Programme streuben sich oft gegen so niedrige Einstellungen. Probier das einfach mal damit aus
@Tobi Kann man auch höhere Baudraten als 115200Baud einstellen ? Bzw. liefert die API eine brauchbare Rückmeldung, ob die eingegebene Baudrate unterstützt wird ?
http://www.hex.co.za/vaginfo/index.html @Florian, also, die 5 Baud inialisiert nur. Man kann dabei andere Baudraten einstellen. Die ganze Frage nach 5 Baud Kommunikation ist also daneben.
Man kann auch höhere Baudraten als 115200 Problemlos einstellen. Eine Fehlerüberprüfung kann man z.b durch ein erneutes Auslesen und vergleichen nach dem Schreiben machen. So mach ich es bei meinem Program
>>Die Windows API akzeptiert Baudraten bis runter zu einem baud ohne Fehlermeldung! Nur die meisten Terminal Programme streuben sich oft gegen so niedrige Einstellungen. Sicher? Tut sie nur so oder macht sie das auch? Ich habe mit BrayTerm auch schon "unrunde" Baudraten (76k...) eingestellt, der Transfer lief dann aber mit der nächsten gängigen Baudrate (56k oder so). Wenn man auf zwei Rechnern eine unübliche Baudrate einstellt und der Transfer dann auf der naheliegenden gängigen läuft, merkt man das nicht mal, da ja beide Rechner den Fehler machen. Am AVR dürfte das dann auffallen... Sven
Du hast auch recht :) Im unteren Bereich bis ca 100baud unterstützen meiner Erfahrung nach die meisten Controller in den PC's alle Baudraten. Dadrüber nur einige wenige gebräuchliche, halt die, die sich aus dem Teilungsverhältnis des internen Takts ergeben (siehe Rufus post). Wenn das Bray Terminal nicht vor ungültigen Baudraten warnt ist das schlecht. Mein Programm meldet so etwas, daher lässen sich damit auch problemlos die verfügbaren Baudraten seines PC's ohne Gegenstelle ausprobieren. Aber wie gesagt, bis ca 100baud werden alle Lückenlos unterstützt
5 Baud ist überhaupt kein Problem mit dem hier genannten HTerm. Läßt sich wunderbar am PC einstellen und der Controller reagiert genau nach Plan darauf. Bei jeder anderen Baudrate bleibt er stumm wie ein Fisch, so daß ich als gesichert ansehe, daß es sich wirklich um 5Bd handelt. Der atmega8 mit 8MHz Quarz kommt bei weitem nicht so weit herunter. 150Bd macht der noch ganz manierlich. Mit internen 1MHz Takt ging's weiter herunter bis etwa 50Bd. Läuft also wohl darauf, daß ich die 5Bd softwaremäßig umsetzen muß, denn 8Mhz sollte schon sein.
@Benedikt: "Kann man auch höhere Baudraten als 115200Baud einstellen ?" Einstellen ja, aber mit Standard-PC-Schnittstellen ist keine höhere Baudrate erzielbar (siehe Ausführung etwas weiter unten). Nur mit vom Standard abweichenden seriellen Schnittstellen, die mit einem eigenen Devicetreiber angesteuert werden, können höhere Baudraten erzielt werden. @Sven: "Sicher? Tut sie nur so oder macht sie das auch? Ich habe mit BrayTerm auch schon "unrunde" Baudraten (76k...) eingestellt, der Transfer lief dann aber mit der nächsten gängigen Baudrate (56k oder so)." Das geht auch nicht anders; die Ursache hierfür ist in der Hardware begründet. Die Standardschnittstelle (16550/8250) erzeugt ihre Baudraten aus einem Takt mit 1.8432 MHz, der noch durch einen 1:16-Prescaler geschickt wird. Mit einem Teiler von 1 ist so maximal eine Baudrate von 115200 erzielbar, die nächste Baudrate von 57600 (Teiler von 2) liegt etwas neben der eigentlich gewünschten Rate von 56000. Andere als die hier aufgelisteten Baudraten kann eine Standard-PC-Schnittstelle nicht erzeugen (nur noch langsamerere) Teiler Baudrate 1 115200 2 57600 3 38400 4 28800 5 23040 6 19200 7 16457 8 14400 9 12800 10 11520 11 10473 12 9600 13 8862 14 8229 15 7680 16 7200 17 6776 18 6400 naja, den Rest könnt Ihr euch auch selber ausrechnen.
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.