Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Zeitmessung Kategorie: C-Control I V1.1 (von Uwe - 6.03.2005 17:37)
 Als Antwort auf Re: Zeitmessung von Uwe - 6.03.2005 13:52
nochmal kurz etwas zu den Schleifen:
'---------------------------------------------------------------------------------------------------------------------------
#TRIGGER
if port8 = OFF then goto trigger
' solange wie port 8 OFF ist bleibt das Programm in der Schleife. Falls port 8 gerade ON (z.B. in der Mitte vom Signal) geht's gleich weiter. Ansonsten gehts erst weiter wenn port 8 von OFF auf ON gewechselt hat.
'-----------------------------------------------------------------------------------------------------------------------------
#WARTEN
if port8 = ON then goto warten
' solange wie port 8 ON ist, bleibt das Programm in der Schleife. Wenn port 8 auf OFF wechselt, gehts weiter
'------------------------------------------------------------------------------------------------------------------------------
'das ist jetzt der Anfang eines OFF - ON Zyklus
' Also, Zeitmessung einschalten
SYS CLR_FTIMER  'Timer auf Null setzen
' OFF Zeit
#OFF
if port8 = OFF then goto OFF ' Solange wie port 8 OFF ist bleibe ich in der Schleife (der Timer läuft)
# Wenn port8 auf ON gewechselt hat, gehts weiter
'ON Zeit
#ON
if port8 = ON then goto ON 'Solange wie port 8 ON ist bleibe ich in der Schleife (der Timer läuft)
' An dieser Stelle ist jetzt eine Periode beendet, also Timer stoppen und auslesen
SYS NO_INT:SYS GET_FTIMER ' WERTE DER TIMER SICHERN
VALUE=TIMER*20
' Dann die Timer wieder vor sich hin laufen lassen
SYS YES_INT
Dummerweise ist bei gleicher Periodendauer der Wert VALUE mal richtig oder mal falsch, nämlich genau um eins zu hoch. Das sind dann 20ms zuviel.
Wenn ich einfach einen Zähler bei ON und OFF mitlaufen lasse:
'------------------------------------------------------------------
' OFF Zeit
#OFF
i = i + 1
if port8 = OFF then goto OFF ' Solange wie port 8 OFF ist bleibe ich in der Schleife (der Timer läuft)
# Wenn port8 auf ON gewechselt hat, gehts weiter
'ON Zeit
#ON
z = z + 1
if port8 = ON then goto ON 'Solange wie port 8 ON ist bleibe ich in der Schleife (der Timer läuft)
'-------------------------------------------------------------------
... dann sind die Werte fĂĽr i und z immer gleich (bei gleicher Periodendauer). Na gut, sie schwanken um 1, aber das ist wirklich pillepalle im Vergleich zu 20ms.

Was mache ich hier falsch?

Gruss,
Uwe




 Antwort schreiben

Bisherige Antworten:

Re: Zeitmessung (von Kay - 7.03.2005 9:01)
Re: Zeitmessung (von ManfredW - 6.03.2005 18:23)