PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : variable für 10 sec. nicht zählen



lanic
15.03.2006, 12:26
Hallo,

ich habe einen zähler beim atmega128 an den 7 int eingängen fungtionirt auch soweit alles bestens nur mein problem ist nach jedem gezählten impuls soll dieser impuls selbs wenn er noch mal kommt erst nach 10 sec wider gezählt werden baue ich dort wait 10 ein bleibt er ja so lange in der rotine drinne und er arbeitet nicht weietr erst wenn er wider aus der rotine ist gibt es da noch eine andere möglichkeit?

ich seteh momentan auf dem schlauch.

denke Nico

Furtion
15.03.2006, 16:59
hi,

ich glaube das liegt an dem "wait 10" versuch es lieber mal mit "waitms 10000". Beim meinem Atmega 8 bleibt er mit wait auch sehr lange in der Rutine steken.

uwegw
15.03.2006, 17:07
nen Fall für den Timer...
Wenn du ein Signal empfangen hast, setzt du ne Variable dafür als Zeichen für "gesperrt" und initialisierst nen Zähler. Im Timer-Interrupt (zb alle 1/10sec) zählst du dann hoch, und wenn ein Kanal bei 10sec angekommen ist, wird er wieder freigeschaltet...

lanic
15.03.2006, 22:55
das mit dem timer hört sich gut an mein gedanke war nur sobalt ich dann im Timer-Interrupt bin können doch keine anderen interupts ausgelöst werden oder verstehe ich da was falsch. soll er alle 1/10 sec in die rotine springen?

gruß nico

-tomas-
16.03.2006, 10:54
In einer ISR sollten keine zeitaufwendigen Befehle stehen! Ich würde in der ISR nur ein Flag (Set Zaehlimpuls) setzen und im Hauptprogramm sinngemäß schreiben:

'Pseudocode
DIM Zaehler as Word
'...
Do
If Zaehlimpuls=1 Then
INCR Zaehler
Wait 10
Reset Zaehlimpuls 'jetzt werden alle Ereignisse der letzten 10sec gelöscht
END IF
Loop

Falls Du im Hauptprogramm nicht 10sec stehen bleiben willst, setze einen Timer...