Forum: Mikrocontroller und Digitale Elektronik PinChange Interrupt wird nicht ausgeführt


von Johannes (Gast)


Lesenswert?

Hallo, ich habe ein Problem mit einem Interrupt an einem ATmega
1
EICRA |= (1 << ISC00) | (1 << ISC10) | (1 << ISC11);
2
EIMSK |= (1 << INT0) | (1 << INT1);
3
4
PCICR |= (1 << PCIE2);
5
PCIFR |= (1 << PCIF2);
6
7
...
8
...
9
10
ISR(INT0_vect)
11
{
12
    PORTB ^= ( 1 << PORTB5 );
13
}
14
15
ISR(INT1_vect)
16
{
17
    PORTB ^= ( 1 << PORTB5 );
18
}
19
20
21
ISR(PCINT20_vect)
22
{
23
    PORTB ^= ( 1 << PORTB5 );
24
}

bei INT0 und INT1 wird die LED ein-/ausgeschalten. aber beim letzten 
funktioniert es nicht. Dazu habe ich den button mit PD4 (PCINT20) vom 
controller verbunden.

Habe ich etwas vergessen?

Johannes

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Johannes schrieb:
> Habe ich etwas vergessen?

Jo. Bitte sag doch mal, welcher ATMega es nun genau ist. Gerade die 
Pinchange Interrupts sind sehr unterschiedlich je nach Modell. Ein Mega8 
z.B. hat gar keine.

von MWS (Gast)


Lesenswert?

Johannes schrieb:
> Habe ich etwas vergessen?

PCMSK

> ISR(PCINT20_vect)

Es gibt nur jeweils einen Vektor für eine Gruppe von 8 PCINT-Pins.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Johannes schrieb:
> Habe ich etwas vergessen?

 Ja.
1
  PCMSK2 |= (1 << PCINT20);

von Johannes (Gast)


Lesenswert?

Matthias S. schrieb:
> Jo. Bitte sag doch mal, welcher ATMega es nun genau ist

Es ist ein Atmega328P


MWS schrieb:
> Es gibt nur jeweils einen Vektor für eine Gruppe von 8 PCINT-Pins.
Ahso, das hatte ich falsch gedacht.
Ist es dann überhaupt möglich, INT0 (PD2), INT1 (PD3) und PCINT20 (PD4) 
als Interrupt zu nehmen? Oder werden INT0 und INT1 dann irgendwie vom 
PinChange Interrupt überschrieben?

Habe jetzt die ISR in
ISR(PCINT2_vect)
{
    PORTB ^= ( 1 << PORTB5 );
}
geändert. Allerdings passiert trotzdem nichts. Auch in der Simulation 
wird nicht hineingesprungen.

von Johannes (Gast)


Lesenswert?

Habe auch
1
 PCMSK2 |= (1 << PCINT20);
hinzugefügt. Aber auch das half nichts

von MWS (Gast)


Lesenswert?

Johannes schrieb:
> Aber auch das half nichts

Wie wär's damit vollständigen Code als Anhang zu posten?

von Carl D. (jcw2)


Lesenswert?

Johannes schrieb:
> Habe jetzt die ISR in
> ISR(PCINT2_vect)
> {
>     PORTB ^= ( 1 << PORTB5 );
> }
> geändert. Allerdings passiert trotzdem nichts. Auch in der Simulation
> wird nicht hineingesprungen.

Besser nicht togglen sondern nur setzen, denn sonst erkennt man nur, ob 
die vielleicht mehreren INT's gerade oder ungeradzahliger Anzahl waren.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Johannes schrieb:
> Habe auch PCMSK2 |= (1 << PCINT20);hinzugefügt. Aber auch das half
> nichts

 Obwohl PCINT auch beim Ausgang triggert, sollte man trotzdem den
 entsprechenden Pin (PD3) als Eingang mit Pullup konfigurieren
 und mit Schalter(Taster) gegen Masse schalten.

 Wenn es so gemacht wird, muss der PCINT feuern.

 Ich nehme stark an, dass du beim PD3 nichts gemacht hast und
 somit der Pin als Eingang mit Log.0 ganz traurig in der Gegend
 rumsteht und auf irgendeine Flanke wartet...
 Falls du gegen Masse schaltest, wird das aber nie passieren...

von MWS (Gast)


Lesenswert?

