Hallo, ist mit dem Terminalprogramm HTerm eine Baudrate von 1M Baud möglich. Also der µC unterstüztz diese Baudrate. Und wie sieht es mit Windows aus? Kann es da zu Problemen kommen?
M_s schrieb: > Und wie sieht es mit Windows > aus? Kann es da zu Problemen kommen? Windows reicht es auch nur an den Treiber durch. Wenn der Treiber und die Hardware es kann. gibt es damit keine Probleme.
M_s schrieb: > Hallo, > > ist mit dem Terminalprogramm HTerm eine Baudrate von 1M Baud möglich. > Also der µC unterstüztz diese Baudrate. Und wie sieht es mit Windows > aus? Kann es da zu Problemen kommen? Hängt weniger von hterm oder von Windows ab, als mehr von deiner Hardware. Du lässt dich ja noch nicht mal dazu herab, zu erzählen ob es sich um eine direkte serielle Schnittstelle auf deinem Mainboard oder um einen USB-Seriell-Adapter handelt. Geschweige denn um welchen Chip, im letzteren Fall. Also was willst du eigentlich?
Cyblord -. schrieb: > Hängt weniger von hterm oder von Windows ab, als mehr von deiner > Hardware. Du lässt dich ja noch nicht mal dazu herab, zu erzählen ob es > sich um eine direkte serielle Schnittstelle auf deinem Mainboard oder um > einen USB-Seriell-Adapter handelt. Geschweige denn um welchen Chip, im > letzteren Fall. > Also was willst du eigentlich? Arduino Mega. Also ein ATmega 2560 und für den uart ein atmega8u2
Dann beschreib ich mal mein Problem ;) Ich schicke einen Datensatz vom Arduino Mega über die serielle Schnittstelle an einen Computer. Hierfür benutze ich das Terminalprogramm hTerm. Zuerst habe ich mir selber die theoretisch mögliche Übertragungsfrequenz für die Daten berechnet und diese dann mit der exakten Übertragungsrate der Messwerte verglichen. Bis 250 kBaud hat dies auch sehr gut funktioniert. Nur bei 1 Mbaud liegt die Übertragungsfrequenz deutlich unter der von mir theoretisch berechneten. Ich frage mich nun, woran dies liegen könnte, dass etwa die hälfte der Daten nicht übertragen wird.
M_s schrieb: > Cyblord -. schrieb: >> Hängt weniger von hterm oder von Windows ab, als mehr von deiner >> Hardware. Du lässt dich ja noch nicht mal dazu herab, zu erzählen ob es >> sich um eine direkte serielle Schnittstelle auf deinem Mainboard oder um >> einen USB-Seriell-Adapter handelt. Geschweige denn um welchen Chip, im >> letzteren Fall. >> Also was willst du eigentlich? > > Arduino Mega. > Also ein ATmega 2560 und für den uart ein atmega8u2 Na klar Arduino.... Das hängt wohl maßgeblich vom atmega8u2 ab. Was der kann? Frage den der das Board hergestellt bzw. verkauft hat. Ansonsten nimm doch mal Spaßeshalber einen USB-TTl Adapter mit FTDI oder CP2102 und auch CH340 Chip und teste damit ob die mit 1MBaud klar kommen.
M_s schrieb: > Zuerst habe ich mir selber die theoretisch mögliche Übertragungsfrequenz > für die Daten berechnet was muss man da rechnen?
Peter II schrieb: > was muss man da rechnen? Wie oft das Datenpaket pro Sekunde an den Computer übergeben wird.
Mikke schrieb: > Schau mal Hier: > > https://www.mikrocontroller.net/articles/AVR-Tutorial:_UART > > bei wichtiger Hinweis 2 Das hilft mir nicht weiter. Der Arduino arbeitet nicht mit dem interen RC-Oszillator. Auch der Fehler liegt unter einem Prozent.
Das heißt: Du schickst das vom Mega2560 an den Mega8u2 und schickst es dann vom Mega8u2 an den Rechner? Was sagt denn der Mega8u2 zum Thema "1MBaud"?
Draco schrieb: > Das heißt: Du schickst das vom Mega2560 an den Mega8u2 und > schickst es > dann vom Mega8u2 an den Rechner? > > Was sagt denn der Mega8u2 zum Thema "1MBaud"? Laut dem Datenblatt sollte er damit auch keine Probleme haben
M_s schrieb: > Laut dem Datenblatt sollte er damit auch keine Probleme haben Ja es kommt ja darauf an, wie und welche CDC auf dem Mega8u2 läuft. Die CDC laut AppNote? http://www.atmel.com/Images/doc7619.pdf ?
Draco schrieb: > Ja es kommt ja darauf an, wie und welche CDC auf dem Mega8u2 läuft. Die > CDC laut AppNote? http://www.atmel.com/Images/doc7619.pdf ? Okay, da habe ich mich nicht drum gekümmert. Das ist ja auf dem Arduino Boards schon erledigt worden. Kann ich das irgendwo nachschlagen und wenn ja worauf muss ich dann im Bezug auf meine Frage achten?
M_s schrieb: > Dann beschreib ich mal mein Problem ;) > Ich schicke einen Datensatz vom Arduino Mega über die serielle > Schnittstelle an einen Computer. Hierfür benutze ich das > Terminalprogramm hTerm. > > Zuerst habe ich mir selber die theoretisch mögliche Übertragungsfrequenz > für die Daten berechnet und diese dann mit der exakten Übertragungsrate > der Messwerte verglichen. Bis 250 kBaud hat dies auch sehr gut > funktioniert. Nur bei 1 Mbaud liegt die Übertragungsfrequenz deutlich > unter der von mir theoretisch berechneten. > > Ich frage mich nun, woran dies liegen könnte, dass etwa die hälfte der > Daten nicht übertragen wird. Hat vielleicht noch jemand eine Idee?
Hallo, welche Baudrate geht hängt ja von den Möglichkeiten des Baudratenteilers der Hardware (hier des 8u2) ab. Wenn du versuchst auf eine Baudrate zu konfigurieren die nicht möglich ist wird das Device die nächst (mögliche o. kleinere?) Baudrate einstellen. Was heißt überhaupt es kommt nur die Hälfte an? Wenn die Baudraten des 8u2 (vom PC konfiguriert) und des ATMega (von Deiner Software konfiguriert) nicht zusammenpassen kommt überhaupt nichts an! Sascha
Sascha W. schrieb: > Hallo, > > welche Baudrate geht hängt ja von den Möglichkeiten des Baudratenteilers > der Hardware (hier des 8u2) ab. Wenn du versuchst auf eine Baudrate zu > konfigurieren die nicht möglich ist wird das Device die nächst (mögliche > o. kleinere?) Baudrate einstellen. Also die Baudraten wurden auf 1M Baud gesetzt. Diese wird auch von beiden μC unterstüztz. > Was heißt überhaupt es kommt nur die Hälfte an? Das habe ich viellleicht ein bisschen unpassend formuliert. Also Theoretisch sollte mein Datenpaket 10k mal pro Sekunde übetragen werden. Tätsächlich wird es aber nur 5k mal pro Sekunde übertragen. Meine Berechnung für die theoretische Übertragungsrate passt aber, bei kleineren Baudraten ist diese nämlich aufgegangen.
M_s schrieb: > Sascha W. schrieb: >> Hallo, >> >> welche Baudrate geht hängt ja von den Möglichkeiten des Baudratenteilers >> der Hardware (hier des 8u2) ab. Wenn du versuchst auf eine Baudrate zu >> konfigurieren die nicht möglich ist wird das Device die nächst (mögliche >> o. kleinere?) Baudrate einstellen. > > Also die Baudraten wurden auf 1M Baud gesetzt. Diese wird auch von > beiden μC unterstüztz. Woher weißt du das? Kennst du das Programm im Mega8u? Nur weil er das KÖNNTE heißt das nicht dass das auch programmatisch so umgesetzt wurde.
Cyblord -. schrieb: > Woher weißt du das? Kennst du das Programm im Mega8u? Nur weil er das > KÖNNTE heißt das nicht dass das auch programmatisch so umgesetzt wurde. Aber wenn die Baudraten nicht zusammen passen, dann dürfte doch nichts ankommen.
M_s schrieb: > Aber wenn die Baudraten nicht zusammen passen, dann dürfte doch nichts > ankommen. Wenn die Baudraten nicht zusammenpassen kommt meist mittelschwer bis vollständig verunstalteter Datenmüll an. Die höchstwertigen Bits gehen zuerst kaputt. Wenn sie sehr weit auseinander liegen kann ein geübtes Auge beim Betrachten des Datenmülls erkennen ob zu hoch oder zu niedrig. Wenn beide AVRs auf dem Arduino mit der selben Taktfrequenz getaktet werden kann man auch vollkommen "krumme" Baudraten mit ungünstig kleinen Teilern verwenden weil dann in beiden Controllern am Ende dennoch die selbe krumme Baudrate generiert wird. Notfalls mal kurz das Oszi dranhängen und die tatsächlichen Baudraten ermitteln um Klarheit zu erlangen, das geht schneller als Kopfkratzen und Rätselraten.
:
Bearbeitet durch User
1M Baudrate sollte kein Problem sein. Ich habe auf einigen FPGA-Devboards den CP2102 oÄ, und da gab's keine Probleme mit HTerm. Schau Dir also mal die Übertragung per Oszi an.
M_s schrieb: > Also > Theoretisch sollte mein Datenpaket 10k mal pro Sekunde übetragen werden. > Tätsächlich wird es aber nur 5k mal pro Sekunde übertragen. Das deutet aber eher darauf hin, dass deine Software im ATmega2560 zu langsam ist. Wenn die Baudrate auf einer Seite der Übertragung falsch währe würden keine brachbaren Datenpakete ankommen.
:
Bearbeitet durch User
Christian M. schrieb: > Das deutet aber eher darauf hin, dass deine Software im ATmega2560 zu > langsam ist. Wenn die Baudrate auf einer Seite der Übertragung falsch > währe würden keine brachbaren Datenpakete ankommen. Für andere Baudraten klappt es aber... Und der Programmcode bleibt gleich. Nur bei der Baudrate von 1 Mbaud kommt's nicht hin.
Sigi schrieb: > 1M Baudrate sollte kein Problem sein. > > Ich habe auf einigen FPGA-Devboards > den CP2102 oÄ, und da gab's keine > Probleme mit HTerm. Schau Dir also > mal die Übertragung per Oszi an. Hier gehts aber nicht um nen CP2102 oder nen FTDI sondern um ein Mega8u2 als USB-UART Converter. M_s schrieb: > Für andere Baudraten klappt es aber... Und der Programmcode bleibt > gleich. Nur bei der Baudrate von 1 Mbaud kommt's nicht hin. Für höhere Taktraten funktioniert es?! Was damit gemeint ist: Bist du dir sicher das der Mega2560 überhaupt in der Lage ist, deine 10k Datenpakete so schnell zu verarbeiten und über die UART auszugeben?! Naja nichtsdestotrotz müsste er ja die 1MBaud raushauen. Das wäre aber nen UBBR von 0! Was macht dein Programm sonst noch so? Also explizit: welche Interrupts werden aufgerufen? Zeig mal nen Sourcecode her.
Dumme Zwischenfrage zu CDC. spielt die Baudrate überhaupt eine Rolle? Das ganze ist nur RS232 simuliert über USB. Die Taktrate von USB steht ja fest. Es wird ja nirgends wirklich die Bits mit der eingestellten Baudrate übertragen. Das ganze ist doch nur wichtig, wenn man ende in RS232 (Rx,TX) gewandelt wird. Hier werden doch aber die Daten direkt in den µC übertragen. Ich kennte zumindest viele Geräte, wo man jede beliebe Baudrate einstellen kann und diese arbeiten dann immer noch gleich. Ich hätte gedacht, die Baudrate wird nur der gegenstelle mitgeteilt, als Info, aber eine Auswirkung hat sie nicht wirklich.
Peter II schrieb: > spielt die Baudrate überhaupt eine Rolle? Das ganze ist nur RS232 > simuliert über USB Auf den Arduino Dingern hat es ein uC und ein USB zu UART Konverter (bei Arduino meistens ein zweiter uC oder ein Bauteil von FTDI). Diese kommunizieren per UART miteinander. Die Anbindung an den PC geschieht also nicht direkt über USB sondern über diesen Konverter.
Peter II schrieb: > Dumme Zwischenfrage zu CDC. > > spielt die Baudrate überhaupt eine Rolle? Das ganze ist nur RS232 > simuliert über USB. Die Taktrate von USB steht ja fest. Es wird ja > nirgends wirklich die Bits mit der eingestellten Baudrate übertragen. > Das ganze ist doch nur wichtig, wenn man ende in RS232 (Rx,TX) gewandelt > wird. Hier werden doch aber die Daten direkt in den µC übertragen. > > Ich kennte zumindest viele Geräte, wo man jede beliebe Baudrate > einstellen kann und diese arbeiten dann immer noch gleich. > > Ich hätte gedacht, die Baudrate wird nur der gegenstelle mitgeteilt, als > Info, aber eine Auswirkung hat sie nicht wirklich. Der Verlauf sieht grad folgendermaßen aus:
1 | Atmega2560 ---> Atmega8u2 ---> PC |
2 | UART CDC |
Der Schwachpunkt in der Kette ist der Mega8u2. Beziehungsweise, denke ich mal momentan, das der Mega2560 schlichtweg überlastet ist, und die Datenpakete garnicht alle rausbekommt (10.000 mal in der Sekunde) und die Übertragung einfach durch irgendeinen INT unterbrochen wird.
Draco schrieb: > Der Verlauf sieht grad folgendermaßen aus: > Atmega2560 ---> Atmega8u2 ---> PC ok, das erklärt das natürlich.
Hallo, 1 Mhz ist keine Standardbaudrate für ein Terminalprogramm. 921600bps kann man aber bei HTerm einstellen. Habe mit dem Atxmega und HTerm fehlerfrei 921600bps übertragen. //Atxmega32A4U -> FT2232H -> (PC) HTerm 0.8.1 Atxmega32A4U Takt: // 16Mhz Quarz * 3 PLL ist 48 Mhz Systemtakt F_CPU 48000000 liegt aber außerhalb der Spezifikation!
Morgen, Gerhard G. schrieb: > 1 Mhz ist keine Standardbaudrate für ein Terminalprogramm. > > 921600bps kann man aber bei HTerm einstellen. in HTerm kannst auch 1 MHz einstellen, einfach nicht die Auswahlbox nehmen, sonder per Hand dort eintragen was Du brauchst / willst, das geht. Ich habe einen normale mega mit 16 MHz und CP2102 (ich weiß um den dreht es sich hier nicht) mit glatt 500000bps am laufen, das geht problemlos und auch stabil, mit 1 Mbps nicht mehr. Auf einem Ardunio, mit Ardunio Framework..... ist das mit Sicherheit der Flaschenhals, da kommen einfach nicht genug Pakete mehr raus um die 1Mbps auch vollständig ausnutzen zu können... LG
Gerhard G. schrieb: > Hallo, > > 1 Mhz ist keine Standardbaudrate für ein Terminalprogramm. 1 MHz ist überhaupt keine Baudrate sondern eine Frequenz. Und sowohl mit hterm als auch mit heutigen USB Umsetzern kann man nahezu beliebige Baudraten einstellen. Man ist nicht auf vorgegebene Baudraten beschränkt. > > 921600bps kann man aber bei HTerm einstellen. > > Habe mit dem Atxmega und HTerm fehlerfrei 921600bps übertragen. Das habe ich mit 1 MBaud auch schon gemacht. Das Problem des TE ist entweder sein mega8 Umsetzer oder sein Arduino Krempel.
M_s schrieb: > Arduino Mega Da wird wohl schon mal mindestens der "Millis"-Interrupt zuschlagen, nebst Prolog und Epilog. Und irgendwoher musst Du ja auch die Daten bekommen, die Du da so sendest. Schau doch mal mit dem Oszilloskop, ob der ATMega2560 die Daten so schnell liefert ...
Das Programm ist eigentlich ziemlich simpel aufgebaut. Ich habe einen Sensor am A/D-Wandler angeschlossen und eine Funktion für die Zeit. Nach jeder Millisekunde wird für die Zeitfunktion ein Interrupt ausgelöst. Über den UART gebe ich dann die Sensorwerte und die Zeitpunkte aus.
M_s schrieb: > Nach > jeder Millisekunde wird für die Zeitfunktion ein Interrupt ausgelöst. Da hast es... der Mega wird das garnicht alles in dieser MS schaffen. Schnapp dir dein Oszi und kontrolliert das. M_s schrieb: > Das Programm ist eigentlich ziemlich simpel aufgebaut. Das hat rein garnichts zu sagen, wenn es zeitkritisch ist. Man kann einen µC auch mit NOPs zupflastern... is simpel.
Draco schrieb: > M_s schrieb: >> Nach >> jeder Millisekunde wird für die Zeitfunktion ein Interrupt ausgelöst. > > Da hast es... der Mega wird das garnicht alles in dieser MS schaffen. > Schnapp dir dein Oszi und kontrolliert das. > > M_s schrieb: >> Das Programm ist eigentlich ziemlich simpel aufgebaut. > > Das hat rein garnichts zu sagen, wenn es zeitkritisch ist. Man kann > einen µC auch mit NOPs zupflastern... is simpel. Das wird dann das Problem sein. Vielen Dank für alle Antworten.
M_s schrieb: > Das Programm ist eigentlich ziemlich simpel aufgebaut. Dann könntest Du es hier auch mal posten. Vermutlich hätte man dann den Flaschenhals schon gesehen. Aber wenn der µC bei 20 MHz und vollen 1 MBaud noch was anderes machen können soll, wird man schon DMA verwenden müssen.
Jim M. schrieb: > M_s schrieb: >> Das Programm ist eigentlich ziemlich simpel aufgebaut. > > Dann könntest Du es hier auch mal posten. > Vermutlich hätte man dann den Flaschenhals schon gesehen. Richtig. Jim M. schrieb: > Aber wenn der µC bei 20 MHz und vollen 1 MBaud noch was anderes machen > können soll, wird man schon DMA verwenden müssen. Atmega2560: 0-16Mhz - kein DMA... Was soll uns der Satz sagen?
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.