ATtiny84A ADC funktioniert nicht

OP #3287694
Lesenswert?

Hallo!
Ich verwenden den ATtiny84A und will den ADC benutzen:
http://www.atmel.com/Images/doc8183.pdf

Mein CODE:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <util/delay.h>
4

5
void init();
6
volatile uint16_t t1var = 0;
7

8

9
int main(void)
10
{
11
    init();
12
    while(1)
13
    {
14

15
    }
16
  return 0;
17
}
18
void init()
19
{
20
  PRR &= ~(1 << PRADC);  //disable Power Reduction for ADC
21
  ADMUX = (1 << REFS0) | (1 << MUX1);  //externe Referenz und ADC Channel 2 (PA2) aktivieren
22
  _delay_ms(1);
23
  ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS1) | (1 << ADPS0); // ADC aktivieren, AD INterrupt aktivieren und prescaler 8 -> 125 kHz
24
  _delay_ms(1);
25
  ADCSRA = (1 << ADSC);          
26

27
  sei();
28
}
29

30
ISR(ADC_vect)
31
{
32
         DDRA |= (1 << PA7);
33
  PORTA |= (1 << PA7);
34
}

Ich will nach fertiger Wandlung in der ISR ein Port auf High setzen, um 
zu sehen, dass der ADC mit interrupt funktioniert. An dem port hängt 
eine LED zur Anzeige, wenn ich im main die beiden zeilen der ISR 
aufrufe, leuchtet sie. Anscheinend wird jedoch die ISR nie erreicht, 
WARUM???

Vielen Dank!
Gast #3287727
Lesenswert?

Die Atmels sind nicht sonderlich vergesslich. Aus diesem Grunde ist es 
auch unnötig bei jeder Unterbrechung den Befehl:
DDRA |= (1 << PA7);
auszuführen. Einmal während der Initialisierung reicht wohl aus.

Der Befehl:
PORTA |= (1 << PA7);
setzt Dir jedes Mal den Pin A7, wobei es keinen Unterschied gibt, ob 
dies zum hundertsten oder hundertersten Mal geschieht. Auch beim 
hundertzweiten Mal tut sich von außen gesehen nicht neues ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren