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) ?
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...
Aber es sind viele mit verwertbarer Information dabei.
Auch gibt das Datenblatt zum verwendeten Prozessor gerne Auskunft.
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 ...
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?
@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.