Forum: Mikrocontroller und Digitale Elektronik µC+gsm -> Problem


von Alex O. (elex)


Lesenswert?

Guten Tag!

 Wir versuchen derzeit ein GSM Modul der Firma Roundsolutions mittels µC 
über RS232 anzusteuern. Wenn wir das schicken einer SMS mittels PC 
simulieren funktioniert alles ohne Probleme. Verwenden wir aber den µC 
zum Schicken der SMS, wird die SMS nicht abgeschickt.
 Um den Fehler zu lokalisieren lesen wir mittels Hyper Terminal die 
Kommunikation zwischen µC und GSM-Modul mit! Alle Kommandos, welche zur 
Einstellung dienen geben ein OK zurück!
 Der Befehl zum SMS schreiben besteht aus zwei Kommandos:
 AT+CMGS=+431234567 <CR>

 Dann bekommt man das Prompt Zeichen (">") vom GSM Modul zurück.

 Nun kann man den Text schreiben und mit CTRL + Z abschließen (Hex: 1A).

 Nach diesem Befehl bekommen wir aber kein OK zurück und die SMS wird 
nicht gesendet.

 Wir verwenden bei dem PC und dem µC die komplett gleichen befehle. 
Mittels PC funktioniert es und beim µC nicht.

 Hier noch einmal ein Mitschnitt der Kommunikation: 
http://img329.imageshack.us/my.php?image=rs232lm9.gif

 Vielen Dank im Voraus Elex

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was sind die kleinen Klötzchen vor <CR>? Sendet Ihr möglicherweise LF-CR 
anstelle von CR-LF?

Was für ein Programm soll diesen "Mitschnitt" erzeugt haben? 
Hyperterminal? Glaube ich nicht; Hyperterminal übersetzt Steuercodes 
nicht in Klartext und kann auch nicht zwei Datenkanäle (µC->GSM + 
GSM->µC) gleichzeitig auslesen.

von Elex (Gast)


Lesenswert?

Die kleinen Klötzchen sind die Symbole die halt das Programm nicht 
darstellen kann, bei dem Programm handelt es sich um Docklight, das ist 
extra zum Analysieren. Und Hyperterminal kann das selbe, wir haben 
Docklight nur aus den Grund um uns das Programm auch in Binär und Hex 
anschauen zu können (zum Fehler suchen, hat aber bis jetzt nicht viel 
gebracht).
Und das mit den 2 Datenkanälen, haben wir so gelöst, das wir uns 
parallel an die LTG zwischen µC und GSM Modul gehängt haben.

Wir senden nur <CR> Das <LF> sendet uns das GSM Modul automatisch 
zurück.

von Axel R. (Gast)


Lesenswert?

Auszug aus:

http://telecom.tlab.ch/~zogg/Dateien/position_senden.zrx.txt

/* --------------------- SMS SENDEN BEGINN 
--------------------------------------- */

  /* auf GSM-Modem (COM1) umschalten und 2 Sekunden warten */
  CALL ZocSetDevParm "[1]COM1:19200-8N1|8|250"
  CALL ZocDelay 2

  /* Löschen des alten SMS-Textes (zur Sicherheit!) */
  SMS_Text = xxxxx

  /* Zusammenstellen des neuen SMS-Textes */
  SMS_Text = " Datum: "||datum||" UTC_Zeit: "||utc_zeit||" Breite: 
