Forum: Mikrocontroller und Digitale Elektronik Bluetooth sendet kryptische Zeichen


von Hanna (Gast)



Lesenswert?

Hallo zusammen,

Ich probiere gerade, ein Bluetooth Modul zum laufen zu kriegen. Dazu 
wollte ich als erstes Setup das BT Modul an mein Mikrocontroller Board 
anschließen, und eine Bluetooth Verbindung zu meinem PC herstellen, auf 
dem ein Terminal Programm (Tera Term) läuft. Der Mikrocontroller sendet 
permanent Daten ("A" im 2-sekundentakt) über das Bluetooth Modul an Tera 
Term.
Das Problem ist, dass Tera Term nur irgendwelche kryptischen Zeichen 
(þ¦þ¾Ølæ¶ø¶æþl°¶dþþ°æl¶øþ¦þþø¾dløþþþØþ¦þløþæl¶øæl¶) ausspuckt. Aber 
immerhin auch im 2-Sekundentakt, sodass ich davon ausgehen kann, dass 
das was da ausgegeben wird, immerhin tatsächlich vom Controller kommt.

Ich habe das Bluetooth Module (RN41) an mein SAMD21 XPlained Pro 
angeschlossen und zwar den RXD-Pin vom Bluetooth Modul an den PIN PA10 
vom Controller und den TXD-Pin an den Pin PA11.

Pin PA10 und PA11 habe ich mit Hilfe von ATMEL Start als UART 
Schnittstelle konfiguriert (PA10: TX und PA11: RX) (s. Bilder).
Die serielle Schnittstelle ist in Tera Term entsprechend eingestellt.

Ich habe den Beispielcode von ATMEL genommen und etwas angepasst, um 
immer "A" auszugeben:
1
void USART_0_example(void)
2
{
3
  struct io_descriptor *io;
4
  usart_sync_get_io_descriptor(&USART_0, &io);
5
  usart_sync_enable(&USART_0);
6
7
  io_write(io, (uint8_t *)"A", 8);
8
}


Gleichzeitig toggelt der Controller eine LED (an Pin PB30) ebenfalls im 
2-Sekundentakt.

Mehr passiert noch nicht.

Könnte das an der Baudrate (115200) liegen? Ich benutze den internen 
Oszillator (1MHz) ohne Prescaler als Taktgeber (s. Bild).
Laut so einer Tabelle, die ich im Internet gefunden habe, würde dies zu 
einer Fehlerrate von ca. 7.8% führen. Aber doch noch kein Grund gleich 
so einen Unfug auszugeben oder?! ;)

Hat jemand eine Idee woran es noch liegen könnte? Oder wie ich den 
Aufbau ohne großen Aufwand noch vereinfachen kann?
Hab ich noch irgendwelche Einstellungen vergessen, oder passt das "A" 
aus irgendeinem Grund nicht mit den Einstellungen für meine USART 
Schnittstelle zusammen?

Danke schonmal ich bin über jede Hilfe glücklich!

Liebe Grüße,
Hanna

von Thomas E. (thomase)


Lesenswert?

Hanna schrieb:
> Aber doch noch kein Grund gleich
> so einen Unfug auszugeben oder?!

Doch.

Hanna schrieb:
> þ¦þ¾Ølæ¶ø¶æþl°¶dþþ°æl¶øþ¦þþø¾dløþþþØþ¦þløþæl¶øæl¶

Das ist genau das, was man erwarten kann.

An einem Quarz, am besten ein Baudratenquarz, führt kein Weg vorbei.

von Jim M. (turboj)


Lesenswert?

Trifft man die 115200 Baud überhaupt mit nur 1 MHz Taktfrequenz? IMHO 
nein.

Schau mal nach was im Modul so für 'ne Baud rate wirklich eingestellt 
ist, bei den vielen Zeichen würde ich eher mit 9600 Baud anfangen.

von Jim M. (turboj)


Lesenswert?

