Forum: Mikrocontroller und Digitale Elektronik Hterm 1M Baud


von M_s (Gast)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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?

von M_s (Gast)


Lesenswert?

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

von M_s (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

M_s schrieb:
> Zuerst habe ich mir selber die theoretisch mögliche Übertragungsfrequenz
> für die Daten berechnet

was muss man da rechnen?

von M_s (Gast)


Lesenswert?

Peter II schrieb:
> was muss man da rechnen?

Wie oft das Datenpaket pro Sekunde an den Computer übergeben wird.

von Mikke (Gast)


Lesenswert?

Schau mal Hier:

https://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

bei wichtiger Hinweis 2

von M_s (Gast)


Lesenswert?

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.

von Draco (Gast)


Lesenswert?

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"?

von M_s (Gast)


Lesenswert?

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

von Draco (Gast)


Lesenswert?

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 ?

von M_s (Gast)


Lesenswert?

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?

von M_s (Gast)


Lesenswert?

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?

von Sascha W. (sascha-w)


Lesenswert?

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

von M_s (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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.

von M_s (Gast)


Lesenswert?

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.

von Bernd K. (prof7bit)


Lesenswert?

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
von Sigi (Gast)


Lesenswert?

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.

von Christian M. (chrigi001)


Lesenswert?

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
von M_s (Gast)


Lesenswert?

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.

von Draco (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Christian M. (chrigi001)


Lesenswert?

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.

von Draco (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

Draco schrieb:
> Der Verlauf sieht grad folgendermaßen aus:
> Atmega2560  --->  Atmega8u2 ---> PC

ok, das erklärt das natürlich.

von Gerhard G. (xmega)


Lesenswert?

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!

von Toralf W. (willi)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

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 ...

von M_s (Gast)


Lesenswert?

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.

von Draco (Gast)


Lesenswert?

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.

von M_s (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von Draco (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.