mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperaturwert auf LCD


Autor: wirehead (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich übe mich gerade an einem Thermometer mit dem AVR mega16 in C.
Hab die messdaten soweit aufbereitet das ich nun eine Variable mit
einem wert zwichen 0-600 habe wobei die letzte stelle immer die hinter
dem komma ist. Das minuszeichen wird "manuell" hinzugefügt.
Mein ganzes Problem ist jetzt das ich die werte im LCD mit komma oder
punkt ausgeben will und ich nicht genau weis wie ich das anstellen
soll.
Der Plan war den wert in seine einzelnen zahlen zu spalten aber da weis
ich auch nicht so recht wie ich das anstellen soll...
Hat jemand ein vorschlag oder ansatz für mich wie ich das anstelle?
Die LCD routine ist die von Peter Fleury.

Gruß
Torsten

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int Wert;

  /* Wert enthaelt deinen Messwert, zb. 534 */

  int Vorkomma = Wert / 10;   /* 53 */
  int Nachkomma = Wert % 10;  /* 4  */

  /* so und jetzt gibst Du die Zahlen einfach aus
     und schmuggelst noch ein ',' oder '.' dazwischen */

  --------------------

  /* oder du baust dir zuerst einen String zusammen
     und gibst den dann aus */
  char buffer[20];
  sprintf( buffer, "%d,%d", Vorkomma, Nachkomma );

Autor: wirehead (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo karl heinz,
vielen dank für die hilfe, werde deine lösung mal testen.
So wie ich das sehe wird es aber damit gehen, man muss nur erst mal
drauf kommen :-)

Gruß
Torsten

Autor: Elektronik Thomas (et-thomas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau dafür habe ich im Moment Funktionen fertig bekommen / relativ gut
dokumentiert.
Wenn Du mit Assembler was anfangen kannst, meld dich einfach.

Gruß

Autor: SuperUser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder du nimmst diese Routine - die wandelt einen signed int in einen
string - und druckst bei der Ausgabe einen Punkt vor der letzten Zahl
im String...

const uint16_t pot10[4] ={10,100,1000,10000};

void bi2dec(const int16_t sval, char *strg, uint8_t nzero)
/*
  convert signed int16 value to a character string
  stringlength has to be 7 character -32765 + the final 0

  if nzero==0, no leading zeros
  if nzero==1, with leading zeros
*/
{
  uint8_t dec,idx=4,odx=0;
  uint16_t val=sval;

  if (sval<0)
  {
    val=-sval;
    strg[odx++]='-';
  } else if (nzero)
  {
    strg[odx++]=' ';
  }

  do
  {
    idx--;
    for (dec=0; val>=pot10[idx]; val-=pot10[idx])
    {
      dec++;
    }
    nzero+=dec;
    if (nzero) strg[odx++]='0'+dec;
  } while(idx);
  strg[odx++]='0'+val;
  strg[odx]=0;
}

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.