Marc V. schrieb:
> Johannes schrieb:
>> Habe auch PCMSK2 |= (1 << PCINT20);hinzugefügt. Aber auch das half
>> nichts
>
>  Obwohl PCINT auch beim Ausgang triggert, sollte man trotzdem den
>  entsprechenden Pin (PD3) als Eingang mit Pullup konfigurieren
>  und mit Schalter(Taster) gegen Masse schalten.

Der TE schreibt, dass er das Maskbit entsprechend gesetzt hat und Du 
schreibst von Ausgangskonfiguration. Nirgends im ganzen Thread ging's um 
diese Frage, im Gegenteil, ein funktionierender INT0/INT1 deutet darauf 
hin, dass dieses Thema verstanden wurde.
PCMSK <> DDR.

>  Ich nehme stark an, dass du beim PD3 nichts gemacht hast und
>  somit der Pin als Eingang mit Log.0 ganz traurig in der Gegend
>  rumsteht und auf irgendeine Flanke wartet...
>  Falls du gegen Masse schaltest, wird das aber nie passieren...

Selbst wenn er an PD3 nichts gemacht hätte, dann wäre das ganz ok, denn 
PCINT20 ist an PD4. Aber er hat, nach dem Eingangspost funktioniert 
INT1, PD3 ist INT1.
Wenn Du's Saufen nicht verträgst, solltet Du damit aufhören ;D

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

MWS schrieb:
> schreibst von Ausgangskonfiguration. Nirgends im ganzen Thread ging's um
> diese Frage, im Gegenteil, ein funktionierender INT0/INT1 deutet darauf
> hin, dass dieses Thema verstanden wurde.

 Selbst wenn du so dumm bist und nicht einmal merkst, dass es ein
 Schreibfehler war, solltest du nicht darauf rumreiten, dem TO
 hilft das in keiner Weise.

> Wenn Du's Saufen nicht verträgst, solltet Du damit aufhören ;D

 Und jeder Mensch mit IQ über 50 merkt das es PD4 heissen sollte.

 Wie auch immer, es geht um PCINT und der wird mit Flanken
 ausgelöst.
 Von Log.0 auf Log.0 gibts keine Flanke, klar ?

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Um den PC Interrupt auf PD4 zu initialisieren:
1
PCMSK2 = (1 << PCINT20);   // setze Bitmaske auf PD4 = PCINT20
2
PCICR = (1 << PCIE2);      // gebe IRQ frei für PC Gruppe 2
3
sei();                     // globale Freigabe der Interrupts

Der Pin muss kein Eingang sein. Eine Änderung seines Pegels kann z.B. 
auch durch ein
1
PORTD |= (1 << PD4);
 oder ein
1
PORTD &= ~(1 << PD4);
 erfolgen, wenns ein Ausgang ist.

Die ISR hat folgende Form:
1
ISR(PCINT2_vect)
2
{
3
  // Hier passierts
4
}

: Bearbeitet durch User
von MWS (Gast)


Lesenswert?

Marc V. schrieb:
>  Selbst wenn du so dumm bist und nicht einmal merkst, dass es ein
>  Schreibfehler war, solltest du nicht darauf rumreiten, dem TO
>  hilft das in keiner Weise.

Du kommst immer so schön arrogant rüber und würdest gerne glauben 
machen, alles (und noch dazu richtig) zu wissen. Gib halt einfach zu, 
dass Du's verhauen hast und gut ist's. Keine dummen Ausreden von wegen 
Schreibfehler, denn warum hast Du's dann gleich zweimal falsch 
geschrieben?

Wenn Du noch dazu auf den Nutzen abstellst, den der TE haben sollte, 
dann haut das dem Fass den Boden raus. Es gibt für einen Hilfesuchenden 
nichts verwirrenderes, als wenn jemand wie Du im Brustton der 
Überzeugung solchen Blödsinn vom Stapel lässt.

>> Wenn Du's Saufen nicht verträgst, solltet Du damit aufhören ;D
>
>  Und jeder Mensch mit IQ über 50 merkt das es PD4 heissen sollte.

Nein, nur derjenige Mensch der das Datenblatt liest, der versteht, 
welcher Pin es wirklich ist.

>  Wie auch immer, es geht um PCINT und der wird mit Flanken
>  ausgelöst.
>  Von Log.0 auf Log.0 gibts keine Flanke, klar ?

