Forum: Mikrocontroller und Digitale Elektronik Temperaturwert auf LCD


von wirehead (Gast)


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

von Karl heinz B. (heinzi)


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 );

von wirehead (Gast)


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

von Elektronik T. (et-thomas)


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ß

von SuperUser (Gast)


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;
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.