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ß
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.