Bluetooth sendet kryptische Zeichen

Gast #5963033
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
Gast #5963056
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 :)
Gast #5963057
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
Gast #5963635
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
#5965454
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.
Gast #5965461
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.
Gast #5965500
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
Beitrag #5966274 wurde von einem Moderator gelöscht.
#5970274
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.
Gast #5970305
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
Gast #5971145
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 ;)
#5971298
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.
Gast #5971340
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren