Hallo,
Ich kämpfe hier seit ein paar Tagen an einem ADC Problem mit dem
ATtiny461A und weis nicht mehr weiter. Der ADC beginnt zu konvertieren
sobald ich das ADEN Bit setze, obwohl ich keinen Free-Running Mode und
keinen Trigger aktiviert habe. Ich habe mir das Assembler-Listing
angesehen und habe dort erst mal nix gesehen, was der GCC falsch machen
könnte. Entweder mein Tiny ist hinüber oder das Datenblatt stimmt nicht,
oder ich habe etwas im Datenblatt übersehen. Der folgende Code reicht,
um das Problem bei mir auszulösen, am PB0 gibt es einen 4,5 kHz
Rechteck. Wenn ich das sleep-enable auskommentiere dann passiert das was
ich erwarten würde: der PB0 ändert sich nicht.
1 | #include <avr/io.h>
|
2 | #include <avr/sleep.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 |
|
6 | ISR(ADC_vect)
|
7 | {
|
8 | PORTB ^= 0x01;
|
9 | }
|
10 |
|
11 | int main()
|
12 | {
|
13 | CLKPR = _BV(CLKPCE);
|
14 | CLKPR = 0;
|
15 |
|
16 | DDRB = 0x01;
|
17 |
|
18 | ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADIE);
|
19 | ADCSRB = 0;
|
20 |
|
21 | set_sleep_mode(SLEEP_MODE_IDLE);
|
22 |
|
23 | sleep_enable();
|
24 | sei();
|
25 |
|
26 | while(1)
|
27 | {
|
28 | sleep_cpu();
|
29 | }
|
30 | }
|
Vielleicht weis ja jemand Rat.
Gruß,
Andreas