"||breite||n_s||" Länge: "||laenge||e_w


  /* SMS an Ziel-Tel-Nummer senden, Abschluss mit Return (^M)  */
  CALL ZocSend "AT+CMGS="""ziel_tel_nr"""^M"
  CALL ZocWait ">"

  /* Nach Empfang des Zeichens > wird der Text eingegeben, Abschluss mit 
<Crtl>+<Z> (^Z) */
  CALL ZocSend SMS_Text"^Z"
  CALL ZocWait "OK"

  /* --------------------- SMS SENDEN ENDE 
----------------------------------------- */
Darin bestätigt sich mein Verdacht:
die Telefonnummer muss in Gänsefüsschen stehen? Sieht zumindest fast so 
aus...

Gruß und viel Erfolg
AxelR.

http://www.google.de/search?hs=4U2&hl=de&client=firefox-a&rls=org.mozilla%3Ade%3Aofficial&q=sms+senden+im+Textmode&btnG=Suche&meta=

von Elex (Gast)


Lesenswert?

Das mit den Gänsefüsschen, haben wir einmal mit und einmal ohne 
versucht, per Hyperterminal funktioniert beides Einwandfrei, und auch 
mittels µC funktioniert ja der Erste Teil des Befehls (erkennt man 
dadurch, da ja das GSM Modul mit dem ">" Zeichen antwortet, nur STRG+Z 
erkennt er uns nicht, und das haben wir mit 0x1A übermittelt...werden 
morgen mal "^Z" testen, also so wies hier im Programm steht, vielleicht 
versteht das der µC...danke für die Hilfe

LG

von Axel R. (Gast)


Lesenswert?

Elex wrote:

> morgen mal "^Z" testen, also so wies hier im Programm steht, vielleicht
> versteht das der µC...danke für die Hilfe
>
> LG

Ich kann Dir nicht sagen, ob der Controller das versteht. Das hängt ja 
wohl eher vom verwendeten Compiler, bzw. von der verwendeten 
Programmiersprache ab.

Was Rufus sagte:
die roten "Klötzchen"

Wenn dein Programm CTRL-Z richtig als "SUB" anzeigt, schickst Du auch 
ein CTRL-Z. daran liegts nicht. Wenn das Monitorprogramm jedoch in der 
Lage ist, Steuerzeichen als solche darzustellen, dann sind die roten 
klötzchen doch irgentwie ein Indiz auf irgentein nicht korrekt 
gesendetes Zeichen, da der Monitor keine Entsprechung dafür findet.
Ich denke mal auch, das <CR> und <LF> evtl. vertauscht sind und daher 
die Befehle durcheinander geraten. die <NULL> sollte ja wohl auch nicht 
sein, oder?
Du kannst ja mal den Code posten...

von Elex (Gast)


Angehängte Dateien:

Lesenswert?

Also im Anhang ist gleich der Quelltext, also das mit CR und LF kann ich 
mir nicht vortsellen, da wir das Zeichen LF nicht einmal verwenden, das 
kommt lediglich vom GSM Modul als Antwort.
Aber wir sind sowieso schon Ratlos, danke für eure Hilfe!

von Peter (Gast)


Lesenswert?

... genau das wäre wohl das Beste, wenn du einfach mal deinen Code 
posten könntest. Ich habe selbst auch schon etwas mit den Modulen von 
Roundsolutions angestellt und war recht zufrieden mit den Dingern.

Eins kann ich dir aber mit Sicherheit jetzt schon sagen, nämlich dass 
die Telefonnummer in Gänsefüßchen eingepackt werden muss. Das steht aber 
auch alles in denen ihrem Datenblatt drinne. Und das ist wirklich sehr 
ausführlich und übersichtlich.

Was vielleicht auch gemacht werden sollte, bevor man eine SMS abschicken 
möchte ist, vorher zu checken, ob das GSM-Modul im Netz eingebucht ist 
und Empfang vorhanden ist.

Welches Modul verwendet ihr denn genau? ... schon das neue mit 
integriertem GPS-Modul?

Was stellt ihr eigentlich mit eurer Applikation an? ... wenn man mal 
fragen darf

Gruß Peter

von Elex (Gast)


Lesenswert?

Ja wir sind eine Matura Gruppe, und unsere Projektbeschreibung lautet, 
das wenn ein Unfall mit dem Wagen passiert die GPS Daten eingelesen und 
per sms verschickt werden. (Eigentlicht genau die Application wie oben) 
nur das wir halt ne andere Programmiersprache verwenden. Ja das mit dem 
" " wie gesagt einmal mit einmal ohne, und beides funktionierte solange 
es über den Hyperterminal lief,

und noch zum Quelltext, der letzte <CR> Befehl nach dem STRG+Z war nur 
ein Test ob es vielleicht damit funktioniert, allerdings fehlanzeige.

Wir haben einen Terminal ohne integriertem GPS Modul, da sonst die 
Hardware zu mikrig gewesen wäre für ein Matura Projekt und wir viele 
Einzelteile benötigen, damit das Projekt größer wirkt =) . Genaue 
Bezeichnung: TER-GX105K.

LG

von Lanius (Gast)


Lesenswert?

msg="AT+CMGF=1";
for(i=0;i<=9;i++)

von Peter (Gast)


Lesenswert?

Oh ha na diese Projekte gibt es doch nun auch schon wie Sand am Meer.

Egal ... also was ich jetzt überhaupt nicht erkennen kann ist, wie du 
die Initialisierung des GSM-Moduls durchführst ... Modul einschalten, 
Baudrate abgleichen, Pinnummer eingeben usw.
Deswegen die Frage ... ist das der ganze Code? sprich du stellst vor dem 
Senden der SMS nur auf Textformat um und schaltest die 
Benachrichtigungen bei einem SMS-Eingang ein? sonst nix

Wie sieht es mit der Flusskontrolle aus? Wie hast du den µC an den UART 
des GSM-Moduls angeschlossen?

Ich hatte mir eine eingene Platine gebaut und hatte ein Modul zur 
Montage auf der Leiterplatte.
Ich denke mal nicht das die Handhabung des Terminals anders ist.

von Alex O. (elex)


Lesenswert?

Wir verwenden derzeit ein µC Board welches wir von der Schule bekommen 
haben mit einem 80517er. Der Anschluss des GSM Moduls erfolgt mittels 
Seriellen Kabel, da auf dem Board bereits 2 RS232 Schnittstellen raus 
geführt sind (eine programmier und eine zweite). Von der RS232 
Schnittstelle verwenden wir nur RxD TxD und GND daher haben wir keine 
Hardware Flussteuerung. Das GSM-Modul haben wir nicht initialisiert oder 
eingeschalten, da es eingeschalten ist sobald es an die Steckdose 
angeschlossen wird und beim Test mittels Hyper terminal hat es auch 
immer ohne diese Befehle funktioniert.

Unser erstes Ziel war es eine SMS mittels µC weg zuschicken und haben 
dazu ein Sample file genommen welches Daten mittels RS232 schickt und 
dieses auf unsere Bedürfnisse verändert. Dies geht ja soweit recht gut 
bis auf den letzten Befehl.

Ich denke das große Problem ist warum funktioniert das Senden der 
Befehle mittels PC aber mittels µC nicht! An was kann es hier liegen! Es 
ist ja auch nicht so, dass der µC bei keinem einzigen Befehl eine 
Antwort gibt, es ist ja nur der letzte Befehl!

@Lanius: Was meinst du denn mit deinem Vorschlag?

von Lanius (Gast)


Lesenswert?

msg="AT+CNMI=2,1";
for(i=0;i<=11;i++)

sendet 12 Zeichen, da kommen die NULLen her denke ich

von Lanius (Gast)


Lesenswert?

also

msg="AT+CNMI=2,1";
for(i=0;i<=11;i++)

sendet 12 Zeichen (<=), der String hat aber nur 11 Zeichen.
Die NULL steht am Ende vom String.

Ich habe aber keine Ahnung was euer Modul am erwartet und würde mal

msg="AT+CNMI=2,1\r";
for(i=0;i<=11;i++)

testen.

Das die Schleife länger als der String ist kommt öfters im Quelltext 
vor.

von Lanius (Gast)


Lesenswert?

obwohl ... ich habe länger nicht programmiert... \r geht da garnicht.
Jedenfalls sind eure Schleifen zu lang.... denke ich :)

von Lanius (Gast)


Lesenswert?

irgendwie habe ich das Gefühl ich mache mich gerade lächerlich...
Schreibe ich Müll?

von Lars B. (l-1)


Lesenswert?

Hallo,

hoffe ich bin hier im richtigen Thread.


Komme leider beruflich nicht aus dem Bereich, der in diesem Forum 
fachmännisch bearbeitet wird.
Hoffe trotzdem auf Hilfe, da mich die Suche hierher verlinkt hat.


Ich möchte in meinem PKW die Standheizung über Handy aktivieren.
Das Einschalten soll sowohl von meiner Rufnummer als auch von anderen 
bzw. ohne Nummernkennung (z.B. vom Festnetz aus) funktionieren.
Bis dahin komm ich mit, nur:
Aus Sicherheitsgründen soll bei anderen Nummern eine Codeabfrage 
erfolgen.

Handy, Datenkabel, Ladekabel habe ich bereits.

Wie kann ich so etwas realisieren?

Habe da zwar etwas bei Conrad gefunden, kann aber leider kein Programm 
in CBasic schreiben.

Weiterhin suche ich für das zu verwendende Nokia 8850 das 
Datenprotokoll, das über das Datenkabel verfügbar ist.


Natürl. bin ich für anderweitige Vorschläge offen, die auch zum Ziel 
führen.
Vielleicht gibts ja noch andere Lösungen.

Vielen Dank im Voraus für eure Bemühungen.



Gruß, Lars






von Anton S. (gion_toji)


Lesenswert?

2 Lanius: du machst dich mitnichten lächerlich, im Gegenteil die Sache 
mit Text-Mode (CMGF=1) ist eine gute Idee, sollte immer gemacht werden

@ Sourcecode:
alter Schwede, das sollten wir aber nochmal üben
1. entscheidet euch mal für eine Sprache (deutsch oder englisch) und 
bleibt konsequent dabei. Also entweder heissen die Variablen "sendung" 
etc. oder "msg".
2. Lagert das Senden eines AT-Befehls in eine eigene Funktion aus. Man 
merkt schon, dass ihr per copy&paste programmiert habt. Copy&paste ist 
pfui!
3. schreibt nicht sendung=0x0D sondern sendung='\r' das macht das ganze 
lesbarer
4. macht das senden nicht so:
    msg="AT+CMGS=+436769451988";
    for(i=0;i<=21;i++)
sondern so:
    msg = "AT+CMGS=+436769451988";
    for(i = 0; msg[i] != '\0'; i ++)
Dann habt ihr auch nicht das Problem mit den zu langen Schleifen. 
Vielleicht erledigt sich dann das eigentliche Problem (kein OK auf den 
Befehl) von selbst

5. was bitte ist das: "for(t=0;t<=37000;t++)"? soll das aktives Warten 
sein? Wieso macht ihr das so? Es kommt doch schon ne delay-Anweisung in 
eurem Code vor, wieso benutzt ihr nicht die?

6. Das Modul schickt euch auch was zurück, OK z.B. Ihr müsst diese 
Rückgabe-Dinger prüfen und darauf reagieren. Sollte es IM AUSNAHMEFALL 
so sein, dass euch die Antwort nicht interessiert, dann benutzt z.B. 
ATQ1+CMGS=12345 dann aber im nächsten Befehl ATQ0+bla

Um euch mit dem eigentlichen Problem zu helfen, brauchen wir den 
hex-trace, sonst wird das nix

Bitte nicht als persönliche Anmache verstehen aber das soll doch ne Art 
Prüfungsarbeit sein, oder? Na dann wollen wir doch, dass es auch nach 
was aussieht

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.