Forum: Mikrocontroller und Digitale Elektronik AVR-Board, Handy, RS232


von Micha (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

hm,

der senden draht vom pc geht an empfang am board. Das kabel pc - board 
ist doch 1-1 oder? Buchse - stecker?

mike

von Micha (Gast)


Lesenswert?

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

von sven (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von Ingo B. (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von Samuel Schmitt (Gast)


Angehängte Dateien:

Lesenswert?

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.

von MdeWendt (Gast)


Lesenswert?

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

von ChristianW (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von Samuel Schmidt (Gast)


Lesenswert?

Hallo,

ich selbst habe das STK500, und wenn ich da das Handyanschließen will, 
brauche ich ein geXtes Kabel.
Also RX und TX vertauschn

von Sven (Gast)


Lesenswert?

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

von Jörg (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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

von sven (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.