Hallo, ich hatte bisher immer einen single mode beim ADC Atmega8 verwendet. Nun wollte ich auf differential mit Atmega16 umstellen. Dabei habe ich auch den Programmcode geändert. Da ich es nicht ganz hinbekommen habe wollte ich nun zurück zu single mode wechseln. Nun klappt gar nichts mehr -.- und ich sehe den Fehler nicht. Kann eventuell einer von euch über den Code schauen? Ich habe momentan GND an ADC0 anliegen. Dennoch wird mir immer der Wert 276 angezeigt.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | void adc_init( void ) |
5 | {
|
6 | ADMUX = (1<<REFS1) | (1<<REFS0); |
7 | _delay_us( 10 ); |
8 | // ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler, Dummyreadout
|
9 | ADCSRA = (1<<ADPS2); // Frequenzvorteiler, Dummyreadout |
10 | ADCSRA |= (1<<ADEN); // ADC aktivieren |
11 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
12 | while (ADCSRA & (1<<ADSC)) { // auf Abschluss der Konvertierung warten |
13 | }
|
14 | (void) ADCW; |
15 | }
|
16 | |
17 | |
18 | uint16_t ADC_Read_single() |
19 | {
|
20 | |
21 | //ADMUX = (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
|
22 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
23 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
24 | }
|
25 | return ADCW; // ADC auslesen und zurückgeben |
26 | |
27 | }
|
=======================
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #include <stdlib.h> |
4 | #include "lcd-routines.h" |
5 | #include "myADC.h" |
6 | |
7 | uint16_t adcval; |
8 | |
9 | int main(void) |
10 | {
|
11 | adc_init(); |
12 | lcd_init(); |
13 | |
14 | while(1) |
15 | {
|
16 | adcval = ADC_Read_single; |
17 | |
18 | lcd_setcursor(0,1); |
19 | |
20 | char Buffer[20]; |
21 | itoa( adcval, Buffer, 10 ); |
22 | lcd_string( Buffer ); |
23 | |
24 | _delay_us( 100 ); |
25 | }
|
26 | }
|