Forum: Mikrocontroller und Digitale Elektronik Merkwürdige Fehler mit UART


von Mike (Gast)


Lesenswert?

Hallo,

ich habe ein Bluetooth-Modul vom Typ HC-06 an einen PIC18F24J50 
angeschlossen. Kommuniziert wird über den PIC-eigenen USART mit 9600 
Baud.
Empfänger ist ein Android-Handy mit Bluetooth-Terminal-App.

Das Senden über Bluetooth funktioniert problemlos, die Daten treffen auf 
dem Mobiltelefon ohne Fehler ein. Die Rückrichtung macht aber Ärger, 
etwa 50% der gesendeten Bytes haben Fehler. Es scheint, dass Bits 
"verschluckt" werden, z.B. wird aus dem ASCII-Zeichen 'E' = 0x45 häufig 
ein 'D' = 0x44.

Das Bluetooth-Modul und der PIC scheinen OK zu sein, wenn ich das 
TxD-Beinchen des Moduls mit RxD verbinde (Loopback ohne PIC), werden die 
gesendeten Daten 1:1 zurückgeschickt. Das Gleiche, wenn ich am PIC RX 
mit TX zusammenschalte.

Eigentlich kann das dann nur an einer fehlerhaften Baudrate liegen, doch 
warum treten die Fehler nur beim Empfangen auf? Senden und Empfangen 
nutzen ja die gleiche Rate.

Das Bluetooth-Modul ist von dieser Art:

http://www.ebay.de/itm/HC-06-Wireless-Serial-4-Pin-Bluetooth-RF-Transceiver-Modul-RS232-TTL-for-Arduino/161932084118?_trksid=p2141725.c100338.m3726&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20150313114020%26meid%3De3fced382c0f44889a774dfb65daaa0e%26pid%3D100338%26rk%3D1%26rkt%3D10%26mehot%3Dag%26sd%3D351627831125

von (prx) A. K. (prx)


Lesenswert?

Ist es immer das unterste Bit? Das wird zuerst übertragen.

Ist im BT-Modul eine Art Schlafmodus aktiv? Passiert es auch in 
Folgebytes, die am Stück übertragen werden?

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Allenfalls ist der Rx Interrupt vermurkst ? Wird zu schnell gelesen?

von EinWort (Gast)


Lesenswert?

Ich würde mal versuchen eine andere Baudrate (falls möglich) zu 
verwenden oder im Mikrocontroller die Baudrate in !kleinen Schritten! 
(weiß nicht ob das mit dem PIC geht) nach oben oder unten zu ändern und 
schauen wie sich das auf die Fehlerrate auswirkt. Ansonsten mit einem 
Oszilloskop oder Logic-Analyzer (falls vorhanden) die Länge der 
übertragenen Bits messen. Damit lässt sich zumindest 
ausschließen/feststellen, ob eine zu große Abweichung in der Taktung 
vorliegt.

von Mike (Gast)


Lesenswert?

Vielen Dank für die Tipps!

Inzwischen habe ich den Fehler gefunden. Auf dem Adapterboard des 
Bluetooth-Moduls befindet sich in der Spannungsversorgung eine Diode und 
ein Spannungsregler, die die 3.3V Versorgungsspannung auf knapp 2.5V 
reduzieren. Damit kann der TxD-Pin des Moduls auch nur etwa 2.4V im 
High-Pegel ausgeben. Da der PIC einen Schmitt-Trigger-Eingang hat, ist 
dieser Pegel knapp am bzw. unter dem Limit für logisch 1, wodurch einige 
Einsen zu Nullen werden.

Leider war die dem Modul beiliegende Beschreibung falsch. Dort war eine 
Betriebsspannung von 3-6V angegeben. Erst das Oszilloskop brachte den 
Fehler ans Licht.

Nach Brücken der überflüssigen Bauteile funktioniert die Übertragung 
jetzt fehlerfrei.

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.