Habe mein Bluetooth Modul HC06 kurz nach dem Kauf auf eine Baudrate von 230400 gesetzt. Einfach BT-Modul(Werks-Baudrate 9600) an Arduino (eingstellte Baudrate 9600) und über den Serial Monitor AT+BAUD9 (=230400) gesetzt. Hat auch funktioniert wie es soll und die Baudrate beträgt nun 230400. Leider unterstützt der Serial Monitor von Arduino so eine hohe Baudrate nicht und ich kann sie (auf diesem Weg) nicht mehr zurück auf z.B 9600 setzen. Was wäre die beste Möglichkeit dieses Problem zu umgehen? Folgendes habe ich probiert: 1. - Externes Hyperterminal PuTTy - Arduino mit USB an PC und in PuTTy 230400 Baud, COM PORT von Arduino eingestellt - BT-Modul an TxD,RxD von Arduino - Wenn ich jetzt AT+BAUD4 (9600), oder AT+VERSION usw. eingebe kommt nichts zurück 2. - BT-Modul - MAX232 - PC (WinXP Hyperterminal) - Im Terminal die Befehle gesendet, aber kommt leider nichts zurück 3. - Leider nicht vorhanden aber müsste möglich sein ?! - Bluetooth Modul für PC kaufen und die beiden Module mit Pairing Code verbinden, danach am PC die Baudrate des HC06 Moduls ändern?! - Wäre das auch übers Smartphone möglich?
das problem habe ich mit meinem btm-222 modul und einem atmega32 auch. ich dachte, ich wäre der einzige, der sich so einen doofen fehler leisten würde. und ja, ich weiß, RTFM passt bei mir in diesem fall wie die faust aufs auge. jedenfalls kam ich zu keiner lösung, mein usart am atmega32 @ 16 mhz hat laut datasheet einen 3%igen fehler und damit kann ich nicht mehr rekonfigurieren :( wäre ebenfalls an einer lösung interessiert, sonst wars halt lehrgeld und ich kauf mir nen neues. 10€ tun jetzt auch nicht so weh. aber wäre schon schade um die hardware.
Also ein FT232RL kann bis auf 2MBaud oder so hoch. Mit einem passenden Terminal sollten also auch 230k rekonfigurierbar sein.
Beim WinXP Terminal kann man eine Baudrate von 230400 verwenden. Also BT-Modul --> MAX232 --> PC Terminal und übers Terminal sende ich dem Modul das Kommando die Baudrate zu wechseln ?!
Könnten Blue Man und ich nicht einfach einen 7,3728 MHz Quarz beim AVR verwenden? Wäre ein vielfaches der Baudrate und müsste somit gehen.
Andreas schrieb: > - Wenn ich jetzt AT+BAUD4 (9600), oder AT+VERSION usw. eingebe kommt > nichts zurück > - Im Terminal die Befehle gesendet, aber kommt leider nichts zurück Den termination character hast du richtig eingestellt? https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-V.250-200307-I!!PDF-E&type=items HTerm ist für solche Fälle sehr zu empfehlen. Da kannst du alles einstellen und in diversen Formaten ansehen/eingeben.
Andreas schrieb: > Könnten Blue Man und ich nicht einfach einen 7,3728 MHz Quarz beim AVR > verwenden? > Wäre ein vielfaches der Baudrate und müsste somit gehen. Danke, aber ich habe darauf hin meinen externen Takt schon auf 16Mhz umgelötet, aber da bleibt immer noch ein Fehler von 3% und das ist noch zuviel bei mehreren Konfigurationsbytes.
Andreas schrieb: > Beim WinXP Terminal kann man eine Baudrate von 230400 verwenden. > > Also BT-Modul --> MAX232 --> PC Terminal Die Onboard-Schnittstellen eines PCs können maximal 115200. Um höhere Baudraten zu erzielen, ist zwingend andere Schnittstellenhardware erforderlich, entweder eine USB-Seriell-Bridge oder eine PCI/PCIe-Schnittstellenkarte mit geeigneter UART darauf. Was irgendwelche Terminalprogramme als Baudrate in Auswahllisten anbieten, hat nichts damit zu tun, was die tatsächliche Hardware oder der genutzte Treiber zulassen; beim nicht-Terminalprogramm "hTerm" kann im Eingabefeld für die Baudrate ein beliebiger Wert eingegeben werden, der vom Devicetreiber und der Hardware als am nächstbesten passende möglichen Baudrate interpretiert wird.
Auch auf die Gefahr hin, dass ich einen Preis für den schäbigsten Code bekomme, möchte ich hier in diesem (älteren) Thread meinen Code posten, der es mir zusammen mit einem Atmega328 (20 MhZ) gerade ermöglicht hat, wieder auf den HC06 zugreifen zu können, indem der UART "einfach" manuell programmiert wurde. Zunächst hatte ich vor, die ganze Sache in Assembler zu implementieren, aber der Compiler hat aus dem C-Code einen ausreichend genauen Code (für 20 MhZ(!)) basteln können.
1 | void uart_reparatur(void) |
2 | {
|
3 | DDRD |= (1<<PD1); //TXD=Ausgang |
4 | |
5 | //Startbit
|
6 | PORTD &=~ (1<<PD1); //0 |
7 | _delay_us(1); |
8 | //A 65 0100 0001
|
9 | PORTD |= (1<<PD1); //1 |
10 | _delay_us(1); |
11 | PORTD &=~ (1<<PD1); //0 |
12 | _delay_us(1); |
13 | PORTD &=~ (1<<PD1); //0 |
14 | _delay_us(1); |
15 | PORTD &=~ (1<<PD1); //0 |
16 | _delay_us(1); |
17 | PORTD &=~ (1<<PD1); //0 |
18 | _delay_us(1); |
19 | PORTD &=~ (1<<PD1); //0 |
20 | _delay_us(1); |
21 | PORTD |= (1<<PD1); //1 |
22 | _delay_us(1); |
23 | PORTD &=~ (1<<PD1); //0 |
24 | _delay_us(1); |
25 | //Stopbit
|
26 | PORTD |= (1<<PD1); //1 |
27 | _delay_us(1); |
28 | |
29 | _delay_us(5); |
30 | |
31 | |
32 | //Startbit
|
33 | PORTD &=~ (1<<PD1); //0 |
34 | _delay_us(1); |
35 | //T 84 0101 0100
|
36 | PORTD &=~ (1<<PD1); //0 |
37 | _delay_us(1); |
38 | PORTD &=~ (1<<PD1); //0 |
39 | _delay_us(1); |
40 | PORTD |= (1<<PD1); //1 |
41 | _delay_us(1); |
42 | PORTD &=~ (1<<PD1); //0 |
43 | _delay_us(1); |
44 | PORTD |= (1<<PD1); //1 |
45 | _delay_us(1); |
46 | PORTD &=~ (1<<PD1); //0 |
47 | _delay_us(1); |
48 | PORTD |= (1<<PD1); //1 |
49 | _delay_us(1); |
50 | PORTD &=~ (1<<PD1); //0 |
51 | _delay_us(1); |
52 | //Stopbit
|
53 | PORTD |= (1<<PD1); //1 |
54 | _delay_us(1); |
55 | |
56 | _delay_us(5); |
57 | |
58 | //Startbit
|
59 | PORTD &=~ (1<<PD1); //0 |
60 | _delay_us(1); |
61 | //+ 43 0010 1011
|
62 | PORTD |= (1<<PD1); //1 |
63 | _delay_us(1); |
64 | PORTD |= (1<<PD1); //1 |
65 | _delay_us(1); |
66 | PORTD &=~ (1<<PD1); //0 |
67 | _delay_us(1); |
68 | PORTD |= (1<<PD1); //1 |
69 | _delay_us(1); |
70 | PORTD &=~ (1<<PD1); //0 |
71 | _delay_us(1); |
72 | PORTD |= (1<<PD1); //1 |
73 | _delay_us(1); |
74 | PORTD &=~ (1<<PD1); //0 |
75 | _delay_us(1); |
76 | PORTD &=~ (1<<PD1); //0 |
77 | _delay_us(1); |
78 | //Stopbit
|
79 | PORTD |= (1<<PD1); //1 |
80 | _delay_us(1); |
81 | |
82 | _delay_us(5); |
83 | |
84 | |
85 | //Startbit
|
86 | PORTD &=~ (1<<PD1); //0 |
87 | _delay_us(1); |
88 | //B 66 0100 0010
|
89 | PORTD &=~ (1<<PD1); //0 |
90 | _delay_us(1); |
91 | PORTD |= (1<<PD1); //1 |
92 | _delay_us(1); |
93 | PORTD &=~ (1<<PD1); //0 |
94 | _delay_us(1); |
95 | PORTD &=~ (1<<PD1); //0 |
96 | _delay_us(1); |
97 | PORTD &=~ (1<<PD1); //0 |
98 | _delay_us(1); |
99 | PORTD &=~ (1<<PD1); //0 |
100 | _delay_us(1); |
101 | PORTD |= (1<<PD1); //1 |
102 | _delay_us(1); |
103 | PORTD &=~ (1<<PD1); //0 |
104 | _delay_us(1); |
105 | //Stopbit
|
106 | PORTD |= (1<<PD1); //1 |
107 | _delay_us(1); |
108 | |
109 | |
110 | _delay_us(5); |
111 | |
112 | //Startbit
|
113 | PORTD &=~ (1<<PD1); //0 |
114 | _delay_us(1); |
115 | //A 65 0100 0001
|
116 | PORTD |= (1<<PD1); //1 |
117 | _delay_us(1); |
118 | PORTD &=~ (1<<PD1); //0 |
119 | _delay_us(1); |
120 | PORTD &=~ (1<<PD1); //0 |
121 | _delay_us(1); |
122 | PORTD &=~ (1<<PD1); //0 |
123 | _delay_us(1); |
124 | PORTD &=~ (1<<PD1); //0 |
125 | _delay_us(1); |
126 | PORTD &=~ (1<<PD1); //0 |
127 | _delay_us(1); |
128 | PORTD |= (1<<PD1); //1 |
129 | _delay_us(1); |
130 | PORTD &=~ (1<<PD1); //0 |
131 | _delay_us(1); |
132 | //Stopbit
|
133 | PORTD |= (1<<PD1); //1 |
134 | _delay_us(1); |
135 | |
136 | |
137 | _delay_us(5); |
138 | |
139 | //Startbit
|
140 | PORTD &=~ (1<<PD1); //0 |
141 | _delay_us(1); |
142 | //U 85 0101 0101
|
143 | PORTD |= (1<<PD1); //1 |
144 | _delay_us(1); |
145 | PORTD &=~ (1<<PD1); //0 |
146 | _delay_us(1); |
147 | PORTD |= (1<<PD1); //1 |
148 | _delay_us(1); |
149 | PORTD &=~ (1<<PD1); //0 |
150 | _delay_us(1); |
151 | PORTD |= (1<<PD1); //1 |
152 | _delay_us(1); |
153 | PORTD &=~ (1<<PD1); //0 |
154 | _delay_us(1); |
155 | PORTD |= (1<<PD1); //1 |
156 | _delay_us(1); |
157 | PORTD &=~ (1<<PD1); //0 |
158 | _delay_us(1); |
159 | //Stopbit
|
160 | PORTD |= (1<<PD1); //1 |
161 | _delay_us(1); |
162 | |
163 | |
164 | _delay_us(5); |
165 | |
166 | //Startbit
|
167 | PORTD &=~ (1<<PD1); //0 |
168 | _delay_us(1); |
169 | //D 68 0100 0100
|
170 | PORTD &=~ (1<<PD1); //0 |
171 | _delay_us(1); |
172 | PORTD &=~ (1<<PD1); //0 |
173 | _delay_us(1); |
174 | PORTD |= (1<<PD1); //1 |
175 | _delay_us(1); |
176 | PORTD &=~ (1<<PD1); //0 |
177 | _delay_us(1); |
178 | PORTD &=~ (1<<PD1); //0 |
179 | _delay_us(1); |
180 | PORTD &=~ (1<<PD1); //0 |
181 | _delay_us(1); |
182 | PORTD |= (1<<PD1); //1 |
183 | _delay_us(1); |
184 | PORTD &=~ (1<<PD1); //0 |
185 | _delay_us(1); |
186 | //Stopbit
|
187 | PORTD |= (1<<PD1); //1 |
188 | _delay_us(1); |
189 | |
190 | |
191 | _delay_us(5); |
192 | |
193 | |
194 | //Startbit
|
195 | PORTD &=~ (1<<PD1); //0 |
196 | _delay_us(1); |
197 | //8 56 0011 1000
|
198 | PORTD &=~ (1<<PD1); //0 |
199 | _delay_us(1); |
200 | PORTD &=~ (1<<PD1); //0 |
201 | _delay_us(1); |
202 | PORTD &=~ (1<<PD1); //0 |
203 | _delay_us(1); |
204 | PORTD |= (1<<PD1); //1 |
205 | _delay_us(1); |
206 | PORTD |= (1<<PD1); //1 |
207 | _delay_us(1); |
208 | PORTD |= (1<<PD1); //1 |
209 | _delay_us(1); |
210 | PORTD &=~ (1<<PD1); //0 |
211 | _delay_us(1); |
212 | PORTD &=~ (1<<PD1); //0 |
213 | _delay_us(1); |
214 | //Stopbit
|
215 | PORTD |= (1<<PD1); //1 |
216 | _delay_us(1); |
217 | |
218 | |
219 | }
|
Kleiner Nachtrag: Der Code oben war zum Zurückstellen von 921600 (*) auf 115200 und müsste bei anderen Werten natürlich angepasst werden. (*) Was mit einem gewissen Fehler bei 1 us Bitzeit so halbwegs passt...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.