Thomas E. schrieb:
> An einem Quarz, am besten ein Baudratenquarz, führt kein Weg vorbei.

Moderne µC haben gerne mal Laser-getrimmte RC Oszillatoren, die für UART 
grade so ausreichen.

von Thomas E. (thomase)


Lesenswert?

Jim M. schrieb:
> Moderne µC haben gerne mal Laser-getrimmte RC Oszillatoren, die für UART
> grade so ausreichen.

Was willst du mit dem unqualifierten Blabla jetzt aussagen?

von leo (Gast)


Lesenswert?

Hanna schrieb:
> io_write(io, (uint8_t *)"A", 8);

Das ist ein Zeichen lang, nicht 8.

leo

von Manuel X. (vophatec)


Lesenswert?

Jim M. schrieb:
> Trifft man die 115200 Baud überhaupt mit nur 1 MHz Taktfrequenz?
> IMHO
> nein.
>
> Schau mal nach was im Modul so für 'ne Baud rate wirklich eingestellt
> ist, bei den vielen Zeichen würde ich eher mit 9600 Baud anfangen.

The default configuration for the Bluetooth module is:
• Bluetooth slave mode
• Bluetooth pin code 1234
• Serial port 115,200 Kbps baud rate, 8 bits, no parity, 1 stop bit
• Serial port flow control disabled
• Low power mode off

;)

Aber ein Quarz und die richtige Konfiguration des baud rate generator im 
SAM könnten Wunder bewirken :)

von Hanna (Gast)


Lesenswert?

Danke für die Antworten, ich glaube auf dem SAMD21 XPlained Pro Board, 
ist netterweise noch ein 32kHz Crystal Oszillator mit drauf, der ist 
dann vielleicht besser geeignet.

Ich werde testen und berichten ;)

@leo. Da hast du wohl recht. Das werde ich ändern

von Osszilierer (Gast)


Lesenswert?

Hanna schrieb:
> 32kHz Crystal Oszillator

das dann für 115kBaud... viel Spass

von Hanna (Gast)



Lesenswert?

Jetzt, nachdem ich den Externen Oszillator benutze für die UART 
Schnittstelle, kriege ich in Tera Term leider nur noch 1-sen ausgegeben. 
Muss ich noch irgendwas beachten?

Baudrate ist jetzt überall 115200.

(Sorry für die ganzen Anfänger-Fragen ;) )

von Hanna (Gast)


Lesenswert?

Guten Morgen zusammen,

Hanna schrieb:
> Jetzt, nachdem ich den Externen Oszillator benutze für die UART
> Schnittstelle, kriege ich in Tera Term leider nur noch 1-sen ausgegeben.

Ich Depp hate Rx und Tx Pin beim wieder zusammenstecken vertauscht.
Naja,leider hat das Umstecken nicht geholfen und mein Output im Terminal 
sieht jetzt so aus:

ooooïooooooooooooïïoooïooooïïooooooïooooooooooooooooooïoooooooïooïoooooo 
ooooooooooooÿÿûÿûÿÿûÿÿÿoooïoooooooooÿooooooooûûûûÿÿûûooïoooooooooooooooo 
oooooÿooooooooÿûoooooooooÛoïoooooooûoïoooooooïooooooooooooïoïoooïoooïooo 
oooooooooïoooooooïooooïïoooïooïooïoïoooooooïoïïoïoooooooooooooooïooooïoo 
ooooooooooooooooooooooooooooooooooïoooooïooïïoooooooooooooïooooooooooooï 
ooooooooooooooooooïïïoïïoooooooooooïoooooooooooooooooÿÿÿÿÿoooooooïoooooo 
ooÿûûÿÿoooïïooooooooooooÿÿÿÿÿÿûÿûûooïoïooooooooûoooooooooûûÿÿûoooooïoooo 
oooooooooïoooooooÛooooooooÿooooooooÿooooooooooooooooooooooooooooooïooooo 
ooooooooïooooooooooooooo

