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
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.
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.
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=
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
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...
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!
... 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
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
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.
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?
msg="AT+CNMI=2,1"; for(i=0;i<=11;i++) sendet 12 Zeichen, da kommen die NULLen her denke ich
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.
obwohl ... ich habe länger nicht programmiert... \r geht da garnicht. Jedenfalls sind eure Schleifen zu lang.... denke ich :)
irgendwie habe ich das Gefühl ich mache mich gerade lächerlich... Schreibe ich Müll?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.