Ich habe ein kleines Problem... ich kann mit Serial zwar 125000 baud übertragen, aber ich muss unbedingt 132000 ermöglichen.
Mit einem Arduino Micro (32u4) ist das ja kein Problem, dazu benutzt man einfach Serial1.begin(132000) und das funktioniert.
Doch beim Pro Mini ist wohl der UART begrenzt auf max 115200 bzw 125000.
Habe es schon mit SoftwareSerial ( myserial.begin(132000); ) probiert... doch es scheint auch hier eine Begrenzung zu geben.
Kann ich doch irgendwie auf die 132000 kbs kommen?
Hardwareserial geht nur in Teilern der Prozessorfrequenz. Bei 16 MHz sind z.B. 500000, 250000, 125000 gut möglich.
Bei 8 MHz hast du vermutlich die Wahl zwischen 250000, 125000 und dann kleineren Geschwindigkeiten: bei 112500 sollte der Fehler tolerierbar sein, da sich das Ganze mit jedem Startbit synchronisiert.
Kann ich doch irgendwie auf die 132000 kbs kommen?
In welche Richtung ?
Evtl. hilft es, beim Sender 2 Stopbit ( + eventuell Mark Parity ) zu konfigurieren, und beim Empfänger nur 1 Stopbit und das Paritybit zu konfigurieren ...
Mit einem Arduino Micro (32u4) ist das ja kein Problem, dazu benutzt man einfach Serial.begin(132000) und das funktioniert.
Beim Micro kannst Du irgend eine Baudrate einstellen, sie wird sowieso ignoriert. Dort ist USB direkt in the Prozessor integriert, d.h. er empfängt/sendet die Daten sowieso nicht mit der eingetragenen Baudrate. Beim Micro müsstest Du die entsprechende Einstellung auf Serial1 machen und dort ist es genauso wenig möglich.
Doch beim Pro Mini ist wohl der UART begrenzt auf max 115200 bzw 125000.
Nein, im UART nicht, aber in der Bibliothek. Wenn Du die Einstellung selbst machst, sollte eine hinreichend genaue Einstellung möglich sein. Allerdings ist mir rätselhaft, wieso Du eine so genau definierte Baudrate bei der Kommunikation über USB haben musst.
SoftwareSerial ist für Baudraten über 9600 nur beschränkt, über 38400 gar nicht mehr zu gebrauchen.
Was willst Du genau machen?
Mit dem folgenden Code in setup() kriegst Du 13334 Baud, was nur ca 1% Abweichung zu Deinem gewünschten Wert ist (besser als mit den meisten anderen Baudraten).
vieleicht ist es das UBRRnL Register. ( UBRRnL and UBRRnH – USART Baud Rate Registers)
Schau mal Zabelle 19.1 auf Seite 179, Kapitel 19.8.3 Asynchronous Operational Range auf Seite 192 und die Tabelle 19.11 auf Seite 202 von http://www.atmel.com/Images/doc8161.pdf an.
Sorry, aber ich kann mit den letzten Posts gar nichts anfangen.
Es ist besser dem Dummen zu erklären wie es richtig geht, oder was man ändern kann, anstatt auf irgendwelche Datasheets zu verweisen, die er sowieso nicht versteht
Wie erwähnt habe ich die vermeintliche Annäherung auf 132000 ausprobiert aber ich bekomme die oben genannte Fehlermeldung.
Kann es sein, dass das Baudraten Problem nur bei 8 Mhz Platinen auftreten, weil ich gelesen habe, dass die 16 Mhz Varianten problemlos höhere Baudraten über Serial1.Begin einstellen können. Meine Vermutung war ja, dass man unbedingt einen 32u4 Chip braucht, weil dieser den Serial1 Kanal anbietet und über den Hardware USART läuft.
Ich habe keine Ahnung, deshalb wäre eine aufklärende Erklärung eines Profis vielleicht hilfreich das ganze Wirrwar aufzuklären.
Jedenfalls funktioniert es mit einem Arduino Micro (32u4) mit Serial1 (nicht über USB) problemlos 132000 Baud einzustellen und mit dem Gerät zu kommunizieren.
Nur hätte ich gerne gewusst warum das mit dem Pro Mini 3.3V 8 Mhz nicht funktoniert.
Kann es vielleicht sein das es mit den Sparkfun Pro Micro (3.3V 8 Mhz aber 32u4 Chip!) funktioniert. Denn hier sollte auch Serial1 (nicht über USB) möglich sein.
Beim ATmega168 sollte UBRRL eigentlich definiert sein, beim ATmega328 kann es auch das mit dem 0 sein.
Oder meinst Du etwas anderes?
Sorry, habe das "1" nach dem "Serial" überlesen. Mein Kommentar galt für die USB-Emulation der seriellen Schnittstelle.
Was macht UBRRL dabei? Ist das irgendein Teiler? Wenn ja, wie berechne ich andere Baudraten?
Das ist ein 16bit Register (deshalb UBRRL und UBRRH, wobei das UBRRH 0 bleiben darf, wie vom Serial.begin() gesetzt), welches das als Teilungsverhältnis des Systemtakts (bzw. eines Achtels davon) verwendet wird und dann den Takt für die serielle Schnittstelle liefert.
Wobei ich gerade feststelle, dass ich mit 16MHz gerechnet hatte (Gewohnheit ist manchmal schon lästig), bei 8MHz lässt sich wirklich kein Wert berechnen, der 132kBaud ergibt. 8 ergibt 125kBaud, während 7 schon fast 143kBaud ergibt. Scheint also wirklich, dass Du mit dem 8MHz-Modell nicht genau die gewünschte Geschwindigkeit erzielen könntest.
Bei "UBRR0L = 15" bekomme ich keine Fehlermeldung, das ist schon mal gut.
Dann werde ich wohl es mal mit dem Pro Micro 3.3V / 8 Mhz probieren... vielleicht klappt es ja dann doch mit dem Serial1. Wer weiss
Werde dann davon berichten.