mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uart string empfängen bis zeichenfolge vom gsm-modem


Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Frage ich benutze momentan den code aus dem Tutorium um einen 
String über Uart zu empfangen. Jetzt möchte ich aber von meinem 
GSM-Modem über AT befehle die "OK"'s empfangen, diese werden jedoch 
angeführt vom befehl das man gesendet hat (quasi ECHO) und zusätzlich 
noch so ein paar \r und \n hier mal ein beispiel:

ich sende den befehl: at\r
Antwort: at\r\r\nOK\r\n

das führt natürlich zum abruch des string empfanges. Wie könnte ich den 
folgenden Code ändern das er wartet bis alles vom gsm-modem empfangen 
wurde???? und ggf. nach einer gewissen zeit (ok mit einem timer/counter) 
abgebrochen wird.
int usart0_getc(void)
{
    while (!(UCSR0A & (1<<RXC)));   //Warten bis Zeichen verfügbar
    return UDR0;          //Zeichen aus UDR an Aufrufer zurückgeben
}

void usart0_gets(char* Buffer, int MaxLen)
{
  int NextChar;
  int StringLen = 0;
 
   NextChar = usart0_getc();  //Warte auf und empfange das nächste Zeichen
                 //Sammle solange Zeichen, bis:
                // * entweder das String Ende Zeichen kam
                // * oder das aufnehmende Array voll ist
  while(NextChar != '\r' && StringLen < MaxLen - 1)
  {
      *Buffer++ = NextChar;
    printf("%c",NextChar);
      StringLen++;
      NextChar = usart0_getc();
  }
 
  //Noch ein '\0' anhängen um einen Standard
  //C-String daraus zu machen
  *Buffer = '\0';
}

Autor: fb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht, ob Dei GSM-Modem das macht, aber "ATE0" sollte dieses 
Verhalten eigentlich abschalten. Jedenfalls haben die Modems früher das 
so gemacht.

lg,
Frank.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der befehl ate0 funktioniert bei meinem modem auch, jedoch sind die CR 
und LF immer noch dabei. hier ein beispiel:

sende: at\r
antwort: \r\n\OK\r\n

das erste CR würden den empfang abbrechen.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte man vielleicht den code so ändern das er auf ein OK wartet statt 
auf \r oder \n ???

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner eine IDEE?!?!? :-S

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..Du könntest den Code so ändern, dass er auf ein "OK\r\n" wartet statt 
auf '\r' oder '\n'.

HTH

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while(NextChar != '\r' && StringLen < MaxLen - 1)

hier kann man aber nur ein zeichen eingeben

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>> ich sende den befehl: at\r
>>> Antwort: at\r\r\nOK\r\n
Dann warte eben auf das \n... :-/
  while(NextChar != '\n' && StringLen < MaxLen - 1)

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja aber vor dem OK kommt schon ein \n ;-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ja aber vor dem OK kommt schon ein \n ;-)

Dann hol es ab und ignoriere es.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.