Forum: Mikrocontroller und Digitale Elektronik Handyansteuerung über uC


von Max (Gast)


Lesenswert?

Hi Leute!

Versuche zurzeit mit dem ATMEGA8L ein Handy (Siemens S55) anzusteuern,
um dann z.B. Messdaten weiterzuleiten -> z.B. an einen PC oder an eine
Datenbank im Internet, etc...

Nachdem ich aber ein blutiger Programmier-Anfänger bin, wollt ich
fragen ob vielleicht jemand damit schon Erfahrung gesammelt hat und
weiss wie man sowas am besten realisiert / programmiert!


Hoff ihr "Brains" da draussen könnt mir weiterhelfen...
;o)

MfG,
Max

von Christian (Gast)


Lesenswert?

Hallo Max

Genau an so einem Projekt bin ich auch mit dem gleichen Handy. Hast du
dein Handy schon mal an den Hyperterminal angeschlossen?

Test eines Handys auf verwendbarkeit mit der Baugruppe:

Handy über Datenkabel mit PC verbinden
Am PC Terminalprogramm ( z.B. HyperTerminal ) starten
Im Menü des Programmes den verwendeten COM-Port ( z.B. COM1 ) und die
vom Handy unterstützte Datenrate ( üblicherweise 19200 Baud ) wählen
Kommando AT <ENTER> eingeben
Antwortet das Handy-Modem mit "OK", so besteht grundsätzlich die
Möglichkeit einer Steuerung über AT-Befehle.
Kommando AT+CMGF=0 <ENTER> eingeben
Antwortet das Handy-Modem mit "OK", so wird auch der PDU-Mode
unterstützt


Des weiteren geibt es unter folgender Internetadresse die Befehle die
du benötigen wirst.


AT-Befehle  http://www.nobbi.com


Da das S55 nur PDU-strings versenden kann würde ich mir an deine Stelle
das Programm pdyspy herunterladen. Diese Software erstellt automatisch
diesen String.


1.mit pduspy den pdu-string erstellen und in die zwischenablage
  kopieren
2. bei pdyspy unter 'decode' die länge nachsehen und merken (z.B.50)
3. im Hyperterminal AT+CMGS=49 eingeben (Länge = Wert von pduspy -1)
4. Enter drücken
5. Über 'bearbeiten' 'einfügen' den pdu-string einfügen
6. CTRL Z drücken


So weit so gut. Mein Problem was ich aber nun habe ist wie ich nun
diese Befehle über mein Controller AT89S8252 an das Handy senden kann.
Auszug aus meinem Quellcode. Was mache ich wohl falsch? Wieso versteht
mein Handy dieses Programm nicht..

