Hallo Forum!
Vermutlich bin ich zu blöd.
Ich bastel schon eine Weile am Interrupt 0 rum.
Mit dem dem Code löst der Interrupt auf PB1 (Pin6,DIP) aus.
Habe alles rauf und runter versucht. Irgendwas mache ich falsch.
So habe ich zwar nicht mehr selbstauslösende Interrupts, aber das darf
doch nicht sein.
PB0 als Eingang oder Ausgang gesetzt, mit Pullup und ohne.
Entweder der Interrupt löst von selbst aus, durch Anfassen der Platine
oder der Interrupt löst auf PB0 und PB1 aus.
So schnell frage ich nicht, aber da hänge ich jetzt.
Das ist meine erste ISR die ich für den Tiny schreibe.
Auf dem ATmega328 funktionieren der INT0 wie erwartet und wie im Buch.
Im Moment dient das alles noch zum testen, aber ich will mir einen
Tester für mein Auto bauen.
1 | #define F_CPU 1000000
|
2 | #define interrupt_Led PB3
|
3 | #define blink_Led PB2
|
4 | #define interrupt_Line PB0
|
5 | #include <avr/io.h>
|
6 | #include <util/delay.h>
|
7 | #include <avr/interrupt.h>
|
8 |
|
9 |
|
10 |
|
11 | ISR(INT0_vect)
|
12 | {
|
13 |
|
14 | PORTB |= (1<<interrupt_Led); _delay_ms(500);
|
15 | PORTB &= ~(1<<interrupt_Led); _delay_ms(300);
|
16 | PORTB |= (1<<interrupt_Led); _delay_ms(500);
|
17 | PORTB &= ~(1<<interrupt_Led);
|
18 |
|
19 |
|
20 |
|
21 | }
|
22 |
|
23 |
|
24 | int main(void)
|
25 | {
|
26 |
|
27 |
|
28 | DDRB |= (1<<interrupt_Led) | (1<<blink_Led);
|
29 | DDRB &= ~ (1<<interrupt_Line);
|
30 | PORTB |= (1<<interrupt_Line) | (1<<PB1) | (1<<PB4); // Pullup high
|
31 | PORTB &= ~ (1<<interrupt_Led);
|
32 |
|
33 | //########################################################################
|
34 |
|
35 | MCUCR &= ~ (1<<ISC00) &~ (1<<ISC01);
|
36 |
|
37 | GIMSK |= (1<<INT0);
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | sei();
|
44 |
|
45 | //########################################################################
|
46 |
|
47 | while (1)
|
48 | {
|
49 |
|
50 |
|
51 | PORTB |= (1<<blink_Led); _delay_ms(100);
|
52 | PORTB &= ~ (1<<blink_Led); _delay_ms(100);
|
53 |
|
54 | }
|
55 |
|
56 | return 0;
|
57 | }
|