www.mikrocontroller.net

Forum: PC-Programmierung STRG+Z als ASCII Zeichen über printf Befehl senden


Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich möchte gerne über die serielle Schnittstelle ein "STRG+Z" über die 
Leitung senden. Jedoch geschieht dies mit einem "printf" Befehl, und im 
C Quellcode. Jedoch weiß ich nicht, wie man STRG+Z als ASCII Zeichen 
eingeben kann, und ich auch nichts ähnliches gefunden habe.
Falls jemand nicht genau weiß, was ich meine: Enter in ASCII wäre "\r". 
Ich brauche eben das STRG+Z.

Wäre behilflich, wenn mir jemand helfen könnte.


printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006 
???????");

Die Fragezeichen hätt ich gerne beantwortet ;).

PS: Der ganze Befehl ist zensiert, da es sich um einen at+cmgs Befehl im 
PDU Format handelt...

Danke,
LG

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mit printf("%c", 26 ) sollte es gehen.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Hallo,
>
> mit printf("%c", 26 ) sollte es gehen.

Also meinst du

printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006 
%c",26);
?

LG

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ginge auch:
printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006\x1a");

Solange printf nimmt, ist es egal.
Aber nach diesem Strickmuster könnte man auch eine einfachere Funktion 
als printf() nehmen (fwrite(), puts() etc.).

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorallem sollte man mal überlegen, was Strg+Z überhaupt ergibt. Das 
hängt nämlich zum Teil ganz extrem davon ab, was das Terminal daraus 
macht. Termcap wäre schon mal ein guter Anfang...

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"This is CTRL-Z:\032"

ASCII-Code oktal mit drei Stellen.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Hallo,
>
> mit printf("%c", 26 ) sollte es gehen.

Hallo, bin jetzt wieder mal im Land.
Also theoretisch ist es richtig mit printf"%c",26), jedenfalls wird so 
STRG+Z gesendet (1A in Hex).
Jedoch stoße ich auf ein weiteres Problem:
Wenn ich über das HyperTerminal das Siemens Handy verbinde (Ansteuerung 
über die AT Befehle...), dann sende ich folgendes:
at                      //Bestätigung mit Enter
at+cmgs=22              //Bestätigung mit Enter
"PDU-Nachricht"         //Bestätigung mit STRG+Z

In meinem C Programm schaut es wie folgt aus:
printf("at\r");
printf("at+cmgs=22\r");
printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26);

Jedoch geht das Versenden von den SMS nicht, anrufen konnte ich jedoch 
schon.
Das Problem liegt glaube ich daran, dass nach dem 
"printf("at+cmgs=22\r");"   vom Handy ein  ">"  zurückgesendet wird.
Hier liegt mein Verdacht.
Vielleicht kennt sich jemand hier gut aus, und kann mir helfen wie es 
doch geht, wäre echt dankbar.
Mfg

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du wirst zwischen den einzelnen Ausgaben an das Telephon dessen 
Antworten abwarten und auswerten müssen. Tust Du das nicht, "überfährst" 
Du das Telephon.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem haben viele Telfone auch gerne einen "echten" Zeilenumbruch 
alla "\r\n" ...

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Du wirst zwischen den einzelnen Ausgaben an das Telephon dessen
> Antworten abwarten und auswerten müssen. Tust Du das nicht, "überfährst"
> Du das Telephon.

Hallo.
Bin jetzt wieder mal hier.
Du hattest recht.
Mit...
printf("at\r");
delay_ms(1000);
printf("at+cmgs=22\r");
delay_ms(1000);
printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26);
...funktionierte es.

Und jetzt mal ein neues Thema.
Hätte jetzt noch eine liebe Zusatzfunktion im Gedanken:
Würde gerne von einem anderen Handy aus auf das Siemens Handy eine SMS 
senden, in welcher man einen Text hineinschreibt kann, und dieser Text 
soll von meinem Mikrocontroller ausgelesen werden.
Hat jemand da Tipps für mich?
Danke!

LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sauberer als Warten wäre ein Auswerten der Antworten des Telephones.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Sauberer als Warten wäre ein Auswerten der Antworten des Telephones.

Die Auswertung der Antwort ist bei mir technisch nicht möglich zzt., da 
ich keine Schnittstelle dafür bereit habe.
Außerdem geht es so, und das ist das Wichtige.
LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Auswertung der Antwort ist bei mir technisch nicht möglich
> zzt., da ich keine Schnittstelle dafür bereit habe.

Du nutzt nur die TxD-Leitung Deines µCs und RxD ist anderweitig 
belegt?

Dann aber kann das hier nicht funktionieren:

