INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Interrupts für eine bestimmte Zeit unterbrechen??
09.10.2014, 10:46
Beitrag #1
Interrupts für eine bestimmte Zeit unterbrechen??
Hallo zusammen,

ich komme bei meiner Programmierung nicht weiter. Und zwar möchte ich ein Porgramm schreiben, was alle 3 Sekunden die gezählten Impulse (Umdrehungen) an einem Interrupt Pin auswertet und in dem Fall, dass diese Impulse mehr als 3 sind, eine bestimmte Zeit wartet und eine LED einschaltet, bovor das gesamte Programm weiterläuft.

Der Code dazu sieht wie folgt aus:

#include <TimerOne.h>

int led = 13;
int eingang = 3;
volatile int state =LOW;
volatile unsigned long last_irq0=millis();
volatile int umdrehungen = 0;



void setup() {

pinMode(led, OUTPUT);
pinMode(eingang, INPUT);
attachInterrupt(0,hochzaehlen,RISING);
Timer1.initialize(3000000);
Timer1.attachInterrupt(auswerten);
Serial.begin(9600);
}

void auswerten (){
Serial.println(umdrehungen);

if (umdrehungen > 3) {
digitalWrite (led, HIGH);
state = HIGH;
} else {
digitalWrite (led, LOW);
state = LOW;
}

umdrehungen=0;
}

void hochzaehlen (){
unsigned long act_irq0; // zum Entprellen
act_irq0=millis();
if(act_irq0 - last_irq0 > 150){
umdrehungen = umdrehungen +1;

}
last_irq0=act_irq0;

}

void loop() {

if (state == HIGH){

noInterrupts ();
delay (10000);

interrupts();
}



}

Das leuchten der LED usw. klappt soweit auch super. Das einzige Problem ist, dass das Programm nicht wartet, wenn die Anzahl der Impulse (Umdrehungen) gößer als 3 ist. Das Programm läuft einfach weiter.

Ich vermute, dass es am Code in der loop liegt. Warum funktioniert delay hier nicht? Und gibt es eine andere Möglichkeit eine Ausschaltung von Interrupts für eine bestimmte Zeit zu erreichen?

Ich hoffe sehr ihr könnt mir weiterhelfen.

Gruß
Kai
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2014, 11:08 (Dieser Beitrag wurde zuletzt bearbeitet: 09.10.2014 11:11 von SkobyMobil.)
Beitrag #2
RE: Interrupts für eine bestimmte Zeit unterbrechen??
Hallo,
ich bin mir da nicht ganz sicher…

a - umdrehungen > 3
wenn es vier sind, geht die LED an
hier:
b - umdrehungen=0;
hier setzt Du sie wieder auf < 3

das sieht so aus, als wenn "b", "a" sofort wieder ausschaltet.
Gruß und Spaß
Andreas
P.S. wenn mich nicht alles täuscht, nimmt ein "Interrupt" auf delay() keine Rücksicht
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2014, 18:41
Beitrag #3
RE: Interrupts für eine bestimmte Zeit unterbrechen??
mh.. damit habe ich an sich keine Probleme..

mein Problem ist, dass ich die Interrupts nicht für eine bestimmte Zeit ausschalten kann..

hat da nicht einer ne Lösung wie das gehen kann??
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2014, 18:56
Beitrag #4
RE: Interrupts für eine bestimmte Zeit unterbrechen??
Hi,
woran merkst Du eigentlich, dass das Programm weiterläuft? Geht die LED wieder aus?
Ich dachte eigentlich, das delay() würde gar nicht mehr funktionieren, also im Wesentlichen ewig warten...
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.10.2014, 19:45
Beitrag #5
RE: Interrupts für eine bestimmte Zeit unterbrechen??
Hallo,
versuche mal etwas anderes, Du hast:

if (state == HIGH)
{
noInterrupts ();
delay (10000);
interrupts();
}

mache daraus mal:

if (state == HIGH)
{
Serial.println(state);
noInterrupts ();
delay (10000);
interrupts();
}

Dann könntest Du es mit:

if (state == 0)

oder

if (state == 1)

erschlagen, oder auch nicht.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.10.2014, 14:34
Beitrag #6
RE: Interrupts für eine bestimmte Zeit unterbrechen??
ich merke, dass das Porgramm weiterläuft, da es die Anzahl der Umdrehungen über den seriellen Port weiterhin schreibt. Dies wird ja auch wiederum durch ein Interrupt ausgelöst. Also wird irgendwie das delay übergangen und somit die Interrupts wieder sofort eingeschaltet...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehlermeldung das eine reimundko 3 309 08.06.2016 08:56
Letzter Beitrag: hotsystems
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 342 30.03.2016 16:42
Letzter Beitrag: MartinK
  Zeit - Verzögerung bergfrei 12 771 14.01.2016 22:09
Letzter Beitrag: Bitklopfer
  Mehrere Geräte über eine IR Fernbedienung Respun 20 2.019 07.01.2016 23:51
Letzter Beitrag: hotsystems
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 616 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Eine Funktion vorher definieren ? arduinofan 23 2.031 30.12.2015 08:42
Letzter Beitrag: amithlon
  fehlt mir eine Bibliothek? Baumschüler 5 508 15.12.2015 08:53
Letzter Beitrag: Baumschüler
  Ankommende Daten(Webserver) am MEGA2560 für eine Aktion auswerten ? arduinofan 0 482 11.12.2015 09:06
Letzter Beitrag: arduinofan
  Interrupts mit Arduino Due chhec 34 3.789 16.11.2015 08:42
Letzter Beitrag: chhec
  Hilfe bei einer Füllstandsanzeige für eine Zisterne jgrothe 73 7.900 31.07.2015 08:41
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste