Externer Interrupt

Hallo,

ich habe mich in den letzten Tagen ein bisschen mit externen Interrupts des Arduinos beschäftigt.
Mein Plan war es eine LED über einen exetren Interrupt anzuschalten, der per Taster ausgelöst wird.

Mein Problem ist, das der µC keinen Interrupt auslöst.

Ich benutzen den Crumbuino-128. Link: http://www.chip45.com/products/crumbuino-128_arduino_kompatibel_atmega128_modul_board_usb.php

Mein benuztes Programm ist im Anhang.

Ich habe schon viel im Internet gesucht, aber nichts gefunden was mir weiter helfen kann.

Könnte es vielleicht sein, das der Interrupt nicht auslöst, weil der Taster nicht entprellt ist?

Ich hoffe das ich mein Problem verständlich erklärt habe und das ihr mir helfen könnt.

Mfg

Hancky

Test.ino (353 Bytes)

Taster per Interrupt ist nicht sinnvoll, da die Prellen. Es reicht völlig aus den Taster ständig abzufragen. Dabei kann man ihn auch in Software entprellen.

Hanckyxx:
Mein benuztes Programm ist im Anhang.

So kurze Programme kannst Du im Text inline innerhalb von Code-Tags posten. Das Posten kleiner Programme als Attachment erschwert nur den Zugriff, sich das mal kurz anzusehen.

Hanckyxx:
Ich habe schon viel im Internet gesucht, aber nichts gefunden was mir weiter helfen kann.

Vermutlich wird

int taster = 17;

und Interrupt-1

 attachInterrupt(1, interr, CHANGE);

nicht zusammenpassen.

Dein "krummes" Board ist kein Arduino-kompatibles Board, auch wenn die Produktbeschreibung etwas anderes herbeischwindeln möchte. Es gibt kein einziges originales Arduino-Board, das einen ATmega128 Mikrocontroller enthält.

Welche Core-Libraries verwendest Du?

Hast Du wenigstens eine Übersichtstabelle der Interrupts, welche externen Interrupts mit welchem Pin verbunden sind? So eine Tabelle wie es diese für die von Arduino-Boards verwendeten Controller hier gibt:

Hanckyxx:
Ich habe schon viel im Internet gesucht, aber nichts gefunden was mir weiter helfen kann.

Ich habe auch mal ein wenig im Internet gesucht, also eventuell könnte bei diesem Board Pin-4 zu Interrupt-0 und Pin-5 zu Interrupt-1 gehören.

Also in Deinem Code dann:

int taster = 5; // Taster an Pin-5
...
 attachInterrupt(1, interr, CHANGE);  // Tasterpin-5 zu Interrupt-1 gehörend?

Aber sicher bin ich mir da nicht, denn ich kenne das Board nicht, weiß nicht welche Core-Libraries Du verwendest, und fand nur einen kurzen Hinweis im Internet. Also keine Garantie darauf.

Hanckyxx:
Könnte es vielleicht sein, das der Interrupt nicht auslöst, weil der Taster nicht entprellt ist?

Nein. Höchstens löst der Interrupt nicht aus, wenn

  • der falsche Pin den Pegel wechselt
  • am richtigen Pin der Pegel nicht wechselt, weil kein Pull-Widerstand vorhanden ist

Generell ist es aber völliger Unsinn, so langsame Aktionen wie das Drücken eines noch dazu mechanisch prellenden Tasters über Interrupts auswerten zu wollen. Taster werden generell "gepollt" also innerhalb der loop() Funktion laufend abgefragt und softwaremäßig entprellt. Das ist viel weniger problematisch.

Hallo,

vielen Dank für die schnellen Antworten.

Welche Core-Libary ich verwende habe ich keine Ahnung.
Als ich mir das Board gekauft habe, war mir bewusst, das es keine Arduinoboard gibt, welches einen Atmega 128 besitzt.
Um das Board benutzen zu können musst ich mir noch "Treiber"-Datei herunterladen und in den Hardwareordern von der Arduino-Software ziehen.

Eine direkte Tabelle zu den Interrupts habe ich nicht gefunden. Ich habe versucht es aus dem Datenblatt des µCs raus zu suchen.

Jurs du hattest recht, dass der Pin 5 den Interrupt 1 auslöst. Mich würde es interessieren wie du das heraus gefunden hast.

Hanckyxx:
Jurs du hattest recht, dass der Pin 5 den Interrupt 1 auslöst. Mich würde es interessieren wie du das heraus gefunden hast.

Ich weiß nicht was Jurs gemacht hat, aber ich würde Schaltplan und Datenblatt nebeneinander legen und vergleichen. Damit sollte es ein leichtes sein eine solche Tabelle anzulegen.

Wenn ich mir den Schaltplan anschaue, wäre INT0-INT3 an 25-28, INT4-INT7 an 6-9, weshalb ich mich auch frage, wie jurs auf die Info gekommen ist.

Hanckyxx:
Könnte es vielleicht sein, das der Interrupt nicht auslöst, weil der Taster nicht entprellt ist?

Es ist umgekehrt. ein prellender Taster ruft den Interrupt öfters auf; dadurch hast Du statt einem Aufruf bei Betätigung dann 3 bis 5 Aufrufe.

Grüße Uwe

Hanckyxx:
Jurs du hattest recht, dass der Pin 5 den Interrupt 1 auslöst. Mich würde es interessieren wie du das heraus gefunden hast.

Ich habe mal hier ins Forum geguckt, bevor ich meine Antwort geschrieben habe.

Da hatte jemand festgestellt, dass er bei seinem Crumbuino-128 Board mit Pin-4 und Pin-5 nicht wie von ihm angenommen Interrupt-4 und Interrupt-5 verwenden muss, sondern Interrupt-0 und Interrupt-1. Und dann ist mir die Vermutung bekommen, dass das bei Deinem Board genau so sein könnte.

:wink: