Forum: Mikrocontroller und Digitale Elektronik ASCII Code für AT-Befehl-Enter


von Microdubsi (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Ja.

von Microdubsi (Gast)


Lesenswert?

okay danke

hat dann vieleicht jemand eine idee wieso bei mir trotzdem keine SMS 
ankommt?

von ROFL (Gast)


Lesenswert?

versuche mal

AT+CMGF=1 (in Textmode schalten)
<ENTER>
AT+CMGS="+4978xxxxxxx"
<ENTER>
"Nachricht"
<Ctrl-Z>
AT+CMSS=1 (senden)
<ENTER>

von Microdubsi (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Versuchs mal mit <CR> (13) <LF> (10) als [Enter] Ersatz...

von Microdubsi (Gast)


Lesenswert?

könntest du mir bitte den kompletten quellcode posten mit CR und LF 
eingesetzt?

von Microdubsi (Gast)


Lesenswert?

okay, hab mal eigenständig ein paar Kombos ausprobiert, gebracht hat's 
keine

von Sven P. (Gast)


Lesenswert?

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

von Microdubsi (Gast)


Lesenswert?

$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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie wäre es, wenn Du nach dem Ctrl+Z noch ein CR senden würdest?

von Microdubsi (Gast)


Lesenswert?

war vom PC aus nicht notwendig, aber ich versuchs grad ma und gebe 
rückmeldung

von Sven P. (Gast)


Lesenswert?

Statt "Print Chr(13)" dann "Print Chr(13) & Chr(10)".

von Microdubsi (Gast)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

Dann schreib jedes Zeichen in ne eigene Zeile. Also in Microsoft-Basic 
hat das mit dem Verketten so funktioniert...

von Microdubsi (Gast)


Lesenswert?

auch kein erfolg

man bin am verzweifeln

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Setz die Waitms 10 hinter die Print Chr(13) davor bringen die garnix...

Und 10ms könnten was kurz sein.

von Microdubsi (Gast)


Lesenswert?

gemacht

auch nichts gebracht

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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?

von Microdubsi (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Muss man nicht auf das Echo JEDES Zeichens warten?

von Microdubsi (Gast)


Lesenswert?

wie würde das dann aussehen?

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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.

von Microdubsi (Gast)


Lesenswert?

aber im Terminalprogramm aufm PC schreib ich ja eigentlich auch

"AT+CMGF" und erst dann ein ENTER

oder?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Microdubsi (Gast)


Lesenswert?

aso wenn ich mit hterm

at+cmgf=1 sende mit der einstellung "send on enter" = CR

dann kommt

"no carrier"

von Microdubsi (Gast)


Lesenswert?

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?

von Microdubsi (Gast)


Angehängte Dateien:

Lesenswert?

okay, das einzige woran ich scheiterte war das "ctrl-Z" (wusste nicht 
wie ichs eingeben soll in hterm)

von John S. (linux_80)


Lesenswert?

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 :-/

von Microdubsi (Gast)


Lesenswert?

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

von John S. (linux_80)


Lesenswert?

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.

von Microdubsi (Gast)


Lesenswert?

verkabelt hab ich einfach das kabel das ich benutzt habe um PC-Modem zu 
verbinden umgestöpselt auf Modem-Atmega32

von John S. (linux_80)


Lesenswert?

Microdubsi wrote:
> verkabelt hab ich einfach das kabel ...

Details !
Schaltplan usw.
welches GSM teil

von Microdubsi (Gast)


Lesenswert?

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

von Microdubsi (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hast du den Mal das was dein uC sendet überwacht per PC?
Und auf dem uC die Rückmeldung des Handys ausgewertet?

von Karl H. (kbuchegg)


Lesenswert?

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.

von ROFL (Gast)


Lesenswert?

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.

von Microdubsi (Gast)


Lesenswert?

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

von Microdubsi (Gast)


Lesenswert?

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?

von Skua (Gast)


Lesenswert?

Print "AT"
Wieso das denn nun auf einmal?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie ich bereits darlegte, könnte es helfen, nach dem Chr(26) noch ein CR 
zu senden - also nimm einfach das Semikolon dahinter weg.

von ROFL (Gast)


Lesenswert?

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.

von M. .. (barracuda)


Lesenswert?

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

von Joachim R. (bastelbaer)


Angehängte Dateien:

Lesenswert?

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

von M. .. (barracuda)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von M. .. (barracuda)


Lesenswert?

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

von ROFL (Gast)


Lesenswert?

Na, dann ist ja (endlich) gut.
Magst du uns vielleicht noch verraten, was für einen Quarz du bisher 
verwendet hattest?
Danke.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Microdubsi wrote:
> $crystal = 16000000

3 mal darfst du raten...

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.