PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Interrupt und TimerOne Library



Chevy
19.03.2015, 14:01
Hi,

ich brauch mal etwas Hilfe, stehe auf dem Schlauch...

Hardware: Arduino Mega 2560 R3


Habe mal in mein Programm folgende Library einegbunden:
http://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary





#include "TimerOne.h"
int ledpin=13;
int alle_x_sekunden=1;

void setup() {
pinMode(ledpin, OUTPUT);
Timer1.initialize(alle_x_sekunden*1000000);
Timer1.attachInterrupt(blinken);
}


void blinken() {
digitalWrite(ledpin, digitalRead(ledpin) ^ 1);
}


Nun möchte ich innerhalb des Programms die Funktion starten, was auch funktioniert.

Nur wie kann man die Funktion anhalten?

Habe es mit dem Befehl:

Timer1.detachInterrupt();

versucht, der Kompiler meckert nicht, aber funktionieren tut es auch nicht.

Wer kann mir Helfen?

Gruß Marco

askazo
19.03.2015, 15:26
Eigentlich sollte es mit detachInterrupt() funktionieren, da die Funktion den Overflow Interrupt abschaltet.
Alternativ sollte auf jeden Fall Timer1.stop() funktionieren.

Poste doch mal bitte Deinen Code mit der Abschaltung.

Gruß,
askazo

Chevy
19.03.2015, 22:56
Hi,

Timer1.Stop();

hatte ich auch schon probiert, jedoch ebenfalls ohne erfolg?

Mein Code ist sehr lange, daher nur das wesentliche



#include "TimerOne.h" // Ermöglicht die Timer-Interrupt Funktion zu nutzen
.
.
.
int alle_x_sekunden =1; // Variable alle_x_sekunden deklarieren
int gelb[] = {13,26,27,28,29,30,31,32,33}; // Digital-Ausgänge der Variable zuweisen


void setup()
{
.
.
.
for (int i=0; i<9; i++) // Zähler-Schleife für die Ausgänge
pinMode(gelb[i], OUTPUT);
.
.
.
void blinken()
{
digitalWrite(gelb[0], digitalRead(gelb[0]) ^ 1); // zum Test nur der Speicher 0 = Pin13 aktiviert
digitalWrite(gelb[1], digitalRead(gelb[1]) ^ 1); // für ein Tip einer einfachen Schreibweise wäre ich dankbar!
digitalWrite(gelb[2], digitalRead(gelb[2]) ^ 1);
digitalWrite(gelb[3], digitalRead(gelb[3]) ^ 1);
digitalWrite(gelb[4], digitalRead(gelb[4]) ^ 1);
digitalWrite(gelb[5], digitalRead(gelb[5]) ^ 1);
digitalWrite(gelb[6], digitalRead(gelb[6]) ^ 1);
digitalWrite(gelb[7], digitalRead(gelb[7]) ^ 1);
digitalWrite(gelb[8], digitalRead(gelb[8]) ^ 1);
}

void loop()
{

Timer1.initialize(alle_x_sekunden*1000000);
Timer1.attachInterrupt(blinken);

delay(5000);

Timer1.detachInterrupt();
.
.
.


Das ist nur mein Test Code, wenn es funktioniert wird das ganze später im Programm eingebunden.

Gruß Marco

- - - Aktualisiert - - -

Hi,

alles Zurück... habe den Fehler gefunden...

Da ich das ganze nur auf den Board selbst getestet habe und nicht im eingebauten Zustand wiederholt sich die Loop Schleife ständig. Und somit fehlte nach dem Befehl:
Timer1.detachInterrupt();

einfach nur eine zweite Pause... wie blöde!!!

Sorry!!

Gruß Marco