von Jim M. (turboj)


Lesenswert?

Hanna schrieb:
> Baudrate ist jetzt überall 115200.

Bei nur 32 kHz Takt? Ich denke nicht, Tim(tm).

Die meisten modernen UARTs wollen >= 16*Baudrate als Eingangstakt sehen. 
Einige wenige können aus den 32kHz grade noch 9600 Baud zaubern.

Daher meine obige Frage, ob die 1 MHz ausreichen - das würde mich 
ernsthaft überraschen.

Eigentlich müsste der Code beim Setzen der Baudrate einen Fehler 
ausgeben.

Rechne Dir mal mit dem Takt und den eingestellten Wert im Baudraten 
Teiler Register die erreichte Baud Rate mal aus.

von Wolfgang (Gast)


Lesenswert?

Thomas E. schrieb:
> Hanna schrieb:
>> Aber doch noch kein Grund gleich
>> so einen Unfug auszugeben oder?!
>
> Doch.

Quatsch

> Hanna schrieb:
>> þ¦þ¾Ølæ¶ø¶æþl°¶dþþ°æl¶øþ¦þþø¾dløþþþØþ¦þløþæl¶øæl¶
>
> Das ist genau das, was man erwarten kann.
dto.

> An einem Quarz, am besten ein Baudratenquarz, führt kein Weg vorbei.

Abweichungen in der Baudrate von einigen Prozent können dazu führen, 
dass ein "A" evtl. als zwei Zeichen interpretiert wird, aber nicht zu 
ein paar Dutzend kryptischen Zeichen.

von Kurt (Gast)


Lesenswert?

Hanna schrieb:
> Das Problem ist, dass Tera Term nur irgendwelche kryptischen Zeichen
> (þ¦þ¾Ølæ¶ø¶æþl°¶dþþ°æl¶øþ¦þþø¾dløþþþØþ¦þløþæl¶øæl¶) ausspuckt. Aber
> immerhin auch im 2-Sekundentakt, sodass ich davon ausgehen kann, dass
> das was da ausgegeben wird, immerhin tatsächlich vom Controller kommt.

Das schaut nach einem Problem beim Übergang vom MC zum PC aus.

Masse dran?
3V > 5 V ok?

 Kurt

von STK500-Besitzer (Gast)


Lesenswert?

Hast du mal am Bluetooth-Modul RXD und TXD direkt miteinander verbunden?
Dann solltest du am PC ein Echo empfangen.

von Osca (Gast)


Lesenswert?

Osca vorhanden?

