mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bluetooth sendet kryptische Zeichen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Hanna (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
void USART_0_example(void)
{
  struct io_descriptor *io;
  usart_sync_get_io_descriptor(&USART_0, &io);
  usart_sync_enable(&USART_0);

  io_write(io, (uint8_t *)"A", 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

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jim M. (turboj)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
-3 lesenswert
nicht 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?

Autor: leo (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hanna schrieb:
> io_write(io, (uint8_t *)"A", 8);

Das ist ein Zeichen lang, nicht 8.

leo

Autor: Manuel X. (vophatec)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Osszilierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hanna schrieb:
> 32kHz Crystal Oszillator

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

Autor: Hanna (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;) )

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jim M. (turboj)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Wolfgang (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: Osca (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Osca vorhanden?

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

Bewertung
0 lesenswert
nicht 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.

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: nickm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurt schrieb:
> Masse dran?
> 3V > 5 V ok?

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

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :(

Autor: Hanna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.