Hallo zusammen,
Ich habe eine Funktion geschrieben, die die Signalstärke eines
GSM-Moduls auswertet. Das ganze funktioniert über AT-Befehle.
Ich sende dem Modul AT+CSQ<ENTER> und das Modul antwortet mit (z.B.)
+CSQ: 13,99 wobei 13 die endscheidende Zahl ist, die ich benötige. Meine
Funktion funktioniert beim ersten Durchlauf wunderbar, beim zweiten
Durchlauf bleibt die Funktion bei while(!(0 == ukbhit2())); am Anfang
der Funktion hängen.
Also sendet das Modul nichts mehr zurück beim zweiten Durchlauf! Wenn
ich die AT-Befehle aber über ein Terminal an das GSM-Modul sende, kriege
ich immer eine Antwort, auch wenn ich jede Sekunde sende. In meiner
main() rufe ich die Funktion nur alle 3 sec auf. Also Zeit genug sollte
das Modul haben, also liegt es nicht am Modul.
1 | /*************************************************************************
|
2 | Function: GsmSignalAbrufen()
|
3 | Purpose: Fragt die Signalstärke des GSM-Moduls ab.
|
4 | Input: none
|
5 | Returns: Status 0...1 schlechter Empfang, 11...31 guter Empfang, 99 nicht feststellbar
|
6 | **************************************************************************/
|
7 | char gsmtemp2[3];
|
8 | char *GsmSignalAbrufen(void)
|
9 | {
|
10 | uint8_t i=0;
|
11 | char gsmzeichen;
|
12 | char gsmsatz[20];
|
13 | char gsmtemp[9];
|
14 |
|
15 |
|
16 | _delay_ms(100);
|
17 |
|
18 | uputs2("AT+CSQ\r\n"); //Eingabe AT-Befehl
|
19 | uputs0("3. Schritt\n");
|
20 | while(!(0 == ukbhit2()));
|
21 | uputs0("4. Schritt\n");
|
22 | while (ugetchar2() != 10); //Erste Zeile bis Linefeed (\r\n) einlesen und verwerfen
|
23 | do // Kompletten Datensatz empfangen
|
24 | {
|
25 | gsmzeichen = ugetchar2(); // Zeichen von USART einlesen
|
26 | gsmsatz[i] = gsmzeichen; // Zeichenkette erweitern
|
27 | i++;
|
28 | } while (gsmzeichen != 10); // Zeilende v. Datensatz erkennen
|
29 |
|
30 | strncpy(gsmtemp, gsmsatz, 8); //Die ersten 8 Zeichen des Strings kopieren
|
31 | gsmtemp[8] = '\0';
|
32 | strrev(gsmtemp); //String umdrehen
|
33 | strncpy(gsmtemp2, gsmtemp, 2); //Die ersten 2 Zeichen des Strings kopieren
|
34 | gsmtemp2[2] = '\0';
|
35 | strrev(gsmtemp2); //String wieder umdrehen
|
36 |
|
37 | if(!(0 == ukbhit2())) //Dritte Zeile anholen und verwerfen
|
38 | while (ugetchar2() != 10);
|
39 |
|
40 | return gsmtemp2;
|
41 | }
|
Woran könnte das liegen? Schonmal vielen Dank für eure Hilfe.