Frage(n) zu Pin Change interrupt / External interrupt

Hi Leute,

als Anfänger habe ich mal wieder eine Verständnisfrage ;D

Kontext: ich möchte n verschiedene Taster/Schalter in einem Sketch abfragen.

Ein erster Versuch (n = 1) mit folgendem Code (Ausschnitte) hat geklappt:

volatile unsigned long count=0;

void setup() 
{
  pinMode(2, INPUT);       // Pin 2 ist INT0
  digitalWrite(2, HIGH);   // interner Pull up Widerstand auf 5V
  attachInterrupt(0, interruptRoutine, RISING);
 }

void interruptRoutine() 
{
  count++;
}

Das ganze funktioniert gut , an Pin2 hängt ein Hall-Sensor-IC, ein vorbeigleitender Magnet
löst schön den Interrupt und die Zählung aus.
Das ganze habe ich via Copy'n'Paste und ein wenig Konfiguration aus einem im Netz gefundenen Beispielsketch destiliert.

Ich frage mich gerade was der Unterschied von einem "Pin Change interrupt" zu einem "External interrupt" ist -
das wäre der theoretische Teil meines Postings.

Der praktische, ich möchte - unter Umständen bis zu 6 (möglichst "interruptauslösende") - Schalter abfragen,
ich möchte nicht pollen. Kann ich n Interrupt-Routinen für n Schalter implementieren (und wenn ja, wie) ?

Ich hoffe ich habe mich verständlich ausgedrückt.

Viele Grüße

Harry

Da Schalter und Taster prellen, ist die Auswertung per Interrupt der falsche Weg.

Interrupt bei mechanischen Schaltern/Tastern ist der falsche Weg, wie combie schrieb. Das kannst du ordentlich nur über das Polling erledigen.

Jedoch kann man, elektrische "Schalter/Taster" durchaus über einen Interrupt erfassen. (Transistor, ...).
Man sollte aber überlegen, wann dieses erforderlich ist. Wenn ein Signal mehrere ms ansteht, ehe es seinen Zustand ändert, braucht es dafür keinen Interrupt.

Bei einem externen Interrupt wird direkt die passende ISR angesprochen. Soll heißen, wenn an INT0 etwas geschieht, ist direkt bekannt, dass es dieser Eingang war.

Beim Pin Change Interrupt wird zuerst nur eine ISR aufgerufen. Hier muss dann festgestellt werden, von welchem Pin diese Auslösung kam.

Wenn man bei Google "Pin Change interrupt / External interrupt" eingibt, bekommt man 1,4 Millionen Ergebnisse.
Ich gebe zu, dass davon nicht alle relevant sind... :wink:
Aber es sind viele mit verwertbarer Information dabei.

Auch gibt das Datenblatt zum verwendeten Prozessor gerne Auskunft.

Selbst die Arduino Doku ist recht ausfkunftsfreudig: Arduino Playground - PinChangeInt

Bei externen Interrupts hat jeder Pin eine eigene ISR. Bei PinChange Interrupts teilen sich jeweils 8 Pins eine ISR.
Außerdem muss man die Flanken-Erkennung selber machen, da auf jeden Pegelwechsel getriggert wird. Bei externen Interrupts kann man direkt einstellen, dass nur auf eine bestimmte Flanke getriggert werden soll.

Das heißt zusammengefasst, dass man via "Pin Change Interrupt" durchaus mehrere
nichtprellend getriggerte "Schaltquellen" interruptgesteuert verarbeiten kann.

Bei prellendem Schalten wäre eher ein Pollen angesagt ...

Danke und Grüße

Hallo zusammen,

ich möchte meinen Datenlogger der aus einem Arduino UNO und dem GSM Schield2 besteht effizienter machen. Darum will ich den Arduino in den pwrDown Modus schicken, und ihn mit einer RTC alle 2-3 Stundnen per externen interrupt aufwecken.
Ich habe jetzt gelesen das die INT0 und INT1 nur auf die Eingänge 2 und 3 funktionieren. Das ist für mich schlecht, weil über diese die Kommunikation des GSM Moduls läuft. Könnt ihr mir das so bestätigen?
Gibt es eine Möglichkeit das der Arduino auf z.B. Pin 6 schaut zum wecken?

Vielen Dank schonmal!

Sebastian

Erstens solltest du für eine neue Frage auch einen neuen Thread aufmachen und zweitens kannst du für ein GSM andere Pins zur Kommunikation verwenden.

@IBES1410: Du solltest Dich entscheiden, im welchem Forum Du die Antworten willst.
Crosspost gilt als unhöflich gegenüber den anderen Forenteilnehmern, von denen Du Hilfe erwartest.

Da kann es leicht passieren, dass Du in beiden Foren keine Antwort mehr bekommst.

Gruß Tommy

Sorry,
war mehr unüberlegt, weil ich den post in nem neuen Topic schreiben wollte!
Klar ist sowas unhöflich! Wird nicht wieder vorkommen!!