So, jetzt kann ich mal den code posten:
Hier noch die adc_init: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; }
und das ist die ADC Funktion:Code:void adc_init(void) { // init im SC Modus ADCSRA = (1<<ADEN) | (1<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS0); ADMUX |= (1<<ADLAR); }
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; }






Zitieren

Lesezeichen