Forum: Mikrocontroller und Digitale Elektronik Arduino Leonardo - Kommunikation über USB-Schnittstelle mit höherer Baudrate


von Hartmuth (Gast)


Lesenswert?

Hallo,

ich teste gerade die USB-Schnittstelle von meinem Arduino Leonardo 
Board.
Ich wollte herausfinden, ob ich auch Baudraten größer als 115200 
verwenden kann.
Nun tritt bei mir etwas auf, was ich mir nicht erklären kann.
Der SerialMonitor hat ja als max. Baudrate 115200. Ich habe den 
Controller aber mit einer Baudrate von 2000000 konfiguriert.
Trotzdem zeigt mir der SerialMonitor die empfangen Daten richtig an.

Dann habe ich den Mikrocontroller umkonfiguriert auf 115200.
Nun sende ich mit einer Baudrate von 9600 und auch der Mikrocontroller 
empfängt dies richtig.
Woran liegt das?

Ich denke normalerweise muss die Baudrate doch zusammenpassen, damit die 
Teilnehmer wissen, wann sie abtasten müssen?

Gruß

von Karl H. (kbuchegg)


Lesenswert?

1
Der Leonard unterscheidet sich von allen vorherigen Boards dadurch, das
2
der ATmega32U4 bereits über eine integrierte USB Kommunikation verfügt,
3
was einen zweiten Prozessor überflüssig macht.

d.h. hier spricht der Prozessor bereits USB.
Deine eingestellte Baudrate ist daher Makulatur und kommt überhaupt 
nicht zum tragen. An keiner einzigen Stelle der Übertragungskette ist 
eine reale serielle Übertragung im Spiel.

: Bearbeitet durch User
von Hartmuth (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> d.h. hier spricht der Prozessor bereits USB.
> Deine eingestellte Baudrate ist daher Makulatur und kommt überhaupt
> nicht zum tragen. An keiner einzigen Stelle der Übertragungskette ist
> eine reale serielle Übertragung im Spiel.

ah ok vielen Dank.

Und wie kann ich jetzt herausfinden, welche Datenrate möglich ist?
Im Datenblatt steht ja Full-Speed fähig d.h. 12Mbit/s.
Das ist ja aber Brutto. Da fällt ja einiges z.b. durch die Frames etc. 
weg

von Karl H. (kbuchegg)


Lesenswert?

Hartmuth schrieb:

> Und wie kann ich jetzt herausfinden, welche Datenrate möglich ist?

Mit einem Testprogramm?
Mit deinem Leonardo 'bläst' du die Daten raus und auf dem PC siehst du 
zu, dass du sie von der Schnittstelle wegkriegst (und zb etwas damit 
machst). Die Zeit misst du (für sagen wir mal 1000000 Durchgänge) und 
rechnest dir dann aus, wieviele Daten pro Sekunde übertragen wurden. 
Wenn der Leonardo zb einfach alle Zahlen aufsteigend überträgt, dann 
müssen die beim Empfänger auch aufsteigend ankommen. Wenn nicht, dann 
gab es einen Fehler und dann weißt du, dass das etwas zu schnell war.

Sei halt ein wenig kreativ, denk dir was aus!
Genau darum gehts doch in der ganzen Programmierung. Dass man seiner 
Kreativität freien Lauf lassen kann.

: Bearbeitet durch User
von Patrick C. (pcrom)


Lesenswert?

Bitte beachten : USB Latency. Die USB Latency auf einen Windows Rechner 
kann einfach so rund 100ms sein, also wenn man von PC ein Kommando 
sendet kann es 200ms dauern bis man ein Kommando zurueck bekommt.

Natuerlich ist mit settings die Latency oft niedrieger zu bekommen aber 
die Latency bestimmt oft mehr der effektieven 
datenuebertragungsgeschindigkeit als die baudrate.

Patrick

von PittyJ (Gast)


Lesenswert?

So wie ich das Konzept verstehe, ist USB-mäßig der der PC der Host und 
der Ardunino der Slave. D.h. sämtliche Kommunikation wird vom PC 
initiiert.
Der Arduino kann also gar nicht herausblasen, sondern nur antworten, 
wenn er gefragt wird.
Also muß der PC möglichst oft fragen, und da gibt es im USB-Protokoll 
eine obere Grenze (Frames/sec). Der Arduino sollte dann auch möglichst 
viel in dem Antwortblock zurück geben. Nicht nur ein Byte, sondern so 
viel wie es geht.
Das setzt auf beiden Seiten geeignete Programme voraus.

Meine Erfahrungen sind, dass Netto ca 80 % gut möglich sind, also ca 
1MByte/sek.

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.