Dann setz dir in der Sub ne Variable auf 1 und lösche sie in der irq wieder, wenn sich die minute ändert. Und den "gosub" führst du nur aus wenn variable=0. So ist sichergestellt, dass die sub nur einmal pro minute aufgerufen wird.
Dann setz dir in der Sub ne Variable auf 1 und lösche sie in der irq wieder, wenn sich die minute ändert. Und den "gosub" führst du nur aus wenn variable=0. So ist sichergestellt, dass die sub nur einmal pro minute aufgerufen wird.
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Hallo danke für die Hilfe hat leider nicht den gewünschten Erflog gebracht !!
Geändert von hunikuni (02.06.2012 um 21:18 Uhr)
Ich weiß zwar nicht ob darin das Problem liegt, aber in diesem Teils des Codes fallen zwei Dinge auf:
1. Wenn Du in der ersten Zeile die Variable Hallimpuls auf 0 setzt, brauchst D zwei Zeilen später nicht abzufragen, ob sie auch tatsächlich 0 istCode:Led: Hallimpuls = 0 On Int0 Zaehlen If Hallimpuls = 0 Then Toggle Portd.1
(das ist aber nur ein "Schönheitsfehler" und dürfte keine Fehlfunktionen nach sich ziehen)
2. Das Statement "On Int0 Zaehlen" sollte vor die Hauptschleife, denn es muss nur ein einziges mal deklariert werden, welche ISR beim entsprechenden Interrupt ausgeführt werden soll.
Wenn Du damit erreichen wolltest dass der Interrupt0 als solches aktiviert werden soll, wäre "Enable Int0" der richtige Befehl. Erst nach dieser Anweisung ist der Interrupt "scharf".
Außerdem sehe ich das gleiche Problem wie Tido: Das Unterprogramm LED wird nach jeweils 10 Hallsensor-Impulsen gleich wieder aufs neue ausgeführt, weil die Bedingung "Stunde = 0 und Minute = 1 (bzw. 3) ja weiterhin erfüllt ist.
Dank für die Antwort.
Ich dachte Timer läuft weiter und Bedingung Stunde = 0 Minute =1 bzw 3 ist nur einmal erfüllt ist.Außerdem sehe ich das gleiche Problem wie Tido: Das Unterprogramm LED wird nach jeweils 10 Hallsensor-Impulsen gleich wieder aufs neue ausgeführt, weil die Bedingung "Stunde = 0 und Minute = 1 (bzw. 3) ja weiterhin erfüllt ist
Natürlich ist die Bedingung nur "einmal" erfüllt -aber das für eine ganze Minute lang! Und während dieser Zeit wird die Hautschleife schätzungsweise ein paar Millionen male durchlaufen, und jedes mal wird das Unterprogramm ausgeführt!
Und der Timer läuft sowieso weiter...
Danke, aber dann müsste das Led sofort wieder anfangen zu leuchten und nicht aus bleiben ??? Habe ja das Problem dass es ausgeht und nach der definierten Zeit ( hier 3. Minute )nicht wieder an geht !! Oder habe ich einen Denkfehler ??? Werde wahrscheinlich umdrehungsabhängige Motorenabschaltung aufgeben und zeitgesteuterte verwenden.
Das wäre aber schade, denn (fast) jede Aufgabe lässt sich in Bascom realisieren!Werde wahrscheinlich umdrehungsabhängige Motorenabschaltung aufgeben
Vielleicht beschreibst Du nochmal etwas genauer, was denn genau passieren soll? Bislang ist zwar von einem Motor, dann aber wieder von an- und ausgehenden LEDs die Rede - und die Bedeutung der 1 und 2 Minuten (die manchmal ja auch 3 sein können) erschließt sich auch noch nicht so ganz...
Das gezeigte Verhalten rührt daher, da die LED nicht über Reset im Else-Zweig ausgeschaltet wird, sondern über Toggle, da nach 10 Impulsen die Sub verlassen, aber sofort erneut angesprungen wird. Bei diesem zweiten Mal wird also die LED ausgeschaltet. Da aber wahrscheinlich dann keine Hallimpulse mehr kommen, hängt es von da an in der Do/Loop und kann natürlich auch nicht auf die dritte Minute reagieren. Du kannst das überprüfen, indem Du nach Ablauf der ersten Minute genügend Hallimpulse erzeugst, damit die Loop verlassen wird. Danach wirst Du sehen, dass die LED bei Minute 3 angeht. Der Fehler wäre Dir einfacher klar geworden, wenn Du statt Toggle ein Set verwendet hättest.
Lesezeichen