- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: UART(Eingabe) empfangen/auswerten

  1. #1

    UART(Eingabe) empfangen/auswerten

    Anzeige

    Powerstation Test
    Atmega 162
    AVR Studio 5

    Hi

    mein Problem dreht sich weniger um die UART als um die Eingabeauswertung.
    Also ich Suche einen schnellen Weg eine Eingabe auszuwerten zb +78,5.
    Einen Befehl Stelle für Stelle auszuwerten ist kein Problem, also Eingabe in Buffer schreiben und da die Stellen auszuwerten.
    Das ist aber lang und net schön anzuschaun. Das eigentliche Problem ist die zweistellige Zahl mittendrinne. Wenn ich alles in einen Buffer schreibe dann ist die ja auf die Stellen buffer[1] und buffer[2] aufgeteilt.
    Es ist nicht unbedingt schwierig die 2 Stellen in eine Variable zu schreiben, aber vielleicht weiß ja jmd von euch wie man die gesamte Eingabe einfacher und kürzer Auswerten kann.
    Zwei Zahlen in eine Variable schreiben würde ich so machen

    for(i=1; i<=2; i++)
    {
    buffer2[i]=buffer[i];
    }
    val=buffer2;


    Ok vielleicht versteht man nicht ganz was ich will, also nochma kurz.

    Eingabe: +74,5
    auswerten(Zeichenzahl, Nachkomma,..)
    weiterverarbeiten(in ein Register schreiben, man kann es nicht als ganzes reinschreiben)


    Frage is nun nach einem schnellen und einfachen Weg.

    Ich habe ein Beispiel angehängt von einer Eingabeaufforderung die ich mal für ein ADC-Projekt geschrieben hatte.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zuerst solltest du dafür sorgen, daß am Ende deiner Eingabe ein Null-Byte ist, z.b. wenn ein '\r' kommt, ein '\0' in deinen Buffer. Dann kannst du alle gängigen Stringfunktionen darauf anwenden, z.b. atoi (ascii to integer).

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    hi

    also das Beispiel das ich angehängt habe funktioniert so wie es ist. Die Eingabe sieht zB so aus: <3/5> + /r(Eingabe-Endzeichen). Das sind 6 Zeichen und der Buffer is 6 Zeichen groß, also passt es rein. Würde es nicht passen dann würde ja die Fehlermeldung wegen Bufferoverflow kommen. Oh warte ich sehe was du meinst aber ich habe ja die Zeichen einzeln ausgewertet also nicht als ganzen string, also war es nicht nötig das string-Endzeichen zu beachten.
    Das ist ja aber eigentlich auch nicht das Problem, sondern fand ich die Auswertung uneffektiv.
    Die Funktionen itoa(), atoi() oder ähnliches würden hier nicht funktionieren bzw sehe ich nicht den Sinn darin das umzuwandeln. Was du meinst wäre ja ein String zu einer Zahl, also atoi() und die Beschreibung von atoi() ist "Converts a string representing an integer to an integer." Selbst wenn ich die Eingabe ohne Vorzeichen machen würde dann wäre es immernoch eine Kommazahl also float. Wenn man einen string to float machen will dann kann man atof() nutzen, da wäre Eingabe wie "+70.5" möglich. Aber dadurch habe ich nichts gewonnen da ich ja trotzdem die Eingabe auswerten muss also schaun ob das Vorzeichen + oder - ist, im welchen Bereich die Vorkommazahl liegt(0-127) und ob das Nachkomma 0 oder 5 ist. Also gewinne ich nichts wenn ich den string umwandel bzw wie Werte ich die Einzelteile eines float aus?
    Die Frage ist also ob es möglich ist, möglichst einfach das Eingegebene auszuwerten. Bei der Eingabe ist es möglich eine einstellige bis dreistellige Vorkommazahl einzugeben und das ganze in nem string auszuwerten ist umständlich, da es ja nicht sinnvoll wäre den Nutzer vorzuschreiben immer 3 Vorkommastellen einzugeben also zb 003 oder so. Also sollte es egal sein ob es 1 oder 3 Stellen sind und das muss bei der Auswertung beachtet werden. Bei einer Auswertung eines Integer ist es ja egal wieviel Zeichen die Zahl hat aber dafür müsste ich das Eingegebene wieder aufteilen und in Variablen speichern. Mir fällt aber nichts ein wie ich das mache bzw wie stelle ich fest wieviel Vorkommazeichen eingegeben wurden?
    Also würde ich gern wissen ob jemand schonmal so eine Auswertung geschrieben hat oder ob jemand eine Idee hat wie man das am Besten umsetzt.

    Gruss
    Geändert von TheDuke (12.09.2011 um 11:47 Uhr)

Ähnliche Themen

  1. EEPROM/UART-eingabe Atmega162
    Von TheDuke im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 12.09.2011, 11:27
  2. RS232 daten empfangen, senden und auswerten
    Von Crischan im Forum Software, Algorithmen und KI
    Antworten: 62
    Letzter Beitrag: 20.03.2009, 17:10
  3. Daten empfangen, speichern und auswerten mit Bascom
    Von nowayz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 04.02.2009, 10:23
  4. Über RS232 Wort Empfangen und auswerten
    Von winke im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 19.08.2006, 21:30
  5. UART empfangen
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 14:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests