Liebe Gemeinde, Ich hab nen Problem.... Ich betreibe ein Siemens TC35i modem an einem mega644p am comport2. Die Ansteuerung des Modem ist mir klar, sowie auch die Initialisierung. Habe eine Software in Bascom geschrieben, die per rs232 Interrupt die Daten in ein bytearry einfließt. Die Initialisierung und die Auswertung der eingehenden Daten vom und zum modem funktionieren einwandfrei. Nun will ich aber eine SMS senden und dort habe ich ein kleines Problem... Mein Programm sendet dem modem alle Daten zum versenden einer sms genauso als würde ich es über ein com Anschluss vom PC aus machen. Per at-befehl sende ich die Empfänger Nummer, warte auf das ">" Zeichen vom modem und sende dann den sendetext und schließe die Eingabe mit dem Zeichen "dec 26” die Eingabe ab. Das modem antwortet dann mit einem OK. Nur leider wird keine SMS abgesetzt. Schicke ich aber, nach modeminitialsierung über mein Programm, per comsch nittstelle eine SMS, dann wird eine SMS auch abgesetzt. Habe alles immer wieder abgescheckt: - Kommunikation zwischen controller und modem auf ttl-seite sowie auch nach dem max232 und sehe das alles am modem ankommt so wie es soll. Suche nach dem Fehler schon seit tagen, habe alles probiert, mit delayzeiten in meinem Programm experimentiert und keine Erfolg! Hat jemand eine Idee woran das liegen könnte?
> Hat jemand eine Idee woran das liegen könnte?
Zeiche exakt die Kommunikation auf und poste sie hier.
Guten Morgen, leider musste ich gestern über mein TAB schreiben, da mal wieder D2 seine Leitungen nicht im Griff hatte.. Nun die aufgezeichnete Kommunikation: 1.Kommunikation über mega644p Board: => das wird zum Modem geschickt, direkt aufgenommen hinter dem max232: Rueckmeldung <\r> <\n>T?ren offen=11111111<\r> <\n>Latitude= <\r> <\n>Longitude= <\r> <\n>Speed= <\r> <26><\r> => dies bekomme ich über die Software vom mega644p aus dem Programm zurück, nach dem das Modem auf die Befehle von oben antwortet. Dafür ist die Sub "GSM_ok() zuständig, schicke ich dem Modem den Befehl zum senden einer SMS (at+cmgs=...) muss der Programmablauf so lange warten, bis ein ">" vom Modem gesendet wird, was auch geschieht. Das Zählen in der Sub ist nur als Kontrolle für mich, ob auch auf das zu erwartende Zeichen geprüft wird. Nach dem die ganze Sendeprozedur durch ist, sendet mir das Modem nur ein "OK" zurück und es wird keine SMS verschickt. ring 2!<\r> <\n>sub-gsm_ok angesprungen <\r> <\n>1<\r> <\n>sub-gsm_ok: > <\r> <\n>sub-gsm_ok <\r> <\n>> 4<\r> <\n><\r> <\n><\r> <\n>sub-gsm_ok angesprungen <\r> <\n>1<\r> <\n>2<\r> <\n>3<\r> <\n>4<\r> <\n>5<\r> <\n>6<\r> <\n>7<\r> <\n>8<\r> <\n>9<\r> <\n>10<\r> <\n>11<\r> <\n>12<\r> <\n>13<\r> <\n>14<\r> <\n>15<\r> <\n>16<\r> <\n>17<\r> <\n>18<\r> <\n>19<\r> <\n>20<\r> <\n>21<\r> <\n>22<\r> <\n>23<\r> <\n>24<\r> <\n>25<\r> <\n>26<\r> <\n>27<\r> <\n>28<\r> <\n>29<\r> <\n>30<\r> <\n>31<\r> <\n>32<\r> <\n>33<\r> <\n>34<\r> <\n>35<\r> <\n>36<\r> <\n>37<\r> <\n>38<\r> <\n>39<\r> <\n>40<\r> <\n>41<\r> <\n>42<\r> <\n>43<\r> <\n>44<\r> <\n>45<\r> <\n>46<\r> <\n>47<\r> <\n>48<\r> <\n>49<\r> <\n>50<\r> <\n>51<\r> <\n>52<\r> <\n>53<\r> <\n>54<\r> <\n>55<\r> <\n>56<\r> <\n>57<\r> <\n>58<\r> <\n>59<\r> <\n>60<\r> <\n>61<\r> <\n>62<\r> <\n>63<\r> <\n>64<\r> <\n>65<\r> <\n>66<\r> <\n>67<\r> <\n>68<\r> <\n>69<\r> <\n>70<\r> <\n>71<\r> <\n>72<\r> <\n>73<\r> <\n>74<\r> <\n>75<\r> <\n>76<\r> <\n>77<\r> <\n>78<\r> <\n>79<\r> <\n>80<\r> <\n>81<\r> <\n>82<\r> <\n>83<\r> <\n>84<\r> <\n>85<\r> <\n>86<\r> <\n>87<\r> <\n>88<\r> <\n>89<\r> <\n>90<\r> <\n>91<\r> <\n>92<\r> <\n>93<\r> <\n>94<\r> <\n>95<\r> <\n>96<\r> <\n>97<\r> <\n>98<\r> <\n>100<\r> <\n>101<\r> <\n>102<\r> <\n>103<\r> <\n>104<\r> <\n>105<\r> <\n>106<\r> <\n>107<\r> <\n>108<\r> <\n>109<\r> <\n>110<\r> <\n>111<\r> <\n>112<\r> <\n>113<\r> <\n>114<\r> <\n>115<\r> <\n>116<\r> <\n>117<\r> <\n>118<\r> <\n>119<\r> <\n>120<\r> <\n>121<\r> <\n>122<\r> <\n>123<\r> <\n>124<\r> <\n>125<\r> <\n>126<\r> <\n>127<\r> <\n>128<\r> <\n>129<\r> <\n>130<\r> <\n>131<\r> <\n>132<\r> <\n>133<\r> <\n>134<\r> <\n>135<\r> <\n>136<\r> <\n>137<\r> <\n>138<\r> <\n>139<\r> <\n>sub-gsm_ok: ok<\r> <\n>sub-gsm_ok <\r> <\n><\r> <\n>OK<\r> <\n> 8<\r> <\n><\r> <\n><\r> <\n> Hier der Code vom mega644p: 1. nach Auswertung der Anzahl der Klingelzeichen: Case 2 : Print "ring 2!" Call Send_sms() Gsm_valid = 0 2. SMS Senderoutine: Sub Send_sms() Gsm_rx_str = "" Gsm_rx_str_count = 0 Print #1 , "at+cmgs=+49157....." ; Chr(013) ; Waitms 1500 Call Gsm_ok() Waitms 200 Print #1 , "Rueckmeldung " Print #1 , "Türen offen=" ; Bin(tuerkontakt) Print #1 , "Latitude= " Print #1 , "Longitude= " Print #1 , "Speed= " ; Chr(013) ; Waitms 500 Print #1 , Chr(26) ; Chr(013) ; Call Gsm_ok() Ring_count = 0 Gsm_rx_str = "" For Count = 1 To Gsm_rx_str_count Gsm_rx_byte(count) = 0 Next Gsm_rx_str_count = 0 End Sub 3. Auswerteroutine für Meldungen vom Modem: Sub Gsm_ok() 'Local Count As Byte Print "sub-gsm_ok angesprungen " Gsm_timeout = 0 Do Incr Gsm_timeout Print Gsm_timeout If Instr(1 , Gsm_rx_str , "SY") > 0 Then Print "sub-gsm_ok: sys" ' String prüfen ob ein "ok" drinen liegt Exit Do End If If Instr(1 , Gsm_rx_str , "OK") > 0 Then Print "sub-gsm_ok: ok" Exit Do End If If Instr(1 , Gsm_rx_str , ">") > 0 Then Print "sub-gsm_ok: > " Exit Do End If If Instr(1 , Gsm_rx_str , "ERROR") > 0 Then Print "sub-gsm_ok: error" Exit Do End If Loop Until Gsm_timeout = 15000 Print "sub-gsm_ok " ; " " ; Gsm_rx_str ; " " ; Gsm_rx_str_count Print Print For Count = 1 To Gsm_rx_str_count Gsm_rx_byte(count) = 0 Next Gsm_rx_str_count = 0 If Gsm_ini = 0 Then Incr Gsm_init_count End Sub 2. SMS-Senden über Com-Port PC: => Daten zum Modem: at+cmgs=+49157....<\r> test sms<\r> <26><\r> => Datem vom Modem zurück: <\r> <\n>> <\r> <\n>+CMGS: 75<\r> <\n><\r> <\n>OK<\r> <\n> Hier bekomme ich vom Modem die Rückmeldung "<\n>+CMGS: 75<\r>" und eine SMS wird gesendet... Ich kann keine UNterschiede zu Ablauf über den mega644p finden... WORAN KANN DAS LIEGEN....."Grübel"
Unter welchen Umständen soll dein Modem mit dem Zeichen ">" antworten ? Normalerweise kommt entweder Nichts oder ein Zahlencode oder Klartext - Meldungen "OK" "ERROR" usw.... Gruß Thilo
P.S. Der Code ist kaum verständlich. Das liegt aber m.E. nur daran, dass deine Auswertung der Modem - Antworten zu universell gefasst wurde. Ich würde Raten genau auf die Antwort zu warten die dort kommen soll. Evtl. wird der Debug - Print dann auch etwas übersichtlicher und Du findest den Fehler dadurch ganz von alleine.... Gruß Thilo
Hallo Thilo, THaala schrieb: > Unter welchen Umständen soll dein Modem mit dem Zeichen ">" antworten ? die Abfolge zum senden einer SMS bei dem Siemens GSM-Modem TC35i sieht wie folgt aus: 1. at+cmgs=+49157...... 2. Modem antwortet auf den AT-Befehl mit dem ">", das sagt, es kann jetzt der zu sendende SMS-Text zum Modem gesendet werden 3. Sendetext zum Modem schicken 4. Eingabe mit dezimal 026 abschließen 5. Modem antwortet dann darauf mit: <\n>+CMGS: 75<\r> <\n><\r> <\n>OK<\r> <\n> THaala schrieb: > Ich > würde Raten genau auf die Antwort zu warten die dort kommen soll. das mache ich doch... If Instr(1 , Gsm_rx_str , ">") > 0 Then Print "sub-gsm_ok: > " => nur als Überprüfung das das Zeichen erkannt wurde Exit Do Die Sub Gsm_ok ist nicht nur für den Versand der SMS da, ich schecke mit dieser jede Meldung vom Modem (ok, error....) Der Witz an der Sache ist, dass ich über meinen Controller schon einmal SMS versenden konnte und nach Programmänderungen jetzt nicht mehr.... Weiterhin funktioniert die komplette Initialisierung des Modems über das Programm. Und was ich nicht verstehe ist, warum nach dem Durchlauf des SMS versenden durch den Controller am Ende das Modem ein "OK" ausgibt aber keine SMS versendet?
Irgendwie vermisse ich eine Verküpfung zwischen dem String Gsm_rx_str und dem Com-Port bzw. die Lese - Routine. Ist das ein Basic - Special oder hast Du Programmcode für Dich behalten ? Wird in deiner Sub gsm_ok - while - loop() dieser String irgendwie verändert (ISR oder so ? ) oder fehlt da schlichtweg der Aufruf an eine Ausleseroutine ? Gruß T.
THaala schrieb: > Wird in deiner Sub gsm_ok - while - loop() dieser String irgendwie > verändert (ISR oder so ? ) oder fehlt da schlichtweg der Aufruf an eine > Ausleseroutine ? In der Com2 Interruptroutine werden die Daten, die vom Modem kommen in ein Bytearry geschoben: Com2_isr: Incr Gsm_rx_str_count Gsm_rx_byte(gsm_rx_str_count) = Udr1 Return Mit einem Overlay kann ich dann die Daten aus dem Byte auslesen: Dim Gsm_rx_byte(254) As Byte Dim Gsm_rx_str As String * 253 At Gsm_rx_byte Overlay Eigentlich verändere ich die Daten nicht, lese diese.... Meine Sub zum Initialisieren des Modems: Sub Gsm_init 'Wait 2 Print "Gsm_init_count " ; Gsm_init_count Select Case Gsm_init_count Case 0 : 'Print "send ate" Print #1 , "ATE" ' Echo vom TE = off Call Gsm_ok() Sound Speaker , 500 , 190 Case 1 : 'Print "send einwahl" Print #1 , "AT+CPIN=878235" 'GSM mit PIN anmelden Call Gsm_ok() Sound Speaker , 500 , 190 Case 2 : 'Print "send atclip" Print #1 , "at+clip=1" ' Anrufernummer anzeigen Call Gsm_ok() Sound Speaker , 500 , 190 Case 3 : 'Print "send atcsms" Print #1 , "AT+CSMS=1" ' setze Phase2 Sim compatabilität Call Gsm_ok() Sound Speaker , 500 , 190 Case 4 : 'Print "send atcnmi" Print #1 , "AT+CNMI=2,1,0,0,1 " ' SMS Benachrichtung einschalten 3,1,2,2,1 oder 2,2,0,2,1 Call Gsm_ok() Sound Speaker , 500 , 190 Case 5 : 'Print "send Sms -zentrale " Print #1 , "AT+CSCA=+491710760000" ' Nummer Kurzmitteilungszentrale von D1= +491710760000 ,E-Plus= +491770610000 Call Gsm_ok() Sound Speaker , 500 , 190 Case 6 : Print "send atcmgf" Print #1 , "AT+CMGF=1" ' GSM in Textmodus schalten Call Gsm_ok() Set Kellerschalter.6 ' GSM-modem inialisiert Set Gsm_ini End Select End Sub
Und nun nochmal das ganze Testprogramm im Anhang. Danke Dir schon mal noch für Dein Interesse!
Hallo Matthias schau mal hier. http://bascom-forum.de/showthread.php?4054-Mit-einem-Atmega32-SMS-empfangen hab das mal mit nem TC35i ausprobiert, senden funktioniert. Empfangen hab ich noch nicht getestet. In dem Quellcode wird nicht auf die Modemantwort gewartet, sondern nur ein Wait ausgeführt und dann der Text gesendet. Das ganze läuft zwar an der ersten seriellen Schnittstelle, sollte aber auch mit der Softwareschnittstelle funktionieren. Probiers mal. Gruß Rolf
Rolf Scheer schrieb: > Das ganze läuft zwar an der ersten seriellen Schnittstelle, sollte aber > auch mit der Softwareschnittstelle funktionieren. Habe einen mega644p genommen weil dieser einen 2. Hardware Uart hat :) Danke für Deinen Link, werd ihn mal anschauen und ausprobieren. Meld mich später dann nochmal :) Dank Dir schon einmal!
Hi Rolf, welches Programm ist das, was Du bei You tube eingestellt hast?
Nimm am besten mal die Telefonnummern aus deinem Quellcode raus ;-) Ich denke du solltest die Com1 - ISR genau so gestalten wie die für com2. Es ist immer problematisch solche Dinge wie "print" aus einer ISR heraus aufzurufen (und dann sogar noch auf einem anderem COM port!). Wahrscheinlich gehen Dir während der BUSY-Zeit die "print" in Warteschleifen in der ISR von Com1 verbingt Empfangszeichen auf Com2 verloren! Gruß Thilo
THaala schrieb: > Nimm am besten mal die Telefonnummern aus deinem Quellcode raus ;-) Mist, da habsch welche übersehen, komme aber an den Beitrag nicht mehr ran, hmmmm :( THaala schrieb: > Ich denke du solltest die Com1 - ISR genau so gestalten wie die für > com2. Die com1 ISR ist nur für die Eingaben von meinem PC aus da und zum Programmieren. Hat eigentlich mit der GSM-Aktion nichts weiter zu tuen und ist nur zu debugzwecken. Eigentlich nur zum Einschalten des Modems und das geht ja bestens :(
Hallo Mathias, ist nicht von mir. Hab dir nur den Link zugeschickt. Das Grundgerüst ist wohl von MCS. Geht auch aus dem Kopf hervor. Beschäftige mich zur Zeit auch mit dem Thema. In erster Linie geht es mir ums senden. Empfangen kommt später drann. Hab das mit nem ATmega 32 mit dem Quellcode aus dem Link am laufen. Zu Zeit für 8 Eingänge. Gruß Rolf
Hallo Rolf, das Dumme daran ist, dass die ganze Sache soweit funktioniert, wie ich es mir gedacht habe. Ich bin immer noch am Grübeln woran das SMS senden nicht funktioniert. Werde jetzt mal den Modemhersteller kontaktieren. Gruß MAT
Hallo Mathias, hab gerade mal in deine Quellcode geschaut. Mir ist aufgefallen das du Com2 auf 57600 eingestellt hast. Reduzier den doch mal auf 9600. Vieleicht hilfts ja. Ich verwende 9600 Baud. Gruß Rolf
Rolf Scheer schrieb: > Vieleicht hilfts ja. NEIIIIIIIN, leider läuft mein Programm mit 9200 nicht mehr :( Stelle jetzt mal auf 19200 und dann schau mal. Habe vorhin mit dem Service von MC Technologies gesprochen. Leider konnte er mir auch nicht weiterhelfen..... Aber den Fehler finde ich noch :=)
Mir auffällt, dass du nur ein OK bekommst. Laut der Lister AT-Kommandos soll es so aussehen: If writing is successful: +CMGW: <index> OK If error is related to ME functionality: +CMS ERROR: <err> Füge doch 'mal das Kommando AT+CMEE=2 für Textfehlermeldungen ein. Hast du ein Orginalmodem oder einen Nachbau?
Aus meiner Erfahrung mit diesen Modem weiß ich noch, das man die PIN nicht immer eingeben darf, sondern nur wenn kein "READY" auftaucht. Als Antwort auf AT+CPIN? kann kommen: "SIM PIN", "SIM PUK" oder "READY"! Außerdem muss man - sofern das Modem auch spannungsmässig abgeschaltet wird - ein AT+CREG? abfragen und warten bis es beim Provider eingeloggt ist. Bei einer Antwort "+CREG: 0,1...." ist das Modem beim Provider eingeloggt. Danach kannst du wie gehabt vorgehen. Gruß Thilo
Hallo Matthias, o.k. einen hab ich noch. Hatte auch mal das Problem das die SMS nicht versandt wurde, obwohl ich ein o.k. bekam. Hab daraufhin RS - Verbindung zwischen Modem und Atmega unterbrochen (ohne Modem auszuschalten, Modem lief weiter) und RS - Verbindung zum PC hergestellt. Über Terminalprogramm abgefragt ob alle AT Einstellungen denen des Programms in Bascom entsprach. Siehe da, AT-CMGF (als Text senden) stand auf 0. Hab dann im Programm ein Wait von 7sec. eingefügt bevor AT-CMGF ausgeführt wurde. Danach gings dann. Sonst könnt ich mir da auch keinen Reim mehr drauf machen. Gruß Rolf
Opladi schrieb: > Mir auffällt, dass du nur ein OK bekommst. Laut der Lister AT-Kommandos > soll es so aussehen: das ist mir leider auch aufgefallen, schon ganz zu Anfang! Und dass hat mich ja verwirrt, dass nur ein "OK" zurück kommt. Habe darauf hin mit dem Hersteller gesprochen und er meinte wie auch Rolf Scheer schrieb: > o.k. einen hab ich noch. Hatte auch mal das Problem das die SMS nicht > versandt wurde, obwohl ich ein o.k. bekam. Hab daraufhin RS - Verbindung > zwischen Modem und Atmega unterbrochen (ohne Modem auszuschalten, Modem > lief weiter) und RS - Verbindung zum PC hergestellt. Über > Terminalprogramm abgefragt ob alle AT Einstellungen denen des Programms > in Bascom entsprach. > Siehe da, AT-CMGF (als Text senden) stand auf 0. Hab dann im Programm > ein Wait von 7sec. eingefügt bevor AT-CMGF ausgeführt wurde. Danach > gings dann das ein "AT+CMGF" vor jeder Sendung nochmals geschickt werden sollte. Habe das natürlich auch ausprobiert => ohne Erfolg. Was aber ganz komisch ist, versende ich eine SMS über ein Terminalprogramm direkt über ein Com Schnittstelle vom PC aus, und mit Initialisierung vom mega aus, kann ich diese SMS senden!!!! Hatte gestern nochmals über einen externen Wandler mir die Sendungen zum Modem über Controller und auch PC angeschaut und konnte keinen Unterschied finden :(. Werde nochmals die Konfiguration vom Modem nach Initialisierung mir anschauen. THaala schrieb: > Aus meiner Erfahrung mit diesen Modem weiß ich noch, das man die PIN > nicht immer eingeben darf, sondern nur wenn kein "READY" auftaucht. Na ja, die Pin wurde ja schon bei der Initial. eingegeben und die wird nur einmal durchlaufen. und ich kann ja die Nummer anrufen und die dazugehörige Auswertung wird ja vom Controller ausgeführt. Opladi schrieb: > Füge doch 'mal das Kommando AT+CMEE=2 für Textfehlermeldungen ein. > > Hast du ein Orginalmodem oder einen Nachbau? Das werde ich mal machen und ja, es ist ein Originalmodem.
Hallo Matthias, bei mir sieht eine Senderoutine so aus: Sendmg5: 'Cls Print "at+cmgs=" ; Chr(34) ; Phonenumber ; Chr(34) ; Chr(13) Waitms 200 Print "MG 5" ; Chr(26) 'Locate 1 , 1 : Lcd "Alarm " 'Locate 2 , 1 : Lcd "MG 5" Return Bin erst seit Samstag an dem Thema drann. Vieleicht einfach mal die Sub Send_sms auf das nötigste reduzieren. Rolf
Hallo Rolf, Dein Letzter posts hat mich zu meinem Ziel gebracht! Das senden funktioniert jetzt wunderbar. Habe meinen code mit einer abgespeckten senderoutine ausgestattet und somit auf meinen Fehler gestoßen und nun geht es auch mit meinen ursprünglichen code :-) ! Warum es nicht so ging wie angedacht, und obwohl die zu senden Daten am modem richtig angekommen sind, weis ich nicht.... Danke nochmals an alle und ihren tips! Noch eine Frage, wie kann ich an Vorganggegangene posts änder bzw. Löschen?
Hallo Mathias, schön das es jetzt funzt. Mit den Posts weiß ich nicht. Am besten mal die Moderatoren fragen. Gruß Rolf P.S. und schönes Wochenende.
Rolf Scheer schrieb: > P.S. und schönes Wochenende. Na bis dahin ist doch noch ein wenig Zeit, oder :-)
stimmt, als ATZler kommt Mann lagsam durcheinander. Hatte heute schon den ganzen Tag FREITAG. Son sc..... böses Wort. In dem Sinne.
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.