Gruesst euch Jungs
Ich sitz grad mal wieder an einer kleinen Herausforderung, die so simpel ist, dass meine komplexe Denkweise die Loesung uebersieht *lol*
In einem aktuellen Projekt soll ich ein paar Zaehler ablesen (Gas, Wasser). Das Ganze soll interruptgesteuert laufen, damit mir kein Puls entwischt, die Signalgeber sind Reedkontakte, die ich leider nicht gegen Hallsensoren austauschen kann. Interrupt ist ueber int. Pullup auf 1 und soll auf fallende Flanke reagieren. Die "0" wird je nach Zaehler fuer mehrere Sekunden gehalten oder sogar laenger, wenn der Zaehlermagnet unter dem Reed anhaelt. Routine sieht so aus:
.............................................................................................
Problem in der Routine ist, dass zuviele Impulse gelesen werden. Innerhalb einer Woche Testlauf wurden 100 Impulse zuviel erfasst, was 10m3 Gas entspricht. Wenn ich danebenstehe und die Zaehlervariabeln am Laptop checke, laeuft alles tadellos. Vielleicht hat jemand ne bessere Loesung?
Gruesse aus Polen
Uwe
Ich sitz grad mal wieder an einer kleinen Herausforderung, die so simpel ist, dass meine komplexe Denkweise die Loesung uebersieht *lol*
In einem aktuellen Projekt soll ich ein paar Zaehler ablesen (Gas, Wasser). Das Ganze soll interruptgesteuert laufen, damit mir kein Puls entwischt, die Signalgeber sind Reedkontakte, die ich leider nicht gegen Hallsensoren austauschen kann. Interrupt ist ueber int. Pullup auf 1 und soll auf fallende Flanke reagieren. Die "0" wird je nach Zaehler fuer mehrere Sekunden gehalten oder sogar laenger, wenn der Zaehlermagnet unter dem Reed anhaelt. Routine sieht so aus:
Code:
Hauptroutine:
'Programmroutine
If Pind.3 = 1 And Isrflag = &HFF Then 'Wenn der INT-Pin wieder auf 1 ist"
Isrflag = &H00 'Flag loeschen
Waitms 100 'Einflattern des Reeds
Enable Int1
End If
Loop
End
Code:
ISR:
Waitms 25 'Einflattern des Reeds
Disable Int1
Isrflag = &HFF 'Flag dient zum Reaktivieren des Interrupts nachdem der Pin in den Zustand "1" zurueckgekehrt ist
Incr Impulsecounter 'zaehlt den Impulszaehler hoch
Gasmeter = Gasmeter + 0.1 'zaehlt den internen Zaehlerstand hoch (zur kontrolle, vom Master wird nur der Impulsecounter ausgelesen und im Master addiert)
Return
'------------------------------------------------------------------------------
Problem in der Routine ist, dass zuviele Impulse gelesen werden. Innerhalb einer Woche Testlauf wurden 100 Impulse zuviel erfasst, was 10m3 Gas entspricht. Wenn ich danebenstehe und die Zaehlervariabeln am Laptop checke, laeuft alles tadellos. Vielleicht hat jemand ne bessere Loesung?
Gruesse aus Polen
Uwe