Hallo Zusammen Kann mir jemand helfen? Habe ein GSM Modul von MIPOT, welches durch AT-Commands (über RX und TX) angesteuert wird. Das senden von SMS ist kein Problem, funktioniert problemlos. Jedoch wenn ich bestimmte antworten z.B "OK" vom GSM-Modul einlesen möchte gibts probleme. Dazu benötige ich den get_string(); befehl. jedoch kann mein microcontroller die antwort des gsm moduls nicht einlesen, weil die ganzen daten auf einmal eintreffen. Wenn ich diese antworten vom HyperTerminal eingebe und schicke, kann der uC sie problemlos lesen... bermerkung: benutze als microcontroller einen PIC18F6622
Das kann viele Ursachen haben, inklusive einem Programmfehler deinerseits.
hier mein code abschnitt: puts("AT"); get_string(antwort_GSM1,7); get_string funktion sieht so aus:
1 | void get_string(char* s, int max) { |
2 | int len; |
3 | char c; |
4 | int8 counter=0; |
5 | |
6 | --max; |
7 | len=0; |
8 | do { |
9 | c=getc(); |
10 | if(c==8) { // Backspace |
11 | if(len>0) { |
12 | len--; |
13 | putc(c); |
14 | putc(' '); |
15 | putc(c); |
16 | }
|
17 | } else if ((c>=' ')&&(c<='~')) |
18 | if(len<max) { |
19 | s[len++]=c; |
20 | putc(c); |
21 | }
|
22 | |
23 | if(c==13) |
24 | {
|
25 | counter++; |
26 | }
|
27 | } while(counter<=1); |
28 | s[len]=0; |
29 | counter=0; |
30 | }
|
mätthu schrieb:
> get_string funktion sieht so aus:
schön, aber an der liegts nicht.
Das GSM Modul schickt mir nach dem "AT" ein "OK". Vor dem OK und nach dem OK befinden sich noch die zeichen CR und LF. Aber dann sollte ich doch das OK einlesen können?
Klingt für mich nach fehlender Datenfluss-Kontrolle (DTR/CTS). Das Modul hat wohl mehr Pufferspeicher und den kräftigeren Controller, deshalb kann es die ungebremst eintreffenden Daten vom MC verarbeiten und du hast kein Problem bemerkt. Wenn es jedoch (ebenfalls ungebremst) antwortet, kommt dein schwachbrüstiger MC aus dem Tritt (Puffer am UART?) ... Frank
hmm... die leitungen cts und rts u.s.w. benötige ich nicht. nur tx und rx. vom pc aus via hyper-terminal kann ich problemlos kommunizieren mit gsm modul und uC! jedoch von uC zu GSM Modul nicht 100%... hat irgendjemand schon mal versucht daten von einem gsm modul, oder ein anders gerät, einzulesen und auszuwerten?..
Das Problem hatte ich auch bei meinem GSM-Tracker. Hier der Artikel zum nachschauen: Beitrag "GSM GPS - Tracker" Ist zwar nicht in C, aber das Prinzip kann dort entnommen werden. Das Problem ist, dass das Modem die Daten "spiegelt". Das bedeutet, dass es die Daten, die es empfängt noch einmal ausgibt. Daher muss man nach dem Sendenbefehl erst die eigene Eingabe abwarten und anschließend noch zwei Zeilensprünge. Danach kommt die Antwort, also z. B. "OK" oder "NO CARRIER" oder "ERROR". Ich habe es mit einer dynamischen Fehlerkontrolle gelöst, da keine Datenflusskontrolle möglich ist. Das bedeutet, dass der Befehl wiederholt wird, solange bis eine definierte Antwort vorliegt. Dabei wird eine variable Anzahl von Linefeeds abgewartet.
Versuchs mal Interruptgestuert für µC-Rx... Ich denke du bekommst noch ein echo vom modem deiner eingabe und hast daher nen Wurm drin. Bei sowas empfiehlt es sich meistens parallel einen FTDI oder ähnliches dranzuhängen, um die Verbindung mittracen zu können, quasi onthefly debugging...
lese gerade du verwendest einen pic, sorry ich dachte instinktiv, dass es sich um einen AVR handelt.
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.