Hallo zusammen,
ich möchte mit meinem ADC zwei verschiedene Eingangssignale erfassen.
Hierzu wäre es sinnvoll, die Referenzspannung des ADC's umzuschalten
(von 5V auf 2,56V).
Leider funktioniert es nicht.
Könnt Ihr mir sagen, wo der Knoten in meinem Hirn ist?
- Prozessor ist ein Mega 8
- AVR Studio 6
- Benutzt werden ADC 4 (5V) und ADC 5 (2,56V)
- Wenn der 5V - Kanal auskommentiert wird, funktioniert der 2,56V Kanal
- habe heute schon einiges probiert, daher ist der code etwas
"verwuchert"
Hier die ADC - Funktion:
1 | #include <avr/io.h>
|
2 |
|
3 | // Eingänge für ADC initialisieren
|
4 |
|
5 | void adc_init ()
|
6 | {
|
7 | DDRC &= ~((1<<PC4) | (1<<PC5));
|
8 | PORTC |= (1<<PC4) | (1<<PC5);
|
9 | }
|
10 |
|
11 |
|
12 | // ################## ADC Routine #############################
|
13 |
|
14 | int adc (int ch)
|
15 | {
|
16 | int i=0;
|
17 | int res =0;
|
18 | int z=0;
|
19 | int filter = 4; // digitaler Filter
|
20 |
|
21 | // Activate ADC with Prescaler 16 --> 1Mhz/16 = 62.5kHz => Bremst Ablauf aus!!!
|
22 | ADCSRA = _BV(ADEN) | _BV(ADPS2);
|
23 |
|
24 | // Register auf 0 setzen ???
|
25 | ADMUX = 0x00;
|
26 |
|
27 | if (ch==4)
|
28 | {
|
29 | ADMUX = ch;
|
30 | ADMUX |= (1<<REFS0); // interne Referenzspannung
|
31 | ADMUX &= ~(1<<REFS1); // Referenzspannung 5V
|
32 | }
|
33 |
|
34 | if (ch==5)
|
35 | {
|
36 | ADMUX = ch;
|
37 | ADMUX |= (1<<REFS0); // interne Referenzspannung
|
38 | ADMUX |= (1<<REFS1); // Referenzspannung 2,56V
|
39 | }
|
40 |
|
41 | // ADC einmal ausführen und warmlaufen lassen
|
42 | //Start conversion
|
43 | ADCSRA |= _BV(ADSC);
|
44 | // wait until converstion completed
|
45 | while (ADCSRA & _BV(ADSC) ) {}
|
46 |
|
47 | res = 0; // Summierung auf 0 setzten
|
48 |
|
49 | for (z=0;z<filter;z++)
|
50 | {
|
51 |
|
52 | //Start conversion
|
53 | ADCSRA |= _BV(ADSC);
|
54 |
|
55 | // wait until converstion completed
|
56 | while (ADCSRA & _BV(ADSC) ) {}
|
57 |
|
58 | // get converted value
|
59 | i = ADCW;
|
60 | res = res + i;
|
61 | }
|
62 | i = (res /filter);
|
63 | //i=500; // Angabe zum Betrieb ohne Poti
|
64 | ADCSRA |= _BV(ADEN); // ADC ausschalten!
|
65 | return i;
|
66 | }
|
Danke!!!!
Andreas