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
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
#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.
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.
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.
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?
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.
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
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?
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.
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