PinChange Interrupt wird nicht ausgeführt

Gast #4898625
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
Gast
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.
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.
(Firma: Vescomp)
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...
Gast
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
(Firma: Vescomp)
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 ?
(Firma: matzetronics)
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
}
Gast
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.
(Firma: Vescomp)
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 ?
Gast
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
(Firma: Vescomp)
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.
Gast
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 ;-)
(Firma: Vescomp)
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 ?
Gast
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.
(Firma: Vescomp)
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.