Hallo an alle
Ich hab nun die A/D Routine fertig geschrieben .
Jedoch überschreibe ich jetzt immer die Zahl vor der Aktualisierung mit 4 leerzeicnen (lcd_puts" "). Denn Wenn ich eine Zahl > 1000 anzeige, bleibt die letzte Stelle hängen wenn der Wert unter 1000 sinkt. Das gleiche bei 100. Deshalb die Überschreibung mit den Leerzeichen.Code:#include <avr/io.h> #include <stdlib.h> #include "wintek2704.h" void adc_init(void); int get_adc (void); void lcd_put_d(uint16_t dec); int main (void) { DDRC &=~ _BV(PC0); PINC &=~ _BV(PC0); uint8_t balken3, balken_leer, i, j; uint16_t ergebnis_display; uint16_t ergebnis_neu; adc_init(); lcd_init(LCD_DISP_ON); lcd_puts(" ADC -- Test\n"); ergebnis_neu = 0; while(1) { ergebnis_display = get_adc(); if (ergebnis_neu > ergebnis_display || ergebnis_neu < ergebnis_display) { lcd_gotoxy(0,1); lcd_puts(" "); ergebnis_neu = ergebnis_display; } lcd_gotoxy(0,1); lcd_put_d(ergebnis_neu); balken3 = ergebnis_neu / 37; balken_leer = 27 - balken3; lcd_gotoxy(0,2); for(i = 0; i < balken3; i++) lcd_puts("="); for(j = 27; j > balken_leer; j--) lcd_puts(" "); } return(0); } void lcd_put_d(uint16_t dec) { char buffer[6]; itoa(dec, buffer, 10); lcd_puts(buffer); } void adc_init (void) { ADCSR = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2); //Prescaler = 64 TF = 125 kHz } int get_adc (void) { uint8_t i; uint16_t ergebnis_adc; ADMUX = 0; // Vreff = Vcc ADCSRA |= (1 << ADSC); while (!(ADCSRA & (1 << ADIF))); ergebnis_adc = 0; for(i = 0; i < 5; i++) { ADCSRA |= (1 << ADSC); while(!(ADCSRA & (1 << ADIF))); ergebnis_adc += ADC; } ergebnis_adc = ergebnis_adc / 5; return ergebnis_adc; }
Gibt es in C ein Möglichkeit die Zahlen formatiert auszugeben zB 0125, 0058, 1024
In Bascom gibt es ja die Funktion FUSING. Gibt es sowas auch in C
Danke im Voraus
Gruß Robert







Zitieren

Lesezeichen