External Interrupt Request mit ATtiny26

Gast #4305132
Lesenswert?

Hallo zusammen,

Ich versuche erfolglos ein external interrupt request mit ATtiny26 zu 
programmieren, deswegen wende ich mich euch, damit ihr mir weiterhelfen 
könnten.

Das Programm soll einfach drei LEDs anschalten sobald eine Taste am Pin 
PB6 gedrückt wird. ( code siehe unten

Nachdem ich das Programm kompilieren kommt die Wahrnung: Warning  1 
'EXT_INT0' appears to be a misspelled signal handler

Könnte jemanden mir da helfen bitte!!
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4

5

6
ISR(EXT_INT0)
7
{    
8
  PORTA = 0b00111000;   // LED on
9
  
10
}
11

12
#include <avr/io.h>
13

14
int main(void)
15
{   DDRA = 0b00111000;
16
  DDRB &= ~(1<<PB6);
17
  
18
  GIMSK |= (1<<INT0);  //external interrupt request enable
19
  MCUSR |= ((1<<ISC01)|(1<<ISC00)); // trigger an interrupt by rising edge on pin INT0
20
  sei();            // Timer/counter global interrupt enable
21
  
22
    while(1)
23
    {  
24
        
25
    }
26
}

Sixafeud
Gast #4305147
Lesenswert?

Danke Thomas für die schnell Antwort,

ISR(INT0_vect) habe ich ausprobiert funktioniert nicht richtig. Die LEDs 
sind sofort angeschaltet ohne, dass ich die Taste gedrückt habe. Das 
möchte ich aber nicht.
Danke im vorraus für weitere Vorschläge

sixafeud
#4305241
Lesenswert?

Hallo,

ist die Fehlermeldung weg? Ja, also ist dieser Fehler behoben.
Deine LEDs gehen an, also scheint das Programm erstmal zu laufen.

Dein Taster ist wie angeschlossen?
Ich sehe kein Einschalten des PullUp für PB6 in Deinem Code.
Hast Du einen externen dran?
Wenn nicht, ist der offene Taster ein offener PIN PB6 wenn der Taster 
nicht gedrückt ist.
Dann kann jedes Störfeld in der Nähe eine steigende Flanke erugen und 
den Interrupt auslösen...

Gruß aus Berlin
Michael
#4305361
Lesenswert?

S. Landolt schrieb:
> Zwischenzeitlich dachte ich, die LEDs seien an GND angeschlossen.

Das sind sie auch. Zumindest sollten sie das, damit sie mit den 3 Einsen 
eingeschaltet werden.

Was mir allerdings gerade noch auffällt:

sixafeud schrieb:
> MCUSR |= ((1<<ISC01)|(1<<ISC00)); // trigger an interrupt by rising
> edge on pin INT0

Das setzt voraus, dass der Taster an Vcc liegt oder beim Loslassen 
schaltet, wenn er, wie es sich gehört, an GND liegt. Und natürlich 
entsprechend über einen Pulldown bzw. Pullup verfügen muss.

Na, warten wir mal ab. Vielleicht kommt ja noch was vom TO.

mfg.
Gast #4305460
Lesenswert?

Ersmal danke schön für die Vorschläge,

Michael U. schrieb:
>>Dein Taster ist wie angeschlossen?
>>Ich sehe kein Einschalten des PullUp für PB6 in Deinem Code.
>>Hast Du einen externen dran?

Der Pulldown Widerstand hatte nicht gebaut .Jetzt habe ich ihn in der 
Sofware implementiert (ein Bild des Tasters habe ich angehängt). Leider 
gehen die LEDs immer sofort an. Wenn ich sie aber mit dem Befehl 
PINB&(1<<PB6) steuere dann funktionniert das (dies ist aber nicht das 
Ziel).

Wo könnte das Problem wirklich liegen. Schon habe ich den ganzen Tag 
dabei verbracht.

Bitte Hilfe!!

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4

5

6
ISR( INT0_vect)
7
{    
8
  PORTA = 0b00111000;   // LED on
9
  
10
}
11

12

13

14
int main(void)
15
{   DDRA = 0b00111000;
16
  DDRB &= ~(1<<PB6);
17
  PORTB &= ~(1<<PB6);
18
  
19
  GIMSK |= (1<<INT0);  //external interrupt request enable
20
  MCUSR |= ((1<<ISC01)|(1<<ISC00)); // trigger an interrupt by rising edge on pin INT0
21
  sei();            // Timer/counter global interrupt enable
22
  
23
    while(1)
24
    {  
25
        
26
    }
27
}
Angehängte Dateien:
Gast #4307177
Lesenswert?

Hi alle zusammen,

Erstmal vielen dank für alle Vorschläge, es hat funktionniert und das 
Problem lag genau da.

 Thomas Eckmann schrieb:
>> Da: MCUSR |= ((1<<ISC01)|(1<<ISC00));

>> Das Register heisst MCUCR.


 nochmal danke   Thomas Eckmann

MFG
Sixafeud

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