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
Wie wärs wenn du die Funktion itoa verwendest und nachträglich das Komma im String einschiebst?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.