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.
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.
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.
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.
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.