Hallo, ich hoffe ihr könnt mir helfen. Es geht um das Interrupt INT0. Ich habe die Einstellung "Any logic change on INT0 generates an interrupt request" gewählt. Das heißt doch, dass wenn ich den Taster drücke ein Interrupt ausgelöst wird und genauso wenn ich ihn wieder loslasse, oder?? Mit freundlichen Grüßen Alex
wenn du nen taster hast wirst du wahrscheinlich durch das prellen so einige interrupts erzeugen.. aber prinzipiell hast du recht mfg
nö, wenn du interrupts abschaltest, kann in dem pin passieren was will. je nach architektur solltes du dann aber noch evtl aktive pending-flags löschen..
mh dann verstehe ich das verhalten nicht. Also weshalb ich frage...ich habe INT0 aktiviert und "any logic...." eingestellt. Jedoch wird das interrupt nur ausgeführt, wenn ich die Taste loslasse....Außerdem wird das Interrupt auch ausgeführt, wenn ich Taster2(INT1) sowie Taster3(INT2) drücke(diesmal in umgekehrter logik), obwohl diese überhaupt nicht als Interrupt enabled sind.
Sicher das der Controller die Interruptroutine ausführt und nicht doch einen Reset? Zeig doch mal Code und einen Schaltplan. Sonst wird hier nur weiter geraten. Carsten
Hi >Also weshalb ich frage...ich habe INT0 aktiviert und "any logic...." >eingestellt. Sicher? Deine Aussagen kann niemand überprüfen. MfG Spess
Also es handelt sich um das Pollin-board. Obwohl ich die jumper für die 3 taster herausgenommen habe, reagiert der controller troztdem auf die taster...deswegen gehe ich jetzt von einem lötfehler aus....also suche ich erstmal nach dem hardware-fehler.
hier trotzdem der code
1 | /*LEDS****************************************/
|
2 | #define led1_init() portd_pin6_output()
|
3 | #define led2_init() portd_pin7_output()
|
4 | |
5 | #define led1_on() PORTD |= 0x20
|
6 | #define led2_on() PORTD |= 0x40
|
7 | |
8 | #define led1_off() PORTD &= ~0x20
|
9 | #define led2_off() PORTD &= ~0x40
|
10 | |
11 | |
12 | /*BUTTONS*************************************/
|
13 | #define BUTTON1 PIND & (1 << PIND2)
|
14 | #define BUTTON2 PIND & (1 << PIND3)
|
15 | |
16 | #define button1_enable() DDRD &= ~(0x04);
|
17 | #define button2_enable() DDRD &= ~(0x08)
|
18 | |
19 | |
20 | #define button1_int_enable() MCUCR |= ((1<<ISC00)); GICR |= (1<<INT0) //Taster 1
|
21 | #define button2_int_enable() MCUCR |= (1<<ISC10); GICR |= (1<<INT1) //Taster 2
|
22 | #define button1_int_disable() GICR &= ~(1<< INT0)
|
23 | #define button2_int_disable() GICR &= ~(1<< INT1)
|
24 | |
25 | |
26 | |
27 | |
28 | void hw_init() |
29 | {
|
30 | button1_enable(); |
31 | button2_enable(); |
32 | button1_int_enable(); |
33 | //button2_int_enable();
|
34 | |
35 | pwm_init(); |
36 | |
37 | timer1_init(); |
38 | timer1_int_enable(); |
39 | |
40 | led1_init(); |
41 | led2_init(); |
42 | |
43 | |
44 | global_int_enable(); |
45 | |
46 | }
|
47 | |
48 | /*Tür auf/Auto aufgeschlossen*******************************************************/
|
49 | ISR(INT0_vect) //Taste1 |
50 | {
|
51 | //button1_int_disable(); //entprellen
|
52 | /*
|
53 | if(frb_status==INACTIVE)
|
54 | {
|
55 | pwm_start();
|
56 | timer1_start();
|
57 | frb_status= ACTIVE;
|
58 | }
|
59 |
|
60 | if(BUTTON1 && (frb_status ==ACTIVE))
|
61 | {
|
62 | frb_cmd = UP;
|
63 | }
|
64 | else if(!BUTTON1 && (frb_status == ACTIVE))
|
65 | {
|
66 | frb_cmd = DOWN;
|
67 | }
|
68 | */
|
69 | |
70 | if((PORTD & 0x20) == 0x20) |
71 | {
|
72 | led1_off(); |
73 | }
|
74 | else
|
75 | {
|
76 | led1_on(); |
77 | }
|
78 | pwm_start(); |
79 | timer1_start(); |
80 | |
81 | |
82 | //button1_int_enable();
|
83 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.