Forum: Mikrocontroller und Digitale Elektronik Von Siemens C35i Daten über UART empfangen mit BASCOM


von Philipp (Gast)


Lesenswert?

Hallo

Folgendes Problem: Ich möchte mit einem ATMEGA8 mein Siemens C35i per 
AT-Befehle steuern. Ich habe mein myAVR LPT Board mit RS232 
Schnittstelle mit einem orignalen Siemens Datenkabel mit dem C35i 
verbunden und möchte es damit steuern. Das klappt soweit ganz gut jedoch 
schaffe ich es nicht die Antwort des Handys auf die AT-Befehle zu 
empfangen. Folgendes kleine Programm habe ich in BASCOM geschrieben:

$regfile = "m8def.dat"
$crystal = 3686400    'mein ext. Quarz
$baud = 19200         'laut C35i Anleitung die Baudrate

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , 
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2   'so ist das LCD an meinem myAVR-Board angeschloßen

Dim B As Byte
Dim Sret As String * 64

Enable Interrupts

Declare Sub Getline(s As String)

Print "AT+CGMI"

Getline Sret

Lcd Sret

Sub Getline(s As String)
 S = ""
 Do
 B = Inkey()
 If B <> 0 Then S = S + Chr(b)

 Loop Until B = 0

End Sub

Verbinde ich das Handy mit meinem PC, so antwortet es im Hyperterminal 
auf den Befehl AT+CGMI mit "Siemens". Genau dies soll auch im LCD meines 
myAVR-Boards stehen. Dort kommt allerdings nur "ppppppppp" an.
Habe auch schon mit den $baud Werten gespielt (2400, 4800, 9600) jedoch 
ohne Erfolg.

PS: Bin absoluter Mikrocontroller und BASCOM Neuling.

von Elektrolyt (Gast)


Lesenswert?

19200 bauds mag der c35...

von Katapulski (Gast)


Lesenswert?

@elektrolyt
>$baud = 19200         'laut C35i Anleitung die Baudrate

...lesen hilft manchmal eine Menge.

gez. Katapulski

von Gast (Gast)


Lesenswert?

Probier bitte nur einen AT abzusetzen. Das Handy antwortet mit OK.

von Joachim R. (bastelbaer)


Lesenswert?

Philipp wrote:

> $baud = 19200         'laut C35i Anleitung die Baudrate
Und jetzt noch laut Anleitung des BASCOM folgende Anweisung
BAUD = 19200
Mit $Baud setzt du nur die Compilersettings, BAUD den UART.

Und falls es dann immer noch nicht läuft, probier mal gepuffertes Lesen 
via
serielle im Stile von:

Config Serialin = Buffered , Size = 64
Enable Interrupts                 ' Timer und seriellen Buffer 
aktivieren

Wenn du SMS im PDU-Mode auslesen willst ist das auf jeden Fall die 
bessere Idee. Und die Abfrage

Loop Until B = 0

ist auch nicht glücklich. Wenn du zu schnell einliest, dann bricht die 
Routine ab bevor das nächste Zeichen da ist. Besser wäre imho:

  Timeout = 30              ' 3 Sekunden auf Antwort warten
  Rec_string = ""           ' erst mal löschen
  Ende = 0
  While Ende = 0            ' nun bis zum Ende warten
    If Ischarwaiting() = 1 Then     ' wenn was da ist
      Rec_char = Waitkey()          ' einlesen
      Select Case Rec_char          ' und auswerten
      Case 13                      ' ignorieren
        ' do nix
      Case 10                       ' LF empfangen, Zeile da
        Ende=1
      Case Else
        Rec_string = Rec_string + Chr(rec_char)
      End Select
    End If
    ' Evntl. Timeout ablaufen lassen, dann mit Timeout beenden
    If Timeout = 0 Then Ende=2
  Wend

Natürlich die Variablen definieren und Interruptroutine die den Timeout 
runterzählt. Ich habe die Routine so ähnlich für S25 und S45 laufen.

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.