Externer Interrupt

Gast #2353961
Lesenswert?

Hallo

ich arbeite mit einem Atmega164 P und benötige eine ISR die die 
ausgelöst wird, wenn sich der an einem bestimmten Eingangs-Pin 
anliegende Pegel ändert, dieser Pin aber nicht INT0 oder INT1 ist.
Kann mir da jemand bei der Initialisierung weiterhelfen.(In welchen 
Regiestern ich welche Bits setzen muss) Danke
Gast #2354079
Lesenswert?

Hatte  es gerade mal mit einem Pin Change Interrupt versucht bin mir 
aber nicht ganz sicher ob ich etwas bei der Initilaisierung vergessen 
habe.

Hier mein Code

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(PCINT0_vect){
  DDRC  |= (1<<3);
  PORTC |= (1<<3);
}



int main(void)
{
  DDRC   &= ~(1<<0);
  PCMSK3 |=  (1<<PCINT0);
  PCICR  |=  (1<<PCIE0);  // Interrupt wird freigegeben

  sei();
    while(1)
   {}
}

Was habe ich vergessen oder falsch gemacht?
Vielen Dank schon mal im Voraus!
#2354568
Lesenswert?

Mark schrieb:
> Was habe ich vergessen oder falsch gemacht?

1.
PCINT0_vect ist der Interruptvektor für die Pins PCINT0 bis PCINT7 
(entspricht PA0 bis PA7). Du hast Deine Taster aber an den Pins PCINT16 
bis PCINT18 (entspricht PC0 bis PC2). Der zugehörige Interruptvektor ist 
PCINT2_vect.

2.
Das Register PCMSK3 ist für die Maskierung der Pins PCINT24 bis PCINT31 
(entspricht PD0 bis PD7) zuständig. Für die von Dir verwendeten Pins ist 
das Register PCMSK2 vorgesehen. In diesem Registster solltest Du die 
richtigen Bits setzten.

Bezüglich der Sinnhaftigkeit Deiner Lösung verweise ich auf den Post von 
Peter Dannegger.

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