Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupts mit Arduino?


von Hans L. (holzwurm56)


Lesenswert?

Hallo,
in einem Programm werden 2 Pin mit PCSMK0 = 0b00000101 im Mode Change
aktiviert. Ich würde das gerne in Rising ändern. Ich habe das Programm
nicht geschrieben und auch wenig Ahnung von Arduino. Kann mir jemand
einen Rat geben? Das Programm ist für den Nano oder den Pro Mini.
MfG
Hans

: Verschoben durch Moderator
von Alexander (alecxs)


Lesenswert?

suche nach FALLING und ersetze durch RISING
1
#include <PinChangeInterrupt.h>
2
void setup()
3
{
4
  pinMode(PIN, INPUT);
5
  attachPCINT(digitalPinToPCINT(PIN), BTN_ISR, RISING);
6
}

von Hans L. (holzwurm56)


Lesenswert?

Das habe ich auch gelesen. Aber das scheint eine Art Inlineassembler
oder Registerprogrammierung zu sein.

von Alexander (alecxs)


Lesenswert?

Dann ist das Wörtchen Arduino im Betreff wenig zielführend, das lockt 
nicht gerade zuerst die Leute an die sich damit auskennen. Entweder Du 
postest den Code, oder Du wartest noch ein bisschen auf denjenigen der 
auch ohne den Code sofort erkennt wie Du PCSMK0 setzen musst.

von Sebastian R. (sebastian_r569)


Lesenswert?

PCMSK steht für Pin Change Mask.

Das lässt sich nicht ändern, das Register gibt nur an, welche Pins den 
Interrupt auslösen können.

Du musst in der ISR prüfen, ob nach Sprung in die Routine der Pin high 
ist, dann war es eine steigende Flanke.

von Chris V. (nagut)


Lesenswert?

Hans L. schrieb:
> Kann mir jemand
> einen Rat geben? Das Programm ist für den Nano oder den Pro Mini.
> (...)
> das scheint eine Art Inlineassembler
> oder Registerprogrammierung zu sein.

In solchen Fällen identifiziert man am besten erstmal den verwendeten 
Controller (bei Dir vermutlich der ATmega 328P) und schaut dann direkt 
in dessen Datenblatt mit den Registerbeschreibungen.

Dort steht (wie schon von Sebastian erwähnt), dass der 
Pin-Change-Interrupt bei jedem Signalwechsel am Pin ausgelöst wird. Der 
Controller hätte aber auch 2 externe Interrupt-Eingänge, bei denen man 
sich die Flanke aussuchen kann. Aber dafür müsste man dann auch die 
dafür vorgesehenen Pins benutzen. Keine Ahnung, ob das für Dich in Frage 
kommt.

von Sebastian W. (wangnick)


Lesenswert?

Hans L. schrieb:
> in einem Programm werden 2 Pin mit PCSMK0 = 0b00000101 im Mode Change
> aktiviert. Ich würde das gerne in Rising ändern. Ich habe das Programm
> nicht geschrieben und auch wenig Ahnung von Arduino. Kann mir jemand
> einen Rat geben? Das Programm ist für den Nano oder den Pro Mini.

In PCMSK0 aktiviert Bit 0 PCINT0 auf PB0 (Arduino Pin D8), und Bit 2 
aktiviert PCINT2 auf PB2 (Arduino Pin D10). Pin Change Interrupts wie 
PCINT0 und PCINT2 triggern auf jeden Pin Change und lassen sich nicht, 
wie die speziellen INT0 und INT1 Pins, hardwaremäßig auf RISING oder 
FALLING beschränken. Wie Sebastian R. oben beschreibt ließe sich so 
etwas aber in Software lösen.

LG, Sebastian

von Alexander (alecxs)


Lesenswert?

für Arduinonutzer mit genannter Library

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.