Guten Morgen zusammen,
Ich habe hier einen ATmega 325 mit dem ich gerne den AD-Wandler
ausprobieren würde.
Dazu habe ich erstmal ins Datenblatt geschaut um den ADC zu
initialisieren. Das hat soweit
auch alles funktioniert. Mit dem setzen des REFS1 und REFS0 wurde die
Interne Referenz
ausgewählt. An AREF hängt ein 50nF Kondensator gegen Masse und AVCC geht
über ne 22µH
Spule an VCC (+5V). An AREF messe ich 1,085V
Ich habe nur irgendwie ein Problem mit der Genauigkeit. Ich habe eine
Auflösung von 10bit
das heißt ja das 1bit ca. 1mV entspricht.
Nun habe ich eine 5V Referenzspannung genommen und dort ein R(71,5k) +
Rpoti(20K) in Reihe angeschlossen
und den Schleifer des Potis auf AD-Eingang 0 gelegt.
Nun kann ich über das Poti die Werte 0 bis 1,1V bequem an den Eingang
des ADC legen.
Auf einem LCD gebe ich nun den zusammen gefassten Wert von ADCL und ADCH
aus.
1 | while(1)
|
2 | {
|
3 | result= 0x00;
|
4 | ADCSRA |= ((1<<ADSC));
|
5 | _delay_ms(10);
|
6 | result = ((result+ADCL) +(ADCH<<8));
|
7 |
|
8 |
|
9 | set_cursor(0,4);
|
10 | sprintf( Out, "result: %d ", result );
|
11 | lcd_string( Out );
|
12 |
|
13 | set_cursor(0,2);
|
14 | sprintf( Out, "ADC: %d ", ADC );
|
15 | lcd_string( Out );
|
16 |
|
17 |
|
18 | }
|
Dort sehe ich auch Werte von 0 (Poti im Linksanschlag) bis 1023 (Poti im
Rechtsanschlag) und einige
Zwischenwerte. Das Problem besteht darin das die Zwischenschritte
irgendwie immer Feste schritte sind
Also so im 6 bis 20 Schritte auf einmal. Bzw anders erklärt ich drehe
ganz langsam am Poti und im Display
Springt der Wert von 0 auf 6 dann auf 14 dann auf 24 usw.
Ich sehe NIE zum Beispiel ne 18 oder 20. Warum sind da so extreme
Sprünge drin wenn ich doch eingentlich ne
Auflösung von 1mV/bit habe ?
Könnte mir da bitte jemand helfen.
Gruß
Seb