Hallo Leute, bin am Verzweifeln! Ich Versuche mit einem AVR-Board (von http://www.mikrocontroller.com) ein Siemens-Handy, über RS232, zu steuern. Leider erhalte ich keine Rückmeldung vom Handy. Wenn ich jedoch das Handy an den PC anschließe und mit dem Terminalprogramm vom Norton-Commander die Zeichenfolge sende erhalte ich die gewünschte Rückmeldung. Hier ist ein Ausschnitt meines Programmcodes: $regfile = "4434def.dat" $baud = 19200 $crystal = 8000000 Const Cmaxchar = 16 'number of characters Dim B As Bit 'a flag for signalling a received character Dim Bc As Byte 'byte counter Dim Buf As String * Cmaxchar 'serial buffer Dim Key As Byte 'Tasten auf Board ' Initialisierung LC-Display Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Config Lcd = 16 * 2 Config Portc = Output Reset Portc.1 Initlcd Cursor On Cls Lcd "Start" Wait 10 On Urxc Rec_isr 'define serial receive ISR Enable Urxc 'enable receive isr Enable Interrupts 'enable interrupts to occur '----------------------------------------------------------- ' Hauptprogramm Do 'Tastaturabfrage Key = Pina And &B11111000 Locate 1 , 1 If Key = 128 Then Lcd "atz" Print "atz"; Print Chr(13) ; Chr(10); Wait 2 Elseif Key = 64 Then Lcd "ate0" Print "ate0"; Print Chr(13) ; Chr(10); Wait 2 Elseif Key = 32 Then Lcd "at+cmgw=140" Print "at+cmgw=140"; Print Chr(13) ; Chr(10); Wait 2 Elseif Key = 16 Then Lcd "SMS PDU-Format" Print "0001000c91947111440955000005c8329bfd06"; Print Chr(26); Wait 2 Elseif Key = 8 Then Lcd "at" Print "at"; Print Chr(13) ; Chr(10); Wait 2 Else Lcd " " End If If B = 1 Then 'we received something Disable Serial Locate 2 , 1 Lcd Buf 'print buffer 'now check for buffer full If Bc = Cmaxchar Then 'buffer full Buf = "" 'clear Bc = 0 'rest character counter End If Reset B 'reset receive flag Enable Serial End If Loop '----------------------------------------------------------- Rec_isr: If Bc < Cmaxchar Then 'does it fit into the buffer? Incr Bc 'increase buffer counter If Udr = 13 Then 'return? Buf = Buf + Chr(0) Bc = Cmaxchar Else Buf = Buf + Chr(udr) 'add to buffer End If End If B = 1 'set flag Return End 'end program Im Terminalprogramm habe ich Makros mit den Gleichen Zeichenfolgen belegt, wie ich sie auch vom AVR-Board sende. Zur Kontrolle habe ich beide Zeichenfolgen aufgezeichnet - ich erhalte auch die gleichen Ergebnisse. Was mache ich falsch? Gruß Micha
Hallo, ich habe zwar keine Ahnung vom Handy aber ist bei der PC-Schnittstelle und der Schnittstelle am Bord nicht Rx Tx vertauscht? Gruß Mike
Hallo Mike, ich bin mir nicht ganz sicher, aber Rx liegt an Pin 2 und Tx liegt an Pin 3 - also wie eine normale RS232-Beschaltung. Oder sehe ich das falsch? Gruß Micha
hm, der senden draht vom pc geht an empfang am board. Das kabel pc - board ist doch 1-1 oder? Buchse - stecker? mike
Hallo Mike, an das Board habe ich einen 9-poligen Stecker angeschlossen (Beschaltung wie im Schaltplan angegeben (RX an Pin2 usw.)). Das Handy schließe ich direkt an (sowohl Board, als auch PC). Zum Mitschneiden der Daten habe ich einen Laptop, über ein Nullmodem-Kabel, angeschlossen. Da ich mir nicht 100%ig sicher bin möchte ich die Leitungen auch nicht tauschen (wegen Ausgang auf Ausgang). Was kann noch falsch sein? Gruß Micha
Hallo Micha, Also für den Anschluß eines Handy's am Pc oder am Mikrokontroller würde ich generell ein Datenkabel für's Handy kaufen, und es darüber anschließen. schau mal hierzu auf www.handyzubehoer.de, da kriegst du die Kabel für 5 euro und'n paar kaputte. dann habe ich in deinem quellcode kannst du dir das Print chr(10);print chr(13) sparen, indem du dein smikolon hinter dem jeweiligen Befehl einfach weglässt. z.b. Print "AT" fertig. mit dem Befehl cmgw speicherst du nur eine SMS im memory des Handys ab.... Sven
Hallo Sven, natürlich habe ich ein Datenkabel. Wenn ich ein Semikolon hinter dem Print platzier wird nur ein Linefeed angehängt; ich brauche aber CR(0x0D) und LF(0x0A). Mit dem "cmgw" ist schon richtig; ich will ja nicht bei jedem Versuch eine SMS abschicken. Falls das Handy meine Befehle endlich mal annimmt, werde ich es durch ein "cmgs" ersetzen. Gruß Micha
Hi, welches Modem verwendest Du? Viele haben kein echtes Modem eingebaut, sondern verwenden ein Softwaremodem über Windows (z.B. 3210). Ein 6210 hat im Gegensatz dazu ein richtiges Modem integriert... Bis dann, Ingo
Hallo Ingo, das Handy ist ein S35i. Was ich an der ganzen Sache nicht verstehe ist, wenn ich die AT-Kommandos im Terminalprogramm eingebe zB. "ate0" bekomme ich als Rückantwort das "OK". Wenn ich dieses AT-Kommando vom AVR-Board absetze bekomme ich keine Rückantwort. Das Basic-Programm scheint aber richtig zu funktionieren, denn es sendet die AT-Kommandos genau wie das Terminalprogramm und die Interruptroutiene stellt auch die empfangenen Zeichen dar (die ich im Terminalprogramm eingebe). Die Belegung des Sub-D-Steckers (Rx Pin 2, Tx Pin 3) ist doch richtig? Könnte es ein Timingproblem sein? (Was ich aber bezweifle, denn die AT-Kommandos vom Terminalprogramm werden über Makroa abgesetzt) Was kann ich noch testen bzw. überprüfen? Gruß Micha
Hi Hast du einen RS232 Treiber am AVR?(er negiert) Baud im AVR OK? RTS/CTS werden nicht benötigt? Empfange doch deine AVR-Signale am besten mal am PC, da ist die Kontrolle einfacher.(Antworten geht auch noch) Gruss Uwe
Hallo an Alle, ich habe ja schon Alles probiert. Die vom AVR-Board abgehenden Daten habe ich in ein File geschrieben. Diese stimmen exakt mit denen vom PC überein. Nur das Handy reagiert auf die Daten vom PC, aber nicht auf die vom AVR-Board. ????????????????????????????? Gruß Micha
Hallo, Hast Du wenn Du das Handy anschließt RX und TX vertauscht? uC<->PC<->Handy RX<->TX<->RX TX<->RX<->TX so kann der PC mit dem uC und/oder dem Handy "sprechen". Aber wenn man bei dem Gedankenspiel den PC wegläßt: uC<->Handy RX<->RX TX<->TX das past dann wohl nicht, also wenn der uC mit dem Handy "sprechen" soll, RX und TX vertauschen. Es kann auch sein, dass das Daten Kabel auf einem Pin (ich meine DTR) noch 5V für die eigen Elektronik braucht. Mußte ich aber bei mir nicht anschließen. Ich habe das ganze mit anhängendem ASM Code getestet. Läßt das Handy die zuletzt gewählte Nummer wieder anrufen. Wenn Du den Fehler hast, poste es doch bitte hier. Interessiert mich woran es lag.
Hallo Micha, ich hatte genau das gleiche Problem. Allerdings reagierte das Handy auf Kommandos vom Atmel. Der Atmel empfing aber auch keine Antwort. sendstring1("atd1234;"); // wählt 1234 outp( 0x0D,UDR1); // CR Es ging aber auch nur wenn ich statt LF und CR NUR CR (0x0D) angehängt habe. Dann wählte das Handy (sorry verwende AVRGCC). Habe damals quasi aufgegeben und nur gesendet. Martin
Hallo, habt ihr schon mal die Spannungspegel an der Schnittstelle gemessen? Benutzt ihr einen Schnittstellentreiber zb. Max 232 oder so? Denn die Pegel die das Handy sendet könnten zu klein sein. Christian
Hallo, die Pegel hab' ich nicht nachgemessen. Aber das Handy sendet richtig (zumindest zum PC) und empfängt auch richtig (vom PC). Das AVR-Board zeigt im Zusammenspiel mit dem PC das gleiche Verhalten. Am PC und am AVR-Board sind 9-polige SUB-D Stecker mit fast der gleichen Belegung (am AVR-Board sind keine Steuersignale sonden nur die Steuerleitungen gebrückt). Zur Verbindung AVR-Board <---> PC verwende ich ein Nullmodem-Kabel, bei dem alle Leitungen beschaltet sind. Gruß Micha
Hallo, ich selbst habe das STK500, und wenn ich da das Handyanschließen will, brauche ich ein geXtes Kabel. Also RX und TX vertauschn
Hallo Micha, Bitte bedenke, das man für die Verbindung zwischen PC ein Buchse - stecker kabel verwendet, daher auf dem Controller board eine Buchse. Das Datenkabel vom Handy , braucht aber einen Stecker.... du mußt dann also den Stecker auf dem Kontrollerboard komplett anders anschließen, da ja dann alles Spiegelverkehrt ist.... Wenn du dein Kontrollerboard mit dem PC verbindest und dann Spannung anlegst,siehst du denn dann im terminalprogram was der Atmel sendet ??? Sven
Hallo ME, messe doch mal die Spannung an der Ladungspumpe vom MAX 232. Im Schaltplan sind als C's 100n eingezeichnet. Wenn ich micht recht erinnere müßten hier 10µ bestückt sein, eine Version des MAX kommt auch mit 1µ aus. Möglicherweise haben die Sendepegel halt nicht wie vorgeschrieben +/- 12V. Denkbar ist auch ein Pegelschwingen bei falscher Bestückung der Ladungspumpe. Hatte ich in einer ähnlichen Beschaltung. Der Fehler kann aber schnell mal mit einem Oszi lokalisiert werden. Du weißt ja wo welche stehen. Gruß Jörg
Hallo Leute, Hurra ich hab's geschafft. Mein AVR-Board kann nun eine SMS zum Handy schicken. Das Problem bestand darin, das auf Pin 4 des Sub-D Steckers eine positive Spannung liegen muß. Diese Spannung wird für das Datenkabel benötigt. Ich habe dazu von Pin 7 des MAX232 (zweiter TX-Ausgang) eine Brücke zum Pin 7 des Steckverbinders JP1 gelötet. Der dazugehörende TX-Eingang liegt schon auf Masse. Jetzt muß ich noch die Auswertung der Handyrückmeldungen realisieren. Dazu noch eine Frage: Ich möchte die Rückmeldungen auf dem LC-Display ausgeben. Wie muß der Interupt der seriellen Schnittstelle im Bascom-Basic behandelt werden? Danke an Alle die sich an dieser Diskusion beteiligt haben. Gruß Micha
Hallo Micha, Schön das du es endlich geschafft hast. Also ich hab das bei mir nicht über nen interrupt gemacht, sondern frage alle 3 sekunden, ob ne nachricht im handyspeicher liegt. nach dem lesen, wird die nachricht dann gelöscht. hoffe ich konnte dir helfen. sven
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.