Forum: Compiler & IDEs Externer Interrupt


von Mark (Gast)


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

von Mario G. (mario)


Lesenswert?

Mehr Infos: welcher Pin?
Stichwort: Pin Change Interrupt

von Mark (Gast)


Lesenswert?

An den Pins PC0, PC1 und PC2 hängt jewils ein Taster welche gegen Masse 
geschaltet ist. Also soll das Interrupt ausgelöst werden wenn eil LOW am 
Pin anliegt

von Peter D. (peda)


Lesenswert?

Mark schrieb:
> An den Pins PC0, PC1 und PC2 hängt jewils ein Taster welche gegen Masse
> geschaltet ist.

Dann ist ein Timerinterrupt viel besser geeignet:

Beitrag "Universelle Tastenabfrage"


Peter

von Mark (Gast)


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!

von J.-u. G. (juwe)


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.

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
Noch kein Account? Hier anmelden.