Wenn Du das zuoberst vom TE gepostete Codefragment verstanden
1
EICRA |= (1 << ISC00) | (1 << ISC10) | (1 << ISC11);
und vielleicht das Datenblatt gelesen hättest, dann wäre Dir klar 
geworden, dass INT0 auf beliebige Flanke konfiguriert war und INT1 auf 
steigende Flanke, beides wurde vom TE als funktionierend bezeichnet.

Wenn der TE dieses also erfolgreich schaffte, dann kann man 
logischerweise nicht annehmen, dass er's genau beim PCINT (der sich hier 
wie INT0 verhält) nicht kapiert hätte, wie der Taster anzuschließen ist.
Genauso wenig kann vermutet werden, dass er diesen Pin plötzlich im 
Gegensatz zu INT0/1 als Ausgang konfigurierte.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

MWS schrieb:
> Gib halt einfach zu,
> dass Du's verhauen hast und gut ist's. Keine dummen Ausreden von wegen
> Schreibfehler, denn warum hast Du's dann gleich zweimal falsch
> geschrieben?

 Tickst du noch richtig ?

> Wenn der TE dieses also erfolgreich schaffte, dann kann man
> logischerweise nicht annehmen, dass er's genau beim PCINT (der sich hier
> wie INT0 verhält) nicht kapiert hätte, wie der Taster anzuschließen ist.

 Wenn man etwas (wie du) nicht versteht, sollte man nicht so vorlaut
 sein. Es geht nicht um Taster, sondern um den PcInt-Pin, welches ein
 Pullup benötigt, entweder über externen oder eingebauten Widerstand.


> Genauso wenig kann vermutet werden, dass er diesen Pin plötzlich im
> Gegensatz zu INT0/1 als Ausgang konfigurierte.

 Wer hat das behauptet, wo hast du das gelesen ?

 Schreibst du nur, damit deine (dummen) Beiträge irgendwo zu lesen
 sind ?

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

...

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Solange hier keiner 'sudo' benutzt, wird sich auch nix ändern :x

von MWS (Gast)


Lesenswert?

Marc V. schrieb:
> MWS schrieb:
>> Gib halt einfach zu,
>> dass Du's verhauen hast und gut ist's. Keine dummen Ausreden von wegen
>> Schreibfehler, denn warum hast Du's dann gleich zweimal falsch
>> geschrieben?
>
>  Tickst du noch richtig ?

Durchaus, Du schriebst doch zweimal PD3, wohl kaum ein Schreibfehler, 
eher keine Ahnung gehabt.

>> Wenn der TE dieses also erfolgreich schaffte, dann kann man
>> logischerweise nicht annehmen, dass er's genau beim PCINT (der sich hier
>> wie INT0 verhält) nicht kapiert hätte, wie der Taster anzuschließen ist.
>
>  Wenn man etwas (wie du) nicht versteht, sollte man nicht so vorlaut
>  sein. Es geht nicht um Taster, sondern um den PcInt-Pin, welches ein
>  Pullup benötigt, entweder über externen oder eingebauten Widerstand.

Offenbar ging's bei Dir um Taster:

Marc V. schrieb:
>  und mit Schalter(Taster) gegen Masse schalten.

Der TE schrieb übrigens nichts von Taster o.ä., das hattest Du 
dazugedichtet, ich hab' nur das von Dir Geschriebene aufgegriffen.
Du scheinst mir sehr an gestörter Wahrnehmung Deiner Umwelt zu leiden.

Im übrigen benötigt ein PCINT-Pin keinen Pullup, sofern er von einem 
normalen digitalen Ausgang bedient wird.

>> Genauso wenig kann vermutet werden, dass er diesen Pin plötzlich im
>> Gegensatz zu INT0/1 als Ausgang konfigurierte.
>
>  Wer hat das behauptet, wo hast du das gelesen ?

Hier:

Marc V. schrieb:
>  Obwohl PCINT auch beim Ausgang triggert, sollte man trotzdem den
>  entsprechenden Pin (PD3) als Eingang mit Pullup konfigurieren

Da schwurbelst Du von Ausgang und dass man den Pin als Eingang 
konfigurieren möge, obwohl nirgends im Thread zu erkennen war, dass dies 
der TE nicht wüsste.

>  Schreibst du nur, damit deine (dummen) Beiträge irgendwo zu lesen
>  sind ?