Beitrag #5966274 wurde von einem Moderator gelöscht.
von Hanna (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Hast du mal am Bluetooth-Modul RXD und TXD direkt miteinander verbunden?

Guter Punkt! Ich habe jetzt RXD mit TXD direkt verbunden und es kommt 
absolut gar nichts zurück, wenn ich vom Terminal was an den Controller 
schicke.

von Hanna (Gast)


Lesenswert?

Hanna schrieb:
> und es kommt
> absolut gar nichts zurück, wenn ich vom Terminal was an den Controller
> schicke.

*wenn ich was an das BT Modul schicke ,natürlich

von Thomas E. (thomase)


Lesenswert?

Wolfgang schrieb:
> Abweichungen in der Baudrate von einigen Prozent können dazu führen,
> dass ein "A" evtl. als zwei Zeichen interpretiert wird, aber nicht zu
> ein paar Dutzend kryptischen Zeichen.

Du hast von der Sache nicht die geringste Ahnung.

von Sebastian S. (amateur)


Lesenswert?

Jedes Mal, wenn es Probleme mit irgendwas Seriellem gibt, gehe ich es 
erst mal gemächlich an.

Das heißt primär: Erst mal 9600 Baud und ein stabiles Protokoll also 8 
Bit; möglichst 2 Stoppbits und das Paritätsbit.

Stimmt, das ist schnarchlangsam, aber gerade bei den heute verwendeten 
Ungefährquarzen, gibt es so viel mehr dolle Ranzen beim Teilerfaktor.

Geht das Ganze dann, kann man immer noch ein Quicky machen.

von nickm (Gast)


Lesenswert?

>   io_write(io, (uint8_t *)"A", 8);

Hat schon jemand Anders beantwortet. Aber es ist immer noch nicht drauf 
eingegangen worden:
Es muss
io_write(io, (uint8_t *)"A", 1);
 heißen. Wer 8 Zeichen ausgibt braucht sich über Müll nicht zu wundern 
wenn er nur ein Zeichen übergibt.


Nick

von Hanna (Gast)


Lesenswert?

Kurt schrieb:
> Masse dran?
> 3V > 5 V ok?

Masse ist dran, Versorgungsspannung habe ich auch nachgemessen (3,3V, 
wie im Datenblatt steht.

von Hanna (Gast)


Lesenswert?

nickm schrieb:
> Es muss
> io_write(io, (uint8_t *)"A", 1);
>  heißen. Wer 8 Zeichen ausgibt braucht sich über Müll nicht zu wundern
> wenn er nur ein Zeichen übergibt.

Das habe ich geändert.
Hat nicht geholfen. :(

von Hanna (Gast)


Lesenswert?

Hi Zusammen,

vielen Dank für eure Hilfe.
Ich habe den Fehler gefunden.
Das Bluetoothmodul RT41 unterstützt zum einen UART und zum anderen 
RS232.

Ich hatte meinen Controller Ausgang an den RX Pin der 
RS232-Schnittstelle (Header A, Pin 4= Rx, RS232) direkt angeschlossen, 
was natürlich nicht funktionieren kann.
Ich habe also auf den RX Pin der UART Schnittstelle gewechselt (auf 
Header B wechseln = R6 und R8 entfernen, VDD und GND anpassen; Pin 1 = 
Rx, UART)

Gleichzeitig habe ich die Baudrate überall (Oszillator, Controller & 
Terminal) auf 9600 geändert. Dann funktioniert es auch mit dem internen 
1MHz Oszillator.

Bei einer Baudrate von 115200 sieht es nicht so schön aus, aber es kommt 
immerhin nicht mehr so ein Kuddelmuddel raus, wie vorher, sondern immer 
das gleiche kryptische Zeichen:

þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ 
þþþ

Das kann ich dann, denke ich durch die Wahl des richtigen Taktgebers 
noch optimieren ;)

von Thomas E. (thomase)


Lesenswert?

Hanna schrieb:
> þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
> þþþ
>
> Das kann ich dann, denke ich durch die Wahl des richtigen Taktgebers
> noch optimieren ;)


Nein, das ist Unsinn:



Wolfgang schrieb:
> Quatsch

Wolfgang schrieb:
> dto.

Wolfgang schrieb:
> Abweichungen in der Baudrate von einigen Prozent können dazu führen,
> dass ein "A" evtl. als zwei Zeichen interpretiert wird, aber nicht zu
> ein paar Dutzend kryptischen Zeichen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hanna schrieb:
> Versorgungsspannung habe ich auch nachgemessen
Ich würde da zuallererst mal mit einem Oszilloskop oder einem 
Logikanalyzer die tatsächlich gesendete Baudrate messen...

von Wolfgang (Gast)


Lesenswert?

Thomas E. schrieb:
> Du hast von der Sache nicht die geringste Ahnung.

Dieter Nuhr kennst du?

Erkläre bitte mal, wie aus einem einzelnen Zeichen (Dauer bei 115200Bd 
etwa 87µs) ein Zeichenkette mit 49 Zeichen (Dauer bei 115200Bd über 4ms) 
werden soll, wenn die Baudraten so eingehalten werden.

Dafür würden über einen Zeitraum von mehr als 4ms die Startbits fehlen.

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.