So, jetzt kann ich mal den code posten:
Code:
int main(void)
{
int adc_prim = 0; // ADC Wert aus Kanal 1
int adc_sek = 0; // ADC Wert aus Kanal 2
char pPrim[8]; // Primärwert als char für LCD
char pSek[8]; // Sekundärwert - " -
io_init(); // I/O init
adc_init(); // ADC init
lcd_init(); // LCD init
for(;;)
{
adc_prim = adc_data(1); // holen des Primäwertes
itoa(adc_prim, pPrim, 2); // Umrechnung des "rohen" Primärwertes in darsetllbare Zahl.
lcd_home(); // Schreibposition 1. Zeile, 1. Spalte
lcd_text("km/h ", pPrim); // und Wert (bisher noch Text zum testen) auf Display ausgeben !
adc_sek = adc_data(2); // holen des Sekundärwertes
itoa(adc_sek, pSek, 2);
lcd_goto(2,1); // Schreibposition 2.Zeile, 1.Spalte
lcd_text("OEL ", pSek); // Anzeige des sekundärwertes
}
return 0;
}
Hier noch die adc_init:
Code:
void adc_init(void)
{
// init im SC Modus
ADCSRA = (1<<ADEN) | (1<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS0);
ADMUX |= (1<<ADLAR);
}
und das ist die ADC Funktion:
Code:
int adc_data(int channel)
{
int i;
int result = 0;
switch(channel)
{
case 1: // Messwert 1
ADMUX = 0x0; // ADMUX auf KANAL 1 setzen
// Dummy readout:
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1<<ADSC) );
// Dummy readout ende
for( i = 0; i < 4; i++)/* eigentliche Messung ( arithmet. Mittelwert aus i Messungen ) */
{
ADCSRA |= (1<<ADSC);// ADC starten:
while( ADCSRA & (1<<ADSC) )
result += ADCH;
}
result /= 4;
break;
case 2: // Messwert 2
ADMUX |= (1<<MUX0); //ADMUX auf KANAL 2 setzen !
// Dummy readout:
ADCSRA |= (1<<ADSC);
while( ADCSRA & (1<<ADSC) );
// Dummy readout ende
for( i = 0; i < 4; i++)/* eigentliche Messung ( arithmet. Mittelwert aus i Messungen ) */
{
ADCSRA |= (1<<ADSC);// ADC starten:
while( ADCSRA & (1<<ADSC) )
result += ADCH;
}
result /= 4;
ADMUX = 0x0; // ADMUX zurücksetzen
break;
default:
break;
}
return result;
}
Lesezeichen