Pin Change Interrupt verursacht, dass der Atmega sich resetet

OP #5227404
Lesenswert?

Hallo,

ich habe eine Schaltung mit einer 7-Segment-Anzeige und 2 Taster. 
Verwendeter µC Atmega328P-PU

Ich wollte, dass wenn man den rechten Taster drückt, dass der 
Dezimalpunkt bei jedem Schritt des Lauflichts blinkt. Das geht schonmal

Der linke Taster soll den Zustand des Dezimalpunktes wechseln bei jedem 
kompletten Umlauf des Lauflichts, aber so dass der Dezimalpunkt sofort 
leuchtet beim Drücken und bei genau dieser Stelle immer wieder wechselt

Dazu wollte ich Pin Change Interrupts verwenden. Allerdings klappt das 
nicht, da der Atmega sich resetet, wenn der Interrupt auftritt.

Was kann ich tun? Hier ist der Testcode für den PCINT
1
#define F_CPU 8000000UL
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5
#include <avr/interrupt.h>
6

7
ISR(PCINT1_vect) {
8
  PORTB = 0b00000100;
9
}
10

11
int main() {
12
  DDRD = 0b00111111;
13
  DDRB = 0b00000100;
14

15
  PCMSK0 = (1 << PCINT1);
16
  PCICR = (1 << PCIE0);
17
  sei();
18

19
  uint8_t input;
20
  while(1) {
21
    for(int i = 0; i < 6; ++i) {
22
      _delay_ms(200);
23
      
24
      PORTD = 0b00100000 >> i;
25
      
26
      input = PINB;
27
      input &= 0b00000001;  
28
      if(input != 0) {
29
        PORTB ^= 0b00000100;
30
      }
31
    }
32
  }
33
}

Das ist erst noch Test, deshalb wird in der ISR nur ein Pin gesetzt

Danke für jede Hilfe

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