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.
@elektrolyt
>$baud = 19200 'laut C35i Anleitung die Baudrate
...lesen hilft manchmal eine Menge.
gez. Katapulski
Probier bitte nur einen AT abzusetzen. Das Handy antwortet mit OK.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.