Ich habe ein Problem mit dem AD-Wandler in ATmega8 und 32 (gleicher Fehler). Was mich schon wundert: Egal ob AVCC und GND von AD-Wandler angeschlossen sind oder nicht kommt das gleiche raus. Für was gibt es dann überhaupt diese Anschlüsse? Zu dem eigentlichen Problem: Ich bekomme total falsche Werte! Lege ich den Eingang auf AREF (5V) habe ich Werte um 600. Lege ich den Eingang auf Masse kommen Werte von ca. 300. Hier der C-Code:
1 | ADMUX |= (1<<MUX0); |
2 | ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); |
3 | ADCSRA |= (1<<ADSC); |
4 | |
5 | while ( ADCSRA & (1<<ADSC) ) { |
6 | ;
|
7 | }
|
8 | |
9 | lcd_init(); |
10 | |
11 | float spannung = 0; |
12 | |
13 | while(1) |
14 | {
|
15 | |
16 | ADCSRA |= (1<<ADSC); |
17 | while ( ADCSRA & (1<<ADSC) ) { |
18 | ;
|
19 | }
|
20 | |
21 | spannung = ADCL; |
22 | spannung += (ADCH<<8); |
23 | |
24 | |
25 | spannung = (int) (spannung); |
26 | |
27 | |
28 | lcd_clear(); |
29 | lcd_zahl(spannung); |
30 | |
31 | //1 Sekunde warten
|
32 | _delay_ms(100); |
33 | _delay_ms(100); |
34 | _delay_ms(100); |
35 | _delay_ms(100); |
36 | _delay_ms(100); |
37 | _delay_ms(100); |
38 | _delay_ms(100); |
39 | _delay_ms(100); |
40 | _delay_ms(100); |
41 | _delay_ms(100); |
42 | |
43 | }
|