Guten Abend alle zusammen,
ich habe folgendes Problem mit meinem ADC:
Das ADC-Werte Register bleibt irgendwie immer beim ersten gelesenen Wert
"hängen", es ändert sich also nicht mehr.
1 | #include <avr/io.h>
|
2 | #include <avr/delay.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | uint16_t wert;
|
6 | ISR(ADC_vect)
|
7 | {
|
8 | wert = ADCL;
|
9 | wert += (ADCH<<8);
|
10 | if(wert < (uint16_t)500) PORTC |= (1<<PC5);
|
11 | else if(wert > (uint16_t)524) PORTC &= ~(1<<PC5);
|
12 | }
|
13 |
|
14 | void ADC_Init(void) {
|
15 |
|
16 |
|
17 | // interne Referenzspannung als Refernz für den ADC wählen:
|
18 | ADMUX = (1<<REFS0);
|
19 |
|
20 | ADCSRA = (1<<ADPS1) | (1<<ADPS2)| (1<<ADPS0); // Frequenzvorteiler
|
21 | ADCSRA |= (1<<ADEN) | (1<<ADFR) | (1<<ADIE);
|
22 | ADCSRA |= (1<<ADSC);
|
23 | _delay_ms(100);
|
24 | wert = ADCL;
|
25 | wert += (ADCH<<8);
|
26 | ADCSRA |= (1<<ADSC);
|
27 |
|
28 | // ADC aktivieren
|
29 |
|
30 | }
|
31 |
|
32 |
|
33 |
|
34 | int main()
|
35 | {
|
36 | DDRC |= (1<<PC5);
|
37 | PORTC &= ~(1<<PC5);
|
38 | sei();
|
39 | ADC_Init();
|
40 |
|
41 | }
|
Der erste eingelesene Wert (siehe Interrupt) scheint sich nicht mehr zu
ändern und, denn der Port bleibt etwa HIGH oder LOW, egal, was für eine
Spannung ich am ADC-Eingang anlege.
Ich hab schon wie doof das Datenblatt studiert und überlegt, ob ich
irgendwas falsch gemacht habe, aber ich wüsste nicht was.
Hat jemand ne Idee?
LG