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
voidUSART_0_example(void)
2
{
3
structio_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
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.
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.
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.
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?
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 :)
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
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 ;) )
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
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.
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.
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
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.
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
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.
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.
> 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
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. :(
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 ;)
Hanna schrieb:> þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ> þþþ>> Das kann ich dann, denke ich durch die Wahl des richtigen Taktgebers> noch optimieren ;)
Nein, das ist Unsinn:
Wolfgang schrieb:> QuatschWolfgang 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.
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...
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.