> Würde gerne von einem anderen Handy aus auf das Siemens Handy
> eine SMS senden, in welcher man einen Text hineinschreibt kann,
> und dieser Text soll von meinem Mikrocontroller ausgelesen werden.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Transmit und Receive Leitung ist belegt.
Jedoch ist z.B. eine Auswertung in dem Sinne nicht möglich, dass ich die 
empfangenen Daten vom Handy irgendwo anzeigen kann.
Kann die Daten vom Handy nur in einem Speicher auf den PC direkt 
schreiben.
LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auswertung heißt ja nicht zwangsweise Anzeigen, sondern hier, daß nach 
dem Senden eines AT-Kommandos auf die Antwort gewartet wird (die "OK" 
lauten sollte) und erst nach dem Eintreffen der Antwort mit dem nächsten 
Kommando fortgefahren wird.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, dann wird es nicht ausgewertet.
Wie kann ich so eine Auswertung noch realisieren?
Hab mit der Handy-Anbinung zum Mikrocontroller nicht so viel Erfahrung.
LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nein, dann wird es nicht ausgewertet.

Ja, dann mach das doch einfach. Ich verstehe Dein Problem nicht so 
recht.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem:
Hab mehr oder weniger das PIC Demoboard.
Das Handy ist an den Mikrocontroller angeschlossen und kann auch Daten 
zurücksenden, da Transmit und Receive Leitungen in Verwendung sind.
Jedoch kann ich nicht auswerten was das Handy zurücksendet, da ich es 
nirgends anzeigen lassen kann (vgl. HyperTerminal).
Verstehst du schon ein bisschen mehr was ich meine?
LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier liegt ein Missverständnis vor. Du musst die Daten, die das Telephon 
zurücksendet, nicht anzeigen, Du musst sie nur auswerten, um den 
Zeitpunkt bestimmen zu können, wann Du das nächste Kommando an das 
Telephon senden kannst:


  printf("at\r");

... hier auf Antwort warten

  printf("at+cmgs=22\r");

... hier auf Antwort warten

  printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26);

naja, und hier natürlich auch wieder auf Antwort warten.

Wird es allmählich klarer?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe L. schrieb:

> nirgends anzeigen lassen kann (vgl. HyperTerminal).
> Verstehst du schon ein bisschen mehr was ich meine?

Du musst die Antwort einfach nur von der seriellen Schnittstelle 
abholen. Wenn du gut drauf bist, vergleichst du noch ob das Handy ein 
"OK" zurückgeschickt hat oder nicht. Und wenn nicht, schaltest du von 
mir aus eine LED ein, damit dein Benutzer auch weiß, das da was schief 
gelaufen ist.

Das hat aber nichts damit zu tun, ob du die Antwort wo anzeigen kannst 
oder nicht. Du kannst dir ja auch von der Post einen postlagernden Brief 
abholen und den ungeöffnet wegwerfen. Du musst auch nicht alle Briefe in 
deinem Briefkasten tatsächlich lesen. Du musst sie nur aus dem 
Briefkasten rausnehmen, denn wenn du es nicht tust, wird dir der Postler 
irgendwann keine neuen mehr reinstecken. Ob du die Briefe liest oder 
nicht, ist dem Postler hingegen egal.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich sehe, es war mein Fehler, ich habe mich ein wenig falsch 
ausgedrückt.
Das Programm welches SMS senden soll, funktioniert so, und ich möchte es 
auch nicht ausbauen
und nicht auswerten was das Handy zurücksendet.
Jedoch habe ich folgendes gemeint:
Ich möchte jetzt ein Programm schreiben, bei dem mit einem AT Befehl
, der vom Mikrocontroller aus gesendet wird, der Nachrichtenspeicher im 
Handy ausgelesen wird,
und diese Zeichenfolge welche ich dann vom Handy zurückbekomme (PDU 
Message), möchte ich
einzeln als Character einlesen und auswerten.
Das Problem ist, dass man Character die z.B. von einer Tastatur kommen 
ja mit einem Enter bestätigt.
Jedoch kann ich die Zeichenfolge die mir das Handy an den µController 
sendet nicht im Programm (z.B. mittels Schleife)
abfangen und einlesen, da das Handy ja nur einzelne Zeichen, aber keine 
Steuerzeichen wie Enter mit schickt.
Habt ihr ungefähr verstanden worum es geht?
Ich hoffe ich konnte mich genauer formulieren.
LG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Problem ist, dass man Character die z.B. von einer Tastatur kommen
> ja mit einem Enter bestätigt.

Tut man das?

> Jedoch kann ich die Zeichenfolge die mir das Handy an den µController
> sendet nicht im Programm (z.B. mittels Schleife)
> abfangen und einlesen, da das Handy ja nur einzelne Zeichen, aber keine
> Steuerzeichen wie Enter mit schickt.

Das Telephon wird als Antwort auf das entsprechende AT-Kommando eine 
Zeichenkette senden, also mehrere Zeichen hintereinander. Und aller 
Wahrscheinlichkeit nach wird es am Ende der Zeichenkette sogar CR 
und/oder LF senden.

Mir scheint, daß da noch das eine oder andere Verständnisproblem 
vorliegt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.