PinChange Interrupt wird nicht ausgeführt

Gast #4898625
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
Gast #4898696
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.
#4898817
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.
(Firma: Vescomp) #4898872
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...
Gast #4899047
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
(Firma: Vescomp) #4899150
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 ?
(Firma: matzetronics) #4899305
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
}
Gast #4899543
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.
(Firma: Vescomp) #4899593
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 ?
Gast #4899627
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
(Firma: Vescomp) #4899656
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.
(Firma: Vescomp) #4899671
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 ?
Gast #4899689
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.
(Firma: Vescomp) #4899694
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...

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