ADC-Wert am HD44780U-LCD anzeigen

Gast #2379314
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
Gast #2379399
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

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