Hallo, ich habe ein Projekt wo ich einen AVR Master abwechselnd mit anderen AVRs per Funk verbinde. Als Funkmodul kommt das BTM222 zum Einsatz. Im Prinzip funktioniert alles bestens, sobald ich zuverlässig im Command Modus lande. Theoretisch muss man ja nur "+++" senden und man kommt in den Command Modus. In der Zwischenzeit warte ich zwischen jedem "+" 30ms und es klappt so lala. 3 mal ja und dann nicht mehr.... Das kostet mich nun schon Tage. Kann mir jemand Tipps geben wie ich das Modul sicher vom Online (Verbunden) Modus in den Command Modus bekomme um die Verbindung zu wechseln ? Wie gesagt, bin ich im Command Modus ist alles kein Problem mehr. Danke Juergen
Aktuell benutze ich folgenden Code und es scheint zu gehen zu 90% Ich denke man versteht was gemacht wird
1 | void connectBTM(uint8_t module) |
2 | {
|
3 | char mac[20]; |
4 | char pin[20]; |
5 | |
6 | if (module==1) |
7 | {
|
8 | sprintf(mac, "00126f21ee95"); |
9 | sprintf(pin, "1234"); |
10 | }
|
11 | else if (module==2) |
12 | {
|
13 | sprintf(mac, "00126f224049"); |
14 | sprintf(pin, "1234"); |
15 | }
|
16 | |
17 | uartClearRxBuffer(); |
18 | uint8_t de=35; // Delay *10ms |
19 | |
20 | uint8_t z=0; |
21 | do
|
22 | {
|
23 | uartClearRxBuffer(); |
24 | if (z>=3) |
25 | {
|
26 | z=0; |
27 | delayTimer(de*3); |
28 | uartPuts("\r"); // Erzeugt ERROR wenn bereits im Command Modus |
29 | delayTimer(de*3); |
30 | }
|
31 | delayTimer(de); |
32 | uartPut('+'); |
33 | while(uart.txpos > 0) // warten bis alles gesendet |
34 | nop(); |
35 | z++; |
36 | }while(uart.rxpos < 4); // Error oder OK +CR + LF |
37 | |
38 | uartClearRxBuffer(); |
39 | uartPuts("ATP="); |
40 | uartPuts(pin); |
41 | uartPuts("\r"); |
42 | while(uart.txpos > 0) |
43 | nop(); |
44 | while(uart.rxpos < 3) |
45 | nop(); |
46 | uartClearRxBuffer(); |
47 | |
48 | delayTimer(30); |
49 | |
50 | uartPuts("ATD="); |
51 | uartPuts(mac); |
52 | uartPuts("\r"); |
53 | while(uart.txpos > 0) |
54 | nop(); |
55 | while(uart.rxpos < 3) |
56 | nop(); |
57 | uartClearRxBuffer(); |
58 | |
59 | delayTimer(30); |
60 | |
61 | uartPuts("ATA\r"); |
62 | while(uart.txpos > 0) |
63 | nop(); |
64 | while(uart.rxpos < 3) |
65 | nop(); |
66 | uartClearRxBuffer(); |
67 | }
|
Aber schön ist das nicht wirklich. Das ist jetzt mal zum testen, bevor ich das ins eigentlich Programm einbaue. Wenn noch jemand eine bessere Möglichkeit hat, nur zu.
Ich habe mir den Programmcode jetzt nicht durchgelesen. Allerdings muss man vor und nach dem +++ jeweils eine Sekunde mit einer Sendepause warten! Machst Du das?
Ja die Pause davor und danach habe ich drinn. Zeiten bis zu 3 Sekunden schon getestet. Im Jetzigen Code versuche ich es einfach so lange bis es geht. Pause, "+", kurze Pause, "+", kurze Pause, "+", Pause, CR Das CR sorgt dafür, falls das Modul schon im Kommando Modus ist, bekommt man einen Error. Das "OK" Nach dem Wechsel in den Kommando Modus unterbleibt ja dann und kann dies nicht feststellen. Die kurze Pause ist derzeit 350ms und die Lange 3*350ms. Sind die Zeiten kürzer geht es nicht mehr Zuverlässig, sind diese länger auch nicht mehr. Das merkt man auch wenn man es per Terminal versucht. Da brauche ich auch einige Anläufe... Aus der Modem Zeit weiss ich noch, das man direkt "+++" Pause schicken konnte und das ging immer...... Im Moment scheint es so zu gehen. Es dauert eben ein wenig und es gehen 1-5 Versuche ins Land. Aber es scheint zu gehen. Kennt keiner einen besseren Weg ? Ich war schon am Überlegen den Reset zu benutzen. Das Modul kommt ja immer im Kommando Modus nach einen Reset. Dazu muss ich aber die Hardware ändern und würde ich gerne vermeiden.
V4.35 ist gut, da gibt es die Probleme mit dem Verschlucken von Zeichen im Command-Mode nicht mehr (war nur bis V4.22 so). Also bei mir klappt der Wechsel ohne Probleme, vielleicht solltest Du mal extern per Logic Analyzer, Scope oder notfalls weiterem PC schauen, was tatsächlich gesendet wird. Vielleicht wird da sporadisch etwas mitgesendet was die Sequenz stört.
Logic Analyzer habe ich nicht. Mit den Scope war nichts zu entdecken. Mitgehört mit dem PC habe ich auch schon mit dem PC. Keine unerwarteten Zeichen. Habe auch schon ein Minimalprogramm gemacht um das aus zu schließen. Gleiches Ergebnis. Ich habe sogar das Problem, das sich das Modul zwar Command mäßig umbuchen lässt, aber im Umbuchungs Vorgang hängt und auf nichts mehr reagiert. Dann hilft nur noch ein Reset.
Klingt zu simpel, aber hast Du mal das Modul selber getauscht?
Probiert mit 2 Modulen. Selber Effekt... Steht die Verbindung ist das Modul wirklich Super. Aber bis eine Qual. :-(
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.