Forum: Mikrocontroller und Digitale Elektronik TC35 Telefonbuch


von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

Moin!  Ich versuche derzeit einem Tc35 Handymodul mittels AT Befehlen 
die Telefonbucheinträge zu entlocken. Mit AT+CPBR=1 geht garnix, da 
kommt immer Error zurück. Bei At+Cpbr=2 kommt manchmal die Nummer, aber 
was ja garnicht geht, oft auch nur ein "Ok" zurück! Ich habe testweise 
10 Nummern auf der Sim gespeichert. Kennt jemand dieses Verhalten? PS: 
Sms Versand im Textmodus geht super!

von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

Ich habe nunmal weiter geforscht warum es zu diesem Verhalten kommt. 
Mein bascom Programm kommt offenbar mit den gesendeten Zeichen nicht 
klar. Es kommt immer zum Ende der ausgegebenen Einträge die Bin-Zeichen 
"10" , gefolgt von der "13". Also steht immer ein LF und ein CR 
hintereinander.

Kann man dem Modem in seinen Einstellungen irgendwie beibringen, dass 
nur das CR am Ende des Strings ausgegeben wird?

Bzw., ist jemand bekannt wie ich "Case" dazu nutzen kann das LF 
auszufiltern? Case ist doch eine "Fall"-Verzweigung, welche mir a.G. 
eines angegebenen Zeichen eine Verzweigung ausführt?

Danke für eure Hilfe, vielleicht hat ja einer nen Beispielcode für das 
Lesen des Telefonbucheintrags mittels AT+CPBR=... parat :-)

Danke!

von Tilt (Gast)


Lesenswert?

Uwe Neubert schrieb:
> Bzw., ist jemand bekannt wie ich "Case" dazu nutzen kann das LF
> auszufiltern? Case ist doch eine "Fall"-Verzweigung, welche mir a.G.
> eines angegebenen Zeichen eine Verzweigung ausführt?

Vielleicht geht was mit CONFIG INPUT ???
http://avrhelp.mcselec.com/configinput.htm

Ist aber Raterei ohne Code.

von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

Hier ist der Code. Er soll im Terminalprogramm lediglich anzeigen was 
der Controller empfangen hat:

Dim I As Byte , B As Byte
Dim Sret As String * 66 , Stemp As String * 20
Dim Status As Byte

Config Serialin = Buffered , Size = 17
Enable Interrupts

Print "ATE0"

Waitms 2000
Waitms 2000
Print "AT+CMGF=1"
Sret = ""

Print "at+cpbr=1"
Getline Sret

Print "Inhalt nach SPbr1 ist:"
Waitms 100
Print Sret
Waitms 500

'get line of data from buffer
Sub Getline(s As String)
 S = ""
 Do
 B = Inkey()
 Select Case B
 Case 0
 Case 13
 Case 10 : If S <> "" Then Exit Do
 Case Else
 S = S + Chr(b)

 End Select

 Loop

End Sub
Waitms 500
'flush input buffer
Sub Flushbuf()
 Waitms 100
 Do
 B = Inkey()                                                ' flush 
buffer
 Loop Until B = 0
End Sub

Return

von Tilt (Gast)


Lesenswert?

Vielleicht so? (nicht syntax gecheckt)
1
Sub Getline(s As String)
2
 S = ""
3
 Do
4
  B = Inkey()
5
  Select Case B
6
   Case 0                      'mach nichts wenn inkey eine 0 zurückliefert
7
   Case 13 : S = S + Chr(b)    'CR wird noch an S angehangen
8
             Exit Do           'dann Schleife/Sub verlassen
9
   Case 10                     'mach nichts bei LF
10
   Case Else : S = S + Chr(b)  'alle anderen Zeichen an S anhängen
11
  End Select
12
 Loop
13
End Sub

Kenne das Modem nicht:
Wird am Ende jeden der 10 Telefonbucheinträge ein LF CR ausgegeben?
Oder erst ein LF CR am Ende der kompletten Ausgabe?
Wenn es nicht klappt müßtest du mal genau beschreiben, wie Getline 
arbeiten soll.
Getline läuft bei dir solange in der Schleife, bis die Abbruchbedingung 
kommt (LF). Dafür kannst du auch INPUT nehmen und mit CONFIG INPUT auf 
LF CR als Input komplett konfigurieren.

von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

Dieses doofe Modem spuckt das so aus:
Cpbr1:LF CR, Nummerneintrag, LF CR

Das ist halt doof beim Einlesen da man im Text immer die 
Abbruchbedingungen hat. Das Siemens machts halt so. Ich hab auch Wavecom 
Modems, die spucken nur ein CR am Schluss und fertig. Für das Projekt 
ist aber das Siemens vorgesehen :-(

von Tilt (Gast)


Lesenswert?

Uwe Neubert schrieb:
> Dieses doofe Modem spuckt das so aus:
> Cpbr1:LF CR, Nummerneintrag, LF CR

Was soll Getline mit   LF CR, Nummerneintrag, LF CR   genau machen?

Erstes LF verwerfen
Erstes CR verwerfen
Erstes Komma verwerfen
Nummerneintrag in S schreiben
Zweites Komma verwerfen
.
.

Beschreib genau, was Getline machen soll!!!

von Tilt (Gast)


Lesenswert?

Tilt schrieb:
> Erstes LF verwerfen
> Erstes CR verwerfen
> Erstes Komma verwerfen
> Nummerneintrag in S schreiben
> Zweites Komma verwerfen
> .
> .
>
> Beschreib genau, was Getline machen soll!!!

Falls nur das erste LF und erstes CR stören könnte man einfach noch eine 
Schleife vorne vorsetzen:
1
Sub Getline(s As String)
2
3
 do
4
   b = Inkey()
5
   if b = 13 then exit do      'nach erstem CR Schleife verlassen
6
 loop
7
 
8
 S = ""
9
 Do                            'Zeichen sammeln 
10
  B = Inkey()
11
  Select Case B
12
   Case 0                      'mach nichts wenn inkey eine 0 zurückliefert
13
   Case 13 : S = S + Chr(b)    'CR wird noch an S angehangen
14
             Exit Do           'dann Schleife/Sub verlassen
15
   Case 10                     'mach nichts bei LF
16
   Case Else : S = S + Chr(b)  'alle anderen Zeichen an S anhängen
17
  End Select
18
 Loop
19
End Sub

Insgesamt nicht schön, könnte aber funktionieren?

von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

Ich habe eben beide modems verglichen, sie spucken 1:1 dasselbe aus. Ich 
werde deinen Vorschlag heute Abend testen. Dankedir erstmal!!!

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.