Kommandomodus BTM-112, BTM-222, BTM-182

Gast #2770130
Lesenswert?
• ▲
▼
Hallo,

ich verwende in einem Projekt ein BTM-182. Soweit funktioniert alles 
ganz gut. Einzig der Wechsel aus dem Datenmodus in den Kommandomodus 
funktioniert nicht.

Ich habe im Forum gesucht und verschiedene Threads gefunden. Alle 
angegebenen Lösungsvorschläge ausprobiert und keinen Erfolg damit 
gehabt.

Das Problem beschätigt mich jetzt seit ca. 2 Wochen. Auch Googeln hat 
leider keine neuen Erkenntnisse gebracht.

Hier was ich tue
1
/* ... Verbindung wurde aufgebaut, Daten empfangen nun wechseln in  
2
 * Kommandomodus um PIN zu ändern
3
 */
4

5
/* wait so modem can recognize escape sequence */
6
_delay_ms(1000);
7

8
/* set modem to command mode */
9
st_usart.st_sendBuffer.u8_base[0] = '+';
10
st_usart.st_sendBuffer.u8_base[1] = '+';
11
st_usart.st_sendBuffer.u8_base[2] = '+';
12
st_usart.st_sendBuffer.u8_base[3] = 0x0D;
13
st_usart.st_sendBuffer.u8_count = 4;
14
            
15
/* send data 
16
 * (Methode sendet "u8_count"-Zeichen per "Data Register Empty" Interrupt)
17
 */
18
prepareSendUSART();
19
            
20
/* Hier kann ich dann auf meinem Terminal die Zeichen "+++" mit Zeilenumbruch (0x0D) sehen */
21

22
/* wait some time */
23
_delay_ms(1000);
24

25
/* An dieser Stelle hätte ich eine Antwort des Modem erwartet, aber 
26
 * nie eine erhalten weder ERROR noch OK.
27
 */

(HINWEIS: ZUM BESSEREN VERSTÄNDNIS WAS GENAU GESENDET WIRD, WIRD JEDES 
BYTE IN '<' UND '>' EINGESCHLOSSEN. DIE KLAMMERN WERDEN NICHT 
MITGESENDET!)

Wenn ich jetzt den PIN mittels 
<'A'><'T'><'P'><'='><'1'><'2'><'3'><'4'><0x0D> ändern will, dann wird 
auch dieser Befehl über das Terminal übermittelt. Das Modem hat also 
nicht in den Kommandomodus gewechselt.

Es soll aber laut <'A'><'T'><'I'><'?'><0x0D> auf die Sequenz 
<'+'><'+'><'+'><0x0D> lauschen.

Kann mir jemand die genaue Sequenz mit Timings sagen?

Bitte verwendet für einzelne Bytes eine Umklammerung mit "<>". Beispiel: 
<'+'><'+'><'+'><0x0D>
Damit klar ist welche Zeichen tatsächlich gesendet werden müssen. Klar 
ist auch das die "<>" nicht gesendet werden dürfen!

Als Terminal verwende ich HTerm 0.8. Ich habe an die TX und RX Leitungen 
des Modems zustätzliche UART-Empfangsleitungen gelötet, so dass ich per 
MAX3232 in weiteren Terminals mitlesen kann was zwischen uC (AT90USB82) 
und Modem tatsächlich gesendet wird.
Gast #2770483
Lesenswert?
• ▲
▼
Moin,

habs mit folgender Sequenz probiert, hat auch nicht funktioniert
1
/* wait so modem can recognize escape sequence */
2
_delay_ms(500);
3

4
/* set modem to command mode */
5
            st_usart.st_sendBuffer.u8_base[0] = '+';
6
st_usart.st_sendBuffer.u8_count = 1;
7
            
8
/* send data */
9
prepareSendUSART();
10
        
11
/* wait some time */
12
_delay_ms(200);
13
            
14
st_usart.st_sendBuffer.u8_base[0] = '+';
15
st_usart.st_sendBuffer.u8_count = 1;
16
            
17
/* send data */
18
prepareSendUSART();
19
            
20
/* wait some time */
21
_delay_ms(200);
22
            
23
st_usart.st_sendBuffer.u8_base[0] = '+';
24
st_usart.st_sendBuffer.u8_count = 1;
25
            
26
/* send data */
27
prepareSendUSART();
28
            
29
/* wait some time */
30
_delay_ms(1000);
31
            
32
/* wait until modem is in command mode this does not work */
33
//while (st_usart.st_receiveBuffer.u8_base[0] != 'O') {};
34

35
/* modem now in command mode */
36

37
/* ... Hier sende ich dann ein Kommando ... */
38

39
/* get modem back to on-line mode */
40
st_usart.st_sendBuffer.u8_base[0] = 'A';
41
st_usart.st_sendBuffer.u8_base[1] = 'T';
42
st_usart.st_sendBuffer.u8_base[2] = 'O';
43
st_usart.st_sendBuffer.u8_base[3] = 0x0D;
44
st_usart.st_sendBuffer.u8_count = 4;
45

46
/* send data */
47
prepareSendUSART();
48

49
/* wait some time */
50
_delay_ms(100);

Das Modem bleibt im Daten Modus und reicht munter alle Eingabe an das 
angebundene Terminal weiter ...

Habe schon verschiedene Zeiten probiert, bis jetzt hat es mit keiner 
Wartezeit funktioniert.
Moderator Persönliche Seite #2770495
Lesenswert?
• ▲
▼
bkiepke schrieb:
> /* set modem to command mode */
> st_usart.st_sendBuffer.u8_base[0] = '+';
> st_usart.st_sendBuffer.u8_base[1] = '+';
> st_usart.st_sendBuffer.u8_base[2] = '+';
> st_usart.st_sendBuffer.u8_base[3] = 0x0D;
> st_usart.st_sendBuffer.u8_count = 4;

Nach den 3 Pluszeichen darf für eine Sekunde kein anderes Zeichen 
kommen, auch kein CR (0x0D). Also:

st_usart.st_sendBuffer.u8_base[0] = '+';
st_usart.st_sendBuffer.u8_base[1] = '+';
st_usart.st_sendBuffer.u8_base[2] = '+';
st_usart.st_sendBuffer.u8_count = 3;
// jetzt senden
// dann 1000ms warten

Gruß,

Frank
Gast #2770551
Lesenswert?
• ▲
▼
... zumindest manchmal.

Sehr merkwürdig. Mit etwa 20 Versuchen hat es 2 mal geklappt. Da ist es 
wahrscheinlich einfacher die Verbinung von der anderen Seite zu kappen 
und dann auf dem Modem die Befehle auszuführen.

Wenn jemand noch Ideen hat, immer her damit.

Danke und Gruß
Benny

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.