Hi,
ich werde noch verrückt.
Ich möchte an meinem ATMEGA8 zwei externe Interrupts verwenden. An einem
hängt ein Taster (INT0), am anderen findet ein Levelchange von 0->1 bzw.
von 1->0 statt wenn was passiert.
INT0 läuft wunderbar. µC braucht etwa 2mA, geht dann in Sleep und
braucht nur noch 3µA.
Mit INT1 funktoiniert das nicht. Egal wie, was oder womit ich es
versuche, es geht nicht. Der Controller geht nicht in den Sleep.
INT1 Pin hab ich schon mit Oszi überwacht, alles ruhig und stets auf
GND. Hab den Pin sogar schon mal mit GND kurzgeschlossen.
Bis darauf dass ich den INT1 nicht durch den int. Pullup sondern mit
einem externen versorge ist alles identisch.
Bitte helft mir...
1 | ISR(INT0_vect) {
|
2 |
|
3 |
|
4 | }
|
5 |
|
6 | ISR(INT1_vect) {
|
7 |
|
8 |
|
9 | }
|
10 | int main(void)
|
11 | {
|
12 | DDRD &= ~((1<<PWR) | (1<<VMODE)); // PWR und VMODE als Eingang festlegen
|
13 |
|
14 | PORTD |= (1<<PWR); // Pull Up für Taster aktivieren.
|
15 |
|
16 | // PWR und VMODE sind INT0 und INT1
|
17 |
|
18 | MCUCR &= ~((1<<ISC10) | (1<<ISC00));
|
19 | sei();
|
20 |
|
21 | while(1)
|
22 | {
|
23 |
|
24 | GICR |= ((1<<INT0) | (1<<INT1));
|
25 | set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
26 | sleep_mode();
|
27 | GICR &= ~((1<<INT0) | (1<<INT1));
|
28 | if (debounce(&PIND, PD2))
|
29 | {
|
30 | system_enable();
|
31 | }
|
32 | } return 0;
|
33 | }
|
Reduziere ich es nur auf INT0 geht es.
INT1 funktioniert nicht.
Danke :)