Hi Leute Ich in hier gerade am experimentieren mit einem GSM-Modem, steuerung erfolgt über AT-Befehle. Wenn ich es am PC-RS232 Port anschliesse schreibe ich zuerst: (Tastendruck in "<>") AT+CMGF=1 (in Textmode schalten) <ENTER> AT+CMGS=078xxxxxxx <ENTER> "Nachricht" <Ctrl-Z> Ich habe folgende ASCII Codes: Enter: 13 Ctrl-Z: 26 stimmen die beiden Codes? Lg
okay danke hat dann vieleicht jemand eine idee wieso bei mir trotzdem keine SMS ankommt?
versuche mal AT+CMGF=1 (in Textmode schalten) <ENTER> AT+CMGS="+4978xxxxxxx" <ENTER> "Nachricht" <Ctrl-Z> AT+CMSS=1 (senden) <ENTER>
Hm, hats nicht gebracht. die vorwahl müsste +41 lauten da ich in der schweiz wohne;) vorallem habe ichs mit dem Terminalprogramm von Shamrock problemlos geschafft SMS' zu versenden. Also muss es wohl an den Codes liegen, oder muss ich noch was mit der UART Schnittstelle machen? konfigurieren oder sonst was? Lg
könntest du mir bitte den kompletten quellcode posten mit CR und LF eingesetzt?
okay, hab mal eigenständig ein paar Kombos ausprobiert, gebracht hat's keine
#13 als Enter ist in der Tat ungewöhnlich, MAC hat sowas glaub ich, mal gemacht. Linux hat nur Zeilenvorschub (#10), Windoof macht das Beste draus und nimmt beides (#13#10) :-) #13#10 ist aber gängig, auch für andere Protokolle (HTTP usw.), wenn du einen Quelltext brauchst, liefer doch erst einmal deine Vorlage.
$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Print "AT+CMGF=1" Waitms 10 Print Chr(13 ) Print "AT+CMGS=0788027939" Waitms 10 Print Chr(13 ) Print "Test Sms Von Mc2" Print Chr(26 ) Waitms 10
war vom PC aus nicht notwendig, aber ich versuchs grad ma und gebe rückmeldung
also, ein CR nach Chr (26) brachtes nicht und wenn ich Print Chr(13) & Chr(10) schreibe krieg ich ne Fehlermeldung, kanns also gar nicht kompilieren
Dann schreib jedes Zeichen in ne eigene Zeile. Also in Microsoft-Basic hat das mit dem Verketten so funktioniert...
Setz die Waitms 10 hinter die Print Chr(13) davor bringen die garnix... Und 10ms könnten was kurz sein.
Also vom PC as hat es mit obriger Variante funktioniert? Kann es sein das du noch die PIN setzen musst? AT+CPIN="xxxx" Also die richtige Reihenfolge wäre dann: AT+CPIN="xxxx"<ENTER> AT+CMGF=1<ENTER> AT+CMGS="+49xxxxxxxxx"<ENTER> Test123<CTRL-Z> Nach jedem Enter würde ich nen Moment warten (10ms sind etwas knapp). Btw: kannst du mal die Rückgabecodes posten?
ne, hab die SIM so konfiguriert das ich KEINE Pin eingeben muss. Rückgabecodes? Also am PC hat er damals einfach alles mit einem OK quittiert, nach AT+CMGS="+49xxxxxxxxx"<ENTER> hat er ein ">" geschrieben wohinter dann mein Text kahm.
Simon K. wrote:
> Muss man nicht auf das Echo JEDES Zeichens warten?
Gibt solche und solche Modems. Aber ansich kann es auch daran liegen.
Kann man mal testen, einfach ne eigene Print Funktion die jedes Zeichen
mit einem Delay ausgibt und mit nem #13 terminiert.
aber im Terminalprogramm aufm PC schreib ich ja eigentlich auch "AT+CMGF" und erst dann ein ENTER oder?
Print "AT+CMGF=1\r\n" oder Print "AT+CMGF=1" Print Chr(13) Print Chr(10) --> Hier vom Handy LESEN! ob ein OK kommt Print "AT+CMGS=0788027939\r\n" (oder wie oben...) --> Hier vom Handy LESEN! ob ein OK kommt Print "Test Sms Von Mc2" Print Chr(26) Print "\r\n" (oder wie oben...) --> Hier vom Handy LESEN! ob ein OK kommt Du könntest alternativ auch mal mit einem Terminalprogramm deine gesendeten Zeichen und die vom handy gesendetn "abhören" z.B. mit hTerm der Zeigt dir auch die Tatsächlichen ASCII codes an.
aso wenn ich mit hterm at+cmgf=1 sende mit der einstellung "send on enter" = CR dann kommt "no carrier"
okay, habs jetzt mit hterm hinbekommen: einstellung bei "send on enter" muss CR-LF sein. Dann kann ichs mim PC ansteuern. Ich mach mal den ganzen quelltext durch, welches fenster soll ich dann reinkopieren? received data oder transmitted data?
okay, das einzige woran ich scheiterte war das "ctrl-Z" (wusste nicht wie ichs eingeben soll in hterm)
Bascom schreibt nach einem Print automatisch ein CR+LF ausser man macht ein ; hinter das Print ! Print "blabla" ; ' kein CR-LF danach dann kann man das CR-LF selber senden, aber auch das ; danach ! Print Chr(13) ; Chr(10) ; PS: hatten wir das heute nicht schonmal :-/
also mein jetziger quellcode lautet, unter berücksichtigung, dass Bascom selber CR-LF sendet wie folgt: Print "AT+CMGF=1" Waitms 100 Print "AT+CMGS=0788027939" Waitms 100 Print "Test Sms Von Mc"; Print Chr(26); bei den letzten beiden brauch ich ja dann ein ";" weil ich da kein CR-LF will funktioniert aber auch noch nicht...
Wie hast Du das genau verkabelt ? Einem Handy reichen doch normal die beiden Datenleitungen nicht aus um darauf zu reagieren, da müssen doch auch ein paar andre mithelfen, DTR, CTS oder wie die heissen.
verkabelt hab ich einfach das kabel das ich benutzt habe um PC-Modem zu verbinden umgestöpselt auf Modem-Atmega32
Microdubsi wrote:
> verkabelt hab ich einfach das kabel ...
Details !
Schaltplan usw.
welches GSM teil
also, das Modem ist das TC35i (von Siemens) Ein Schaltplan kann ich leider nicht bieten da ich nichts selber verkabelt habe. Aber als Board hab ich das Atmega32 Prototype board von embedit. mit "Pegelgerechtem" RS232 ausgang. und für die verkabelung wie gesagt einfach ein Modem-Kabel genommen
und von wegem gekreutem und ungekreuztem kabel hab ich gerade nochmals geschaut: Als Faustregel kann man annehmen: Befinden sich an den beiden Enden des Kabels die gleiche Art von Anschlüssen (Männchen = Stecker; Weibchen = Buchse), dann benötigt man ein gekreuztes, also ein Nullmodem-Kabel. Am PC-Anschluss selbst befindet sich ein Stecker, also ein Männchen, sodaß am Kabel auf dieser Seite eine Buchse (also ein Weibchen) sitzen muss. Da am AVR laut obigem Schaltbild eine Buchse verbaut wird, muss daher an diesem Ende des Kabels ein Stecker sitzen. Das Kabel hat daher an einem Ende einen Stecker und am anderen Ende eine Buchse und ist daher ein normales Modem-Kabel ( = nicht gekreuzt). Quelle: http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART Das Modem besitzt einen Weiblichen anschluss PC/MC-Board: Männlich
Hast du den Mal das was dein uC sendet überwacht per PC? Und auf dem uC die Rückmeldung des Handys ausgewertet?
Microdubsi wrote:
> http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
Aber wie auch das Tutorial schon sagt: Es ist nur eine Faustregel.
Wenns nicht klappt, kann die Ursache immer noch darin liegen, dass die
Steckerbelegung gekreuzt ist. Im Zweifelsfall also immer mal mit einem
Voltmeter nachmessen. An einem der beiden Pins 2 oder 3 liegen -12V an.
Am anderen der beiden Pins ist nichts. Die -12V müssen jeweils an der
Gegenseite auf den Pin kommen an dem nichts anliegt.
Ich würde auch sagen: versuche mal die Modem-Antworten nach deinen Kommandos auszulesen. So findet man Fehler am schnellsten. 10ms Wartezeit kommen mir auch gewagt vor. Testweise kann man hier ja mal einfach 1000ms nehmen.
also, neuer Status: Hab mir beim grossen Roten ein Nullmodem-Kabel geholt damit ich am PC lesen kann was ankommt, das sieht alles gut aus, auch der Sende-Befehl! Ich glaube, das es daran liegt, dass ich das OK was mir mein Modem nach jedem Befehl sendet nicht aufnehme. Wie muss ich das machen? mit nem Input? Lg
also, mein Momentanes Programm sieht so aus: $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Waitms 1000 Print "AT" Waitms 1000 Print "AT+CMGF=1" Waitms 1000 Print "AT+CMGS=0788027939" Waitms 1000 Print "Test Sms Von Mc"; Waitms 1000 Print Chr(26); Waitms 1000 End Es kommt genauso auf dem Modem an als wenn ich das Programm vom PC aus senden würde. Aber es kommt keine SMS an, Ideen?
Wie ich bereits darlegte, könnte es helfen, nach dem Chr(26) noch ein CR zu senden - also nimm einfach das Semikolon dahinter weg.
schliesse deinen microcontroller doch mal mit dem nullmodemkabel an deinen pc an. speichere die kommunikation in ein file und gucke es dir mit einem hexeditor an. dann siehst du genau, (ob) und was gesendet wird (z.B. wie deine "returns") aussehen. alternativ kannst du auch den TX deines modems an den pc hängen und den RX an deinen microcontroller. dann kannst du die (fehler-)meldungen des modems mitlesen während dein mc die sms senden will.
das AT hab ich einfach aus verzweiflung eingefügt das CR nach dem (26) hat's nicht gebracht das 3. mit dem Hex-edit hab ich noch nicht ausprobiert, mach ich und geb noch bescheid
Als Microdubsi, hier mal meine Ideen zu der Sache. Zum Ersten, meine S25-Siemens-Handy arbeitet mit 19200 Baud statt mit 9600. Dann solltest du auf jeden Fall noch die Zeile BAUD=9600 bzw. 19200 reinmachen. $baud ändert nur die Compilersettings, BAUD den eigentlichen UART. Dann ersetz das alleinige "AT" durch "ATZ", das setzt das Modem zurück. Weiterhin solltest du wirklich mal hingehen und die Antworten des Handys zu kontrollieren. Dazu kannst du entweder ein LCD. ein Software-UART oder auch LEDs zur Anzeige nehmen ob alles ok ist. Ich hab dir mal ein kleines Beispiel aus meinem Projekt "Handygesteuerte Funkfernbedienung" rauskopiert. Du solltest auf die Antwort des Modems warten und entsprechende reagieren. Entsprechend kannst du auch das Sample sms.bas nehmen und deinen Wünschen entsprechend anpassen
also, habe BAUD hinzugefügt, rate auf 19200 geändert. das mit den LED's hab ich gemacht ich habe aus einer anderen quelle welche schon mit diesem modem gearbeitet hat gehört, das diese antworten (OK etc.) nicht beantwortet werden müssen ich habe meinen quellcode nun auf einfachste basis geändert, nämlich print "ATD0788027939" so sollte mein Modem also mein Handy anrufen, es rührt sichjedoch nichts
M. wrote: > also, habe BAUD hinzugefügt, rate auf 19200 geändert. > > das mit den LED's hab ich gemacht > > ich habe aus einer anderen quelle welche schon mit diesem modem > gearbeitet hat gehört, das diese antworten (OK etc.) nicht beantwortet > werden müssen Beantwortet nicht. Aber wenn du dir die Antworten des Handys mal ansehen würdest, könnte man ja einen Hinweis kriegen, wo denn das Problem sein könnte. Wär natürlich furchtbar, wenn man dann nicht mehr gross raten müsste. zb wird das Modem nach dem Kommando "AT" mit "OK" antworten. Kommt das "OK" nicht, dann weißt du schon mal, dass mit der Kommunikation an sich was nicht stimmt. Aber wie gesagt: Solche Rückmeldungen braucht ja eigentlich auch kein Mensch, die kann man getrost ignorieren und dafür lieber im Nebel rumstochern.
:
Bearbeitet durch Admin
Hallo Leute Ich konnte mein Problem beseitigen, hab einen neuen quarz eingelötet. Hier der neue quelltext $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 14745600 $baud = 9600 Baud = 9600 Waitms 1000 Print "AT+cmgf=1" Print "AT+cmgs=0788027939" Print "Hallo"; Print Chr(26); End Ich GARANTIERE das dieser code in verbindung mit einem TC35i von Siemens funktioniert!!!!!!!!!!!!!!!!!!!!! BEACHTEN::: Quarz-Frequenz!!!! Leute, ich danke euch allen für eure IDeen und eure Geduld! Liebe Grüsse
Na, dann ist ja (endlich) gut. Magst du uns vielleicht noch verraten, was für einen Quarz du bisher verwendet hattest? Danke.
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.