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