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
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
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
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
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
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
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
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
Hallo Sven aber wieso funktioniert das den dann beim Hyperterminal?? MFG Christian
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.
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
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
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
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;
Hallo Axel ich werde es gleich mal ausprobieren. Mit freundlichen Grüßen Christian
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
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.
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
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 } }
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.