Hallo! Weiß jemand, wie man mit dem UART im 7-Bit Modus empfangen kann? 1 Startbit, 7 Datenbits, 1 Stopbit, kein Paritätsbit, 9600 Baud. Controller ist ein PIC32MX795F512L (PIC32 Ethernet Starter Kit). Brauche nur den Rx-Modus. Der UART des angeschlossenen Gerätes kann nicht verändert werden. Hoffe, dass ich den UART nicht in Software machen muss.
Der kann das nicht laut Datenblatt. Würde es dennoch testen. Der Knackpunkt ist folgender: Zwischen einem Frame und dem Nächsten ist normalerweise 1.5 Bittime Pause, eigentlich 0.5 wenn man das Stop-Bit nicht mitzählt. Wenn der Sender nun das nächste Frame zu schnell raussendet, dann könnte der Pic einen Framing Error signalisieren. Dem könntest du auch eventuell Abhilfe schaffen, wenn du das Timing(Baudrate) etwas erhöhst, eventuell einen krummen Quarz oder PLL Einstellung. Prinzipiell müsste es machbar sein, das mit dem Hw-UART zu machen und die Daten mit 8Bit zu Empfangen.
Chris schrieb: > Der kann das nicht laut Datenblatt. Würde es dennoch testen. > Der Knackpunkt ist folgender: Zwischen einem Frame und dem Nächsten ist > normalerweise 1.5 Bittime Pause... Nein, wenn die Angaben stimmen nur 1 Stopbit. Dann nimmt der Empfänger das Stopbit als 8 Datenbit (wäre kein Problem), findet anschliessend aber statt des Stopbits das nächste Startbit und meldet einen Framing Error. Auch das wäre noch nicht schlimm, aber das nächste Zeichen startet schon fehlerhaft, weil das Startbit überlesen wurde, wo der Empfänger dann mit dem nächsten Zeichen beginnt ist ziemlich zufällig. Es könnte nur funktionieren, wenn der Sender mit 2 Stopbits arbeiten würde. Gruss Reinhard
Zwischen zwei Byte wird minimal ein halbes Bit abgewartet, bis das naechste gesendet wird. Wei da auch noch FIFO drin sind, muss man die Frequenz erhoehen, entweder mit Einstellungen der Register, oder der Verwendung einer anderen PLL Frequenz oder eines leicht schnelleren Quarzes. Worst case. Angenommemn 9600bps oder 104uS dann wuerde byte 7 bei 824uS starten und bei 828uS enden mit einer Toleranz von 4uS. Bei 10 bit (S+8+S) waeren das 83uS oder 12000bps, dann muesste eine Einstellung nahe 10700bps funktionieren ohne irgendwelche Probleme zu machen, gehe nicht weiter auf die Register sowie der Validierung des Zeitrahmens ein da es nur ein fiktives Beispiel ist sowie keine weiteren infos Vorliegen.
Problem gelöst. Hab einfach das MSB abgeschnitten mit
1 | data_array[data_index] &= 0b01111111; |
Die empfangenen Bytes werden von meinem Programm in ein Array geschrieben. Hab dann mal mit dem Debugger den Inhalt des Arrays angesehen und mit den Daten verglichen, die ich mit PC und Terminalprogramm mit der Einstellung 7N1 von dem angeschlossenen Gerät empfange. Daten sind identisch. Trotzdem: Danke für Eure schnellen Lösungsvorschläge!
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.