void main(void)
{
  PCON = 0x80;       // Ini Serielle Schnittstelle
  TMOD = 0x22;
  TH1 = 250;
  TL1 = 250;
  TR1 = 1;
  SCON = 0x52;
  TI=0;
  RI=0;

  SBUF = 'A';             // Soll nun eine Nummer wählen
    while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  SBUF = 'T';
  while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  SBUF = 'D';
  while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  SBUF = '1';
    while (TI == 0);  //Senden beendet?
  TI = 0;                  // Sendeflag löschen
  SBUF = '3';
    while (TI == 0);  //Senden beendet?
  TI = 0;


Ich würde mich sehr freuen wenn wir unsere Erfahrungen untereinander
austauschen könnten. Da ich auch ein wenig hilflos gegenüber dieser
Problemstellung bin

Mit freundlichen Grüßen
Christian

von Max (Gast)


Lesenswert?

Hi Christian!

Zum Quelltext kann ich im moment leider noch nichts sagen...bin nämlich
gleich weg; aber hast du schon gecheckt obs vielleicht an deinem
Datenkabel liegt? Hast du es selbst gebaut oder verwendest du ein
original Kabel?
Kannst ja nochmal deine Schaltung schicken, vielleicht is es ja noch
ein HW-Fehler!?!?

Bezüglich meines "Problems": Des ganz mitn Hyperterminal - Handy
anstecken - diverse AT-Befehle... hab ich scho alles hintermir und auch
scho genug Infos drüber gesucht und gefunden (seit ein paar Monaten bin
ich scho dahinter g...) und einiges ausprobiert!
Leider scheiterts aba bei mir am C-Code, weil ich noch net wirklich
weiss wie ich die Datenübertragung OHNE SMS realisieren kann!

MfG,
Max

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Max
das hört sich doch schon mal sehr gut an.
Ich verwende ein Originales Datenkabel.
Ich benuzte die Anschlüsse 5->Ground 2->TXT 3->RXD.
Diese drei Leitungen reichen beim Hyperterminal aus um Daten zu senden
und zu empfangen.

Reichen diese drei Anschlüße auch bei meinem Mikrocontroler
Ich habe dir mal meinen Schaltplan als Anhang angefügt.
Du kannst ihn ja vielicht mal kontrollieren.

Mit freundlichen Grüßen
Christian

von Hagen (Gast)


Lesenswert?

Bist du dir sicher das das S55 eine V24 RS232 Schnittstelle besitzt ?
Ich dachte immer das dort nur RS232 TTL Pegel anliegen und das
mitgelieferte Datenkabel ein spezielles ist.

Gruß Hagen

von Christian (Gast)


Lesenswert?

Hallo Hagen
ich bin mir nicht sicher.
Ich kann auf jeden Fall über diese drei Leitungen mit meinem Handy
komunizieren. Aber leider nur über Hyperterminal

MFG
Christian

von Sven (Gast)


Lesenswert?

Hallo ,
vergesst nicht das Datenkabel an pin.4 mit 5 volt zu versorgen, sonst
arbeitet das Originale Datenkabel nicht.....
Beim Anschluß an einen PC wird diser pin automatisch von der
Schnittstelle her mit Spannung versorgt.....


Gruß

Sven

von Sven (Gast)


Lesenswert?

Denkt auch daran, das Originale Datenkabel an pin 4 mit 5 volt zu
versorgen, sonst arbeitet die Schaltung in dem Datenkabel nicht....
Ein oft gemachter Fehler....


Gruß

Sven

von Christian (Gast)


Lesenswert?

Hallo Sven
aber wieso funktioniert das den dann beim Hyperterminal??

MFG
Christian

von Juergen (Gast)


Lesenswert?

Die Spannung die beim Datenkabel zusätzlich angeschlossen wird, wird
nicht über eine Leitung zu Handy geführt, sonder ist die
Spannungsversorgung für die Elektronik, die sich im pc-seitigen Stecker
des Datekabels befindet.

von Sven (Gast)


Lesenswert?

Hallo Christian,
Ja, wie ich oben schon geschrieben habe, wenn du dein Handy mit dem
Hyper Terminal betreibst, wird Automatisch über die Serielle
Schnittstelle der Pin 4 (Sub D-Stecker) high.
Wie Jürgen auch schon schrieb, es ist nicht der Pin4 am Handystecker
sondern Pin 4 am D-Sub Stecker....

Gruß

Sven

von Axel Rühl (Gast)


Lesenswert?

Hi Leute, hallo Christian,
das datenkabel wird vom Handy mit strom versogt: 2.7Volt.

Dein Fehler in der Übertragung des AT-Befehls:
"A", "T", "D", "1" , "3".

die 13 soll [ENTER] sein, stimmts?

muss aber binär und nicht als ASCII übertragen werden.

Oder???


Ich habe sowas schon mal gemacht, zwar mit der 45er Serie, aber
funktioniert super! Der Controller hat noch im SiemensStecker Platz
gefunden. ich habe den Controller direkt mit dem Handy verbunden.
www.phonetracker.de
Ist lange her. Hat irre Spaß gemacht!

Gruß
Axel

von Christian (Gast)


Lesenswert?

Hallo Axel
nein die 13 soll einfach nur eine Telefonnummer sein.

Bestimmt benötige ich ein Enter zeichen ist das die 13??
Danke für den guten hinweis...

mit freundlichen Grüßen
Christian

von Axel Rühl (Gast)


Lesenswert?

Hi Christian,
Ja, so in etwa:
neue linie, wagenrücklauf
NewLine, Carriage Return.
sind zwei zeichen: einmal die 10 und einmal die 13.
es ist manchmal nicht unerheblich, was man zuerst sendet.
ich bin mir auch nicht sicher, ob man überhaupt beides senden muss.
vielleicht reicht auch nur die 10 oder nur die 13.
Ist nun auch schon wieder zwei Jahre her...

Ich habs nochmal in deinen Quelltext eingebastelt
Gruß
AxelR.

void main(void)
{
  PCON = 0x80;       // Ini Serielle Schnittstelle
  TMOD = 0x22;
  TH1 = 250;
  TL1 = 250;
  TR1 = 1;
  SCON = 0x52;
  TI=0;
  RI=0;

  SBUF = 'A';             // Soll nun eine Nummer wählen
    while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  SBUF = 'T';
  while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  SBUF = 'D';
  while (TI == 0);  //Senden beendet?
  TI = 0;      // Sendeflag löschen
  [TELEFONNUMMER START
  .
  .
  .
  TELEFONNUMMER END]
  SBUF = '0x0D';
    while (TI == 0);  //Senden beendet?
  TI = 0;             // Sendeflag löschen
  SBUF = '0x0A';
    while (TI == 0);  //Senden beendet?
  TI = 0;

von Christian (Gast)


Lesenswert?

Hallo Axel
ich werde es gleich mal ausprobieren.

Mit freundlichen Grüßen
Christian

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Axel
wenn ich mein Board an den Pc (Hyperterminial) anschließe und deinen
abgeänderten Quellcode sende kommt genau das an was ich gerne haben
will. (z.B ATD1524 und ein Enter)

Super Sache.. Nur jetzt das gleiche Controller -> Handy da habe ich
bestimmt noch einen Hardware fehler im Anschluss des Datenkabels vom
Siemens S55.

Hier noch mal meine Pinbelegung im Anhang

mit freundlichen Grüßen
Christian

von Semme (Gast)


Lesenswert?

Ein Terminalprogramm sendet unter Windows - Systemen zuerst "13" und
dann "10". Die Reihefolge war bei meinen Experimenten mit dem Siemens
S45 bei bestimmten AT - Befehlen ausschlaggebend für den Erfolg.

von Axel Rühl (Gast)


Lesenswert?

gehts direkt vom siemensstecker auf dein board, oder ist der sub-d 9pol
stecker noch dazwischen? also wenn das datenkabel noch komplett ist,
stecktst dus einfach an deimn board.
hast du nur das siemensteckerchen am gerät, darfst du auf deinem
Controllerboard den MAX-Baustein natürlich nich verwenden. Leider kann
ich auf dem Bild nich viel erkennen, weils so klein ist. Die Belegung
vom Handy selbst, zmindest vom 55er habe ich nicht im Kopf.
Beim 45er ist 1 masse, 4 2.7Volt, 5+6 RX-TX. 5 und 6 wird gerne
vertauscht. läuft mit 2.7Volt, nicht mit3.3!!
Gruß
Axel

von Christian (Gast)


Lesenswert?

Hallo Axel
heute ist ein guter Tag ich habe meinen Ersten Befehl versendet.
Super Sache..

So nun kann es weiter gehen. Wenn ich den Befehl AT versende erhalte
ich auf dem Hyperterminal eine Bestätigung OK.

Das gleiche Möchte ich jetzt mit dem Controller realisieren. Da ich ja
Daten senden und Empfangen möchte.

Kannnst du vieleicht einmal über den Code schauen. Da ich mit der
Seriellen Schnittstelle noch nicht sehr viel Erfahrung habe.

Mit freundlichen Grüßen
Christian

P.S. Ich bedanke mich auf jeden Fall erst mal bei allen die mir so gut
bei meinem Problem geholfen haben. Vielen Dank..

Auszug aus meinem Quellcode.

void main(void)
{
        unsigned char empfang = 0x00;

  LCD_INI();
  LCD_text(0x80,"SMS-Versenden");
  LCD_kursor(2);

  PCON = 0x80;
  TMOD = 0x22;
  TH1 = 250;
  TL1 = 250;
  TR1 = 1;
  SCON = 0x52;
  TI=0;
  RI=0;

  SBUF = 'A';
        while (TI == 0);
        TI = 0;

  SBUF = 'T';
        while (TI == 0);
        TI = 0;

  SBUF = 0x0D;    // Enterbefehl
        while (TI == 0);
        TI = 0;

        SBUF = 0x0A;
        while (TI == 0);
        TI = 0;

  while(1)
  {
      empfang = SBUF;
      RI = 0;
      LCD_variable(0x90,empfang);     // Zeigt den Inhalt
      empfang = SBUF;
      RI = 0;
      LCD_variable(0x91,empfang);     // Zeigt den Inhalt
  }
}

von Axel Rühl (Gast)


Lesenswert?

jo, mach ich...
kann mal einer, der sich mit C auskennt hierzuwas sagen,bitte?

SBUF klingt nach BUFFER, könnte es sein, das der größer als ein Zeichen
ist?
statt

SBUF = 'A';
        while (TI == 0);
        TI = 0;
SBUF = 'T';
        while (TI == 0);
        TI = 0;

könnte man dann auch schreiben:
SBUF = 'ATD'+0x0D;
        while (TI == 0);
        TI = 0;
oder?

Zur Empfangroutine kann ich nichts sagen, sorry, würd' ich vielleicht
auch so machen.
Gruß
axelR

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Axel
habe es mal ausprobiert.(SBUF = 'ATD'+0x0D;)
Hat leider nicht Funktioniert.

Mit freundlichen Grüßen
Christian

P.S. im Anhang ist eine gute Zusammenfassung zum Controler und zur
Seriellen Schnittstelle

von Axel Rühl (Gast)


Lesenswert?

Hi Christian,
na, das wird wohl mit dem Controller nichts, ichmeine, da kann ich dir
nicht wirklich weiterhelfen. Ich habe zwar auch ein SiemensBoard mit
einem 8535 zu Hause, damit habe ich aber noch nichts angestellt, obwohl
es damals sehr teuer war.
Ich bin auf die Atmels ATmega und at90Sxxxx umgestiegen, weils
irgendwie besseer lief.

Nunja, das Datenblatt sagt ja eigentlich alles (war ja auch groß
genug)... SBUF ist also keine Variablrndeklaration sondern ein
Registername, aha. Mehr weiß ich nun auch nicht. Ich würd die Befehle
in eine tabelle packen und in einer Schleife die einzelnen Buchstaben
des Befehls übers SBUF-register rausschicken., glaube ich.

Was haten da fürn Compiler mit zum Board dazu gehabt?
War doch irgentwas mit Codebegrenztem Keil irgentwas?

Ich weiß nicht, ich komme mit meinen Atmel-dingern ganz gut zurecht,
aber mit 8051 etc.kenne ich mich nich aus, tut mir leid.

Gruß
AxelR

von Christian (Gast)


Lesenswert?

Hallo Axel
ich kann den Befehl über printf("ATD+0x0D")an das Handy senden.
Weiß nur noch nicht richtig wie die initialisierung der seriellen
Schnittstelle aussieht.

Alles eine Frage der Zeit..

Mit freundlchen Grüßen
Christian

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.