AVR Uart Strings einlesen

OP (Firma: TU Wien) #404667
Lesenswert?

Zur Uart-Programmierung  verwende die C-Bibliothek von Peter Fleury.
Hier gibt es die Möglichkeit einen einzelnen Charakter zu empfangen
(uart_getc()). Wie bewerkstellige ich das Einlesen eines ganzen Strings
(Text von einem externen Messgerät)?
Hat hier jemand schon mal was programmiert?
#404668
Lesenswert?

Das allerwichtigste, das du klären musst ist:
Woran kann man erkennen das der übertragene String
jetzt zuende ist?

Das ist das der Dreh- und Angelpunkt in der ganzen Sache.
Normalerweise wird dazu ein spezielles Zeichen benutzt.
Sei dies jetzt ein Carriage Return oder ein ';', sei es
ein '.' oder sonst irgendein Sonderzeichen. Denkbar wäre
auch, dass mit dem ersten Leerzeichen der String zuende ist,
oder das der zu übertragende String in " eingeschlossen wird.
Es gibt mit Sicherheit noch x andere verschiedene Möglichkeiten
die mir jetzt in 20 Sekunden nicht einfallen.

Und daher gibt es keine fertige Funktionen.
In dem Moment aber, in dem du weist welche Methode du
benutzen kannst/willst ergibt sich die String Lesefunktion
praktisch von selbst. Es läuft letztendlich immer auf
eine Schleife hinaus, die einzelne Zeichen einiest und im
Zielstring speichert. Wie die Schleifenabbruchbedingung jetzt
konkret aussieht ergibt sich aus der gewählten Methode, wie das
Ende des zu übertragenden Strings aussieht.

Benutzt du zb. einen ';'

void uart_gets( char* Buffer, int BufferLen )
{
  int i = 0;
  char c;

  while( ( c = uart_getc() ) != ';' && i < BufferLen - 1 )
    Buffer[ i++ ] = c;

  Buffer[i] = '\0';
}
OP (Firma: TU Wien) #404669
Lesenswert?

Danke!!
ich hatte schon eine ähnliche Routine geschrieben nur wollte das nicht
klappen.
Der Grund lag darin, dass ich bevor ich die Daten empfangen kann, dem
Messgerät einen Befehl senden muss, dass er die Messdaten senden soll.

Der Art: uart_puts("$SP\r"); <-- Sende Powerwert

Frage ich danach sofort ab (siehe deine Funktion) dann klappt das
nicht!
Ich musste eine Verzögerung von einigen ms einbauen! Nun klappt es!
Obwohl mir das nicht ganz klar ist! Ist doch die Abfrage interrupt-
gesteuert! Das Eintreffen eines Zeichens, wird doch durch eine
Interruptroutine festgestellt. Vielleicht komme ich noch dahinter.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren