Forum: Mikrocontroller und Digitale Elektronik GSM Modem AT-Befehl


von Thomas (Gast)


Lesenswert?

Hallo ihr!
Hat jemand Ahnung vom MC35i Terminal von Siemens.
Die Kommuniktation zwischen Hyperterminal und Modem klappt.
Jedoch wenn ich das Modem über mein µC ansprechen will, klappt es nicht, 
auf jeden Fall bekomme ich keine Antwort vom Modem.
Ich bin mir nicht ganz Sicher was alles rüber geschickt werden muss.

erst der AT-Befehl at , dann 0x0D (Enter) , muss das String-Ende-Zeichen 
dazwischen mit rüber oder gelöscht werden?
Hat jemand vielleicht eine deutsche Siemens Anleitung für das MC35i mit 
AT-Befehlen?

Danke....

von Niels H. (monarch35)


Lesenswert?

Thomas wrote:
> Hallo ihr!
> Hat jemand Ahnung vom MC35i Terminal von Siemens.
> Die Kommuniktation zwischen Hyperterminal und Modem klappt.
> Jedoch wenn ich das Modem über mein µC ansprechen will, klappt es nicht,
> auf jeden Fall bekomme ich keine Antwort vom Modem.

Hast du einen Pegelwandler am Start? Auch kann man hier Softwaremässig 
viel falsch machen...

> Ich bin mir nicht ganz Sicher was alles rüber geschickt werden muss.
>
> erst der AT-Befehl at , dann 0x0D (Enter) , muss das String-Ende-Zeichen
> dazwischen mit rüber oder gelöscht werden?

Probiers mal mit "0x0a" oder beides nacheinander 0x0d, 0x0a.

Ich nehme an, mit "String-Ende-Zeichen" meinst du die 0-Terminierung.
Nein, dieses Zeichen muss nicht gesendet werden. Allerdings verstehe ich 
nicht, was du jetzt mit "löschen" meinst.

> Hat jemand vielleicht eine deutsche Siemens Anleitung für das MC35i mit
> AT-Befehlen?

Google: "MC35i AT" Da gibts ne Referenz. Allerdings auf Englisch.

von Thomas (Gast)


Lesenswert?

Ich weis nicht mehr weiter.
Kommunikation zwischen Hyperterminal und Modem klappt
Kummunikation zwischen µC und Hyperterminal klappt ebenfalls
nur bei der Kommunikation zwischen Modem und µC bekomme ich keine 
Antwort vom Modem.
Habe alle möglichen Kombinationen durchgespielt mit 0x0D, mit 0x0D und 
0x0A, ohne beiden aber einfach keine Reaktion...

Englische Doku hab ich.

von Niels H. (monarch35)


Lesenswert?

Schliess doch erstmal den uc an den PC an, starte Hyperterminal und 
schau, ob der uc überhaupt sendet.

von Thomas (Gast)


Lesenswert?

Das funktioniert ja, kann ja auch antworten über Hyperterminal.
gesendet werden muss also, "at0x0D" und at ohne 0 Terminierung

von Niels H. (monarch35)


Lesenswert?

