Danke!
ich habe es entsprechend geändert aber ich bekomme : ? V auf dem LCD angezeigt!
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include "lcd.h"
void LCD(int result)
{
char buffer[5];
double d;
//int t;
//int x;
//d = result * (2.56/1024)*10000;
d = result* (2.56/1024);
//t = d / 10000;
//x = d - (t * 10000);
sprintf(buffer,"%4.2lf V",d);
// itoa(result,buffer,10);
lcd_gotoxy(7,1);
lcd_puts(buffer);
}
uint16_t readADC(uint8_t channel)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);// Den ADC aktivieren und Teilungsfaktor auf 64 stellen
ADMUX = channel;// Kanal des Multiplexers waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0);// Interne Referenzspannung verwenden (also 2,56 V)
ADCSRA |= (1<<ADSC); // Den ADC initialisieren..
while(ADCSRA & (1<<ADSC));// und einen sog. Dummyreadout machen
for(i=0; i<3; i++) // Jetzt 3x die analoge Spannung and Kanal channel auslesen
{
ADCSRA |= (1<<ADSC);// Eine Wandlung
while(ADCSRA & (1<<ADSC));// Auf Ergebnis warten...
result += ADCW;
}
ADCSRA &= ~(1<<ADEN);// ADC wieder deaktivieren
result /= 3;// und dann Durchschnittswert ausrechnen.
return result;
}
int main(void)
{
int result;
lcd_init(LCD_DISP_ON);
lcd_puts("Die Spannung =");
while(1)
{
result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
LCD(result); // also ADC0. In result steht das Ergebnis.
}
return 0;
}
was mach ich denn falsch?
MfG
Lesezeichen