Forum: Mikrocontroller und Digitale Elektronik ADC-Wert am HD44780U-LCD anzeigen


von Hans (Gast)


Lesenswert?

Hallöchen,

folgendes Problem. Ich stelle eine am ADC-Eingang gemessene Spannung 
(0-5V) auf einem HD44780-LC Display dar. Dies mache ich folgendermaßen:


int main( void )
{
  char buf[5];
  uint32_t adc;

  ADC_Init();

  while( 1 )
  {
    lcd_init(LCD_DISP_ON);
    adc = ADC_Read(0);
    adc *= 500;
    adc /= 1022;
    sprintf(buf,"%ld,%0ld",adc/100,adc%100);
    lcd_puts(buf);
  }
}

Alles wunderbar, bisauf, dass bei einem tatsächlich gemessenen Wert, der 
größer x,00 und kleiner x,10 ist, mir eine "0" fehlt. Statt z.B. 3,09V 
kriege ich 3,9V angezeigt.
Klar, irgendwie logisch. Die Funktion gibt's ja auch nicht her. Aber mir 
fehlt der Ansatz zur Umsetzung, um die 0 für diesen kleinen Messbereich 
einzuschieben.
Mir eine Funktion zu bauen, die mir aus dem ADC-Wert einen in diesem 
Fall korrekten String mit der Spannung zurückgibt, ist hoffnungslos 
daneben gegangen. Jeder Versuch führte zur Ausgabe von tollen 
ASCII-Zeichen, jenseits des Alphabets.

Ich weiß, dieses Thema ist hier 1000mal durchgekaut worden und im Wiki 
gibt's einen tollen Beitrag zur Festkommaarithmetik, aber dennoch hab' 
ich mir bisher dazu keine Lösung vorstellen können.

Bin dankbar für einen kleinen Tipp.

Gruß,
Hans
von Thomas G. (Gast)


Lesenswert?

Wie wärs wenn du die Funktion itoa verwendest und nachträglich das Komma 
im String einschiebst?
von holger (Gast)


Lesenswert?

sprintf(buf,"%ld,%02ld",adc/100,adc%100);
von Hans (Gast)


Lesenswert?

holger schrieb:
> sprintf(buf,"%ld,%02ld",adc/100,adc%100);

Mensch, das war's. Besten Dank! Wofür steht denn die zusätzliche 2? Hast 
Du für mich einen Verweis auf eine richtig gute Dokumentation, die nicht 
so mühsam zu lesen ist, wie die der avr-lib auf nongnu.org?

Jedenfalls war's das! Vielen Dank nochmal!

Gruß,
Hans
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.