Ja, sorry, hab eine Zeile von dir überlesen :(...

Hast du auch nur "0x0a" probiert?
Also eines von beiden (0x0a,0x0d) braucht das Modem auf jeden Fall!

Jedenfalls glaube ich, daß man ohne Quelltexte dir so nicht weiter zu 
helfen ist..

von Niels H. (monarch35)


Lesenswert?

Ermmm moment...
Wenn wir von GCC sprechen, müsste dein String "ATZ\x0A" oder "ATZ\x0D" 
heissen.

von Thomas (Gast)


Lesenswert?

was heißt GCC?
was bedeute Z\  ?

So sind mein String aus:
unsigned char string[8]= "AT";

und über die Interrupt Routine sende ich ihn weg:
ISR(USART_UDRE_vect)
{
unsigned char buffer;                //Varibale für einzelne 
Stringzeichen
buffer = *(glob_USART_string++);
//Stringzeichen in buffer, danach Adresse erhöhen
  if (buffer !='\0')            //solange kein String-Ende weiter 
auslesen
    {
    UDR=buffer;
                   //Zeichen (8Bit) ins UDR Register zum versenden
    }
  else
    {
    buffer=0x0D;
    UDR=buffer;
    glob_USART_gesendet=0;
                  //fals String-Ende, senden wieder zulassen
    UCSRB= UCSRB &~(1<<UDRIE);
            //Interrupt sperren für UDR Register ist fertig
    }
}

von Niels H. (monarch35)


Lesenswert?

Thomas wrote:
> was heißt GCC?

Ich nehme an, du arbeitest mit WINAVR, oder? WinAVR ist eine sog. 
Toolchain; eine Sammlung bzw eine "Verkettung" berschiedener Programme.
GCC heist der Kompiler, der im dieser Toolchain WinAVR enthalten ist.

> was bedeute Z\  ?

"ATZ" ist das Hayes-Kommando, um dein Modem in einen definierten Zustand 
zurück zu holen. Es wird häufig, aber nicht immer, mit einem "OK" vom 
Modem quittiert.

"\x0d" ist eine Schreibweise, um das Steuerzeichen 0x0d gleich in den 
String mit einzupacken. Wenn ich also schreibe

unsigned char string[]="ATZ\x0d";

dann enthält "string" insgesamt 5 Zeichen: A,T,Z,das Steuerzeichen 0x0d, 
und die 0-Terminierung.

> ISR(USART_UDRE_vect)
> {
[...]
> }

Dein Quelltext scheint hier ok zu sein.
Du wartest im Hauptprogrammteil vermutlich darauf, daß 
"glob_USART_gesendet" auf 0 gesetzt wird. Hierbei gibts einen Fehler, 
den man sehr häufig macht.

Wie ist "glob_USART_gesendet" denn bitte definiert?

von Thomas (Gast)


Lesenswert?

Danke schonmal, bist ne super Hilfe!
An meinen Code kann es eigentlich nciht liegen, ich stecke ab und zu mal 
wieder den Hyperterminal an im zu sehen was der µC macht, und der 
schickt fein den String und wenn ich dann Antworte (über Hyperterminal) 
sehe ich das auch im Programm
"glob_USART_gesendet" ist nur ne vari damit der während ich auf die ISR 
warte kein misst macht, und den String zweimal versendet.
Hattest du schonmal das MC35i in Verwendung?

von Niels H. (monarch35)


Lesenswert?

Bitte beantworte mal meine Frage: wie ist "glob_USART_gesendet" 
definiert?

Das Problem ist nämlich, wenn diese variable nicht "volatile" definiert 
ist, wartet ein "while (glob_USART_gesendet!=0) ;" im Hauptprogramm 
endlos.....

Jedenfalls habe ich speziell mit einem MC35i noch nicht gearbeitet, kann 
mir aber nicht vorstellen, daß es sich wesentlich anders verhält, wie 
irgend ein anderes Modem.

von Thomas (Gast)


Lesenswert?

Ne leider nicht, habe alle globalen Variablen auf Volatile.

von Axel R. (Gast)


Lesenswert?

Hi,

ist die Flusskontrolle/Hardwarehandshake an oder aus? (RTS CTS)

Gruß
Axelr.

von Niels H. (monarch35)


Lesenswert?

Flusskontrolle wäre auch mein nächster Gedanke. Kein CTS/RTS, kein 
XON/XOFF.

Ausserdem versuchsweise mal die Pins RXD/TXD vertauschen.

von Frank K. (frank)


Angehängte Dateien:

Lesenswert?

Ich nutze die angehängte "Schaltung" (3 Stecker, 2 Dioden 1N4148) zum 
Mittracen von RS232 Verbindungen. Funktioniert prima, am PC kannst Du 
mit Hyperterminal o.ä. die gesendeten Daten anschauen. Vielleicht hilft 
Dir das weiter.

von Niels H. (monarch35)


Lesenswert?

Frank K. wrote:
> Funktioniert prima,

staun

Das sind Tipps wofür ich dieses Forum liebe :)
Danke, ich denke, sowas kann man immer gut gebrauchen.

von Axel R. (Gast)


Lesenswert?

ich nehm immer portmon von sysinternals

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Damit kannst Du aber nicht die Kommunikation zwischen zwei Geräten 
mithören - hier redet ein µC mit einem Modem.

von Niels H. (monarch35)


Lesenswert?

Thomas:
Problem behoben oder keine Böcke mehr?

von Thomas (Gast)


Lesenswert?

Klappt immernoch nicht. Muss mir mal die Schaltung zum Mittracen 
aufbauen, brauch aber erst Bauteile. Habe nochmal eine Frage zum 
Nullmodemkabel reingestellt. Vielleicht kannst du mir die beantworten.
Danke...

von Willi (Gast)


Lesenswert?

Hallo Thomas,

ich habe soetwas einmal mit einem C35 gemacht. Das müßte vom Code das 
selbe sein. Ist aber asm. Wenn Du willst kann ich es Dir als Vorlage 
geben.
Ansonsten achte auf 19200 Baut, das Siemens nimmt das sehr genau. Als 
Pegelwandler habe ich nur je 1x 100ohm in die RX/TX und am RX vom C35 
eine 3,3V Z-Diode nach Masse verwendet.

Gruß Willi

von Thomas (Gast)


Lesenswert?

Also, lag erstmal daran das RX und TX auf dem Eintwicklungsboard 
getauscht sind. Bekomme jetzt antwort vom Modem.
Sehr komisch ist nur, dass wenn ich das Echo nicht ausschalte nur at 
zurückbekomme und wenn echo aus ist, nur die numerische Antworten 0 (ok) 
4 (error). Ohne atv0 (numerische Antwort) sehe ich noch nicht mal das 
okay. Er kann mir komischer Weise kein Text anzeigen, wie es der 
Hyperterminal macht.
Bekomme bei at+cgmi als Anwort: <cr> <lf> <cr> , bloß meine Anwort als 
Text fehlt dazwischen. Bei anderen Befehlen das selbe.

Jemand ne Idee?

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

Das geht prima mit portmon, besser, als Kabel löten:)
im Anhang ein Screenshot

Das RX-TX vertauscht sind, passiert wohl allen.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

hier als hex-Ausgabe

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
Noch kein Account? Hier anmelden.