Nein, ich schreibe, bzw. korrigiere, damit solche "Vollprofis" wie Du 
den gefühlten Forums-IQ nicht zu stark in's Minus treiben. LOL

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

MWS schrieb:
>>  Tickst du noch richtig ?
>
> Durchaus, Du schriebst doch zweimal PD3, wohl kaum ein Schreibfehler,
> eher keine Ahnung gehabt.

 Kein Kommentar zu solch einem Blödsinn.


MWS schrieb:
> Der TE schrieb übrigens nichts von Taster o.ä., das hattest Du
> dazugedichtet, ich hab' nur das von Dir Geschriebene aufgegriffen.
 Ach, ja ?
Johannes schrieb:
> funktioniert es nicht. Dazu habe ich den button mit PD4 (PCINT20) vom
> controller verbunden.

 Dass du mit deinen 4 Klassen Grundschule nicht weisst, was "button"
 bedeutet, ist mir klar.

> Im übrigen benötigt ein PCINT-Pin keinen Pullup, sofern er von einem
> normalen digitalen Ausgang bedient wird.
> Du scheinst mir sehr an gestörter Wahrnehmung Deiner Umwelt zu leiden.

 Eher du. Nirgendwo hat der TO irgendeinen digitalen Ausgang erwähnt.

> Da schwurbelst Du von Ausgang und dass man den Pin als Eingang

 Erstens bist du der einzige der hier schwurbelt und zweitens haben
 das schon andere vor mir erwähnt. Soll heissen, dass der PcInt auch
 softwareseitig ausgelöst werden kann.

> Nein, ich schreibe, bzw. korrigiere, damit solche "Vollprofis" wie Du
> den gefühlten Forums-IQ nicht zu stark in's Minus treiben. LOL

 Solange du mit deinen "Beiträgen" diesen Forum beglückst, kann der
 Forums-IQ sowieso nicht über 0 kommen.

von MWS (Gast)


Lesenswert?

Marc V. schrieb:
> blablupp

Bei Deinen Fähigkeiten Leuten frech in's Gesicht, respektive in die 
Tastatur zu lügen, selbst wenn Du im Unrecht bist, solltest Du eine 
Politikerkarriere anstreben. Da ist dann auch kein technisches 
Verständnis notwendig ;-)

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

MWS schrieb:
> Bei Deinen Fähigkeiten Leuten frech in's Gesicht, respektive in die
> Tastatur zu lügen, selbst wenn Du im Unrecht bist, solltest Du eine
> Politikerkarriere anstreben. Da ist dann auch kein technisches
> Verständnis notwendig ;-)

 LOL.
 Selbst das hast du abgeschrieben.

 Und das meiste habe ich sowieso zitiert, was ist da gelogen ?

von MWS (Gast)


Lesenswert?

Marc V. schrieb:
> Und das meiste habe ich sowieso zitiert, was ist da gelogen ?

Merkwürdig, ich hab' Deinen Unsinn zitiert, aber das ficht Dich nicht 
an.

Was hab' ich abgeschrieben?
Da gab's nichts abzuschreiben, das ist meine Meinung von Dir.
Dieses Verhalten kann man immer wieder in Deinen Posts bemerken, Du 
versuchst Deinen Unsinn gegen alle Widerstände zu vertreten, ja nichts 
zugeben und sei der Quatsch auch noch so groß. Ein typisches, ach was 
sag' ich, ein perfektes Politikerverhalten.

Und jetzt hab' ich keine Lust mehr zum: Du bist, nein, Du bist, nein Du.
Wie bereits von thomase treffend bemerkt.
Du darfst also wieder mit Dir allein spielen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Marc V. schrieb:
> MWS schrieb:
>> Der TE schrieb übrigens nichts von Taster o.ä., das hattest Du
>> dazugedichtet, ich hab' nur das von Dir Geschriebene aufgegriffen.
>  Ach, ja ?
Johannes schrieb:
> funktioniert es nicht. Dazu habe ich den button mit PD4 (PCINT20) vom
> controller verbunden.

 Soviel zum Lügen, dazudichten, gestörter Wahrnehmung...


> versuchst Deinen Unsinn gegen alle Widerstände zu vertreten, ja nichts
> zugeben und sei der Quatsch auch noch so groß. Ein typisches, ach was
> sag' ich, ein perfektes Politikerverhalten.

 Damit hast du dich ziemlich genau beschrieben...

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.