Step 7 Impulse

xXyYzZ

Level-1
Beiträge
67
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich steh im Moment etwas auf dem Schlauch. Ich brauche alle 250ms einen Impulse, den kriege ich auch ohne Problem hin, aber:

0000ms: Merker 1
0250ms: Merker 2
0500ms: Merker 3
0750ms: Merker 4
1000ms: Merker 1
1250ms: Merker 2
1500ms: Merker 3
1750ms: Merker 4
usw...

Wie setze ich das am Besten um?

Danke!
 
Hallo,
du könntest z.B. einen Zähler mitlaufen lassen (der von dem Timer-Impuls getriggert wird) und dann entsprechend (über einen Vergleich) den passenden Merker zuweisen.
Ist der Zähler > 4 dann setzt du ihn wieder auf 1 (z.B.).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hängt eni wenig davon ab wie der Impuls gebildet wird...

Ich würde aus dem Puls eine Flanke machen und mit der weiterarbeiten -

Code:
UN Flanke
SPB NiLO
L Merkerwort
SLW 1
T merkerwort

UN Merker 1
UN Merker 2
UN Merker 3
UN Merker 4
S Merker 1

NiLo: Nop 0
 
Ich hab eine einfache Lösung gefunden :) Der Zählwert einer Einschaltverzögerung wird einfach mit dem gewünschten Zeitwert verglichen :)
 
Ich hab eine einfache Lösung gefunden :) Der Zählwert einer Einschaltverzögerung wird einfach mit dem gewünschten Zeitwert verglichen :)

Was ist denn daran einfach? :confused:
Da musst du ja die Zeitwerte aufaddieren oder deinen Zählwert dividieren.

Also der Vorschlag von oben mit dem Zählen des Impulses ist einfacher.
Wenn du willst dann kannst es noch über ein Schieberegister machen. Würde noch einfacher sein.

Edit: dtsclipper hat es oben schon vorgemacht. ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfachste weg:
sind 250ms+Zyklus (wenn er nicht stört)

set
= ton_stat.in

u ton_stat.Q
FP Flanke_Stat
SPBN NiLO
L Merkerwort
SLW 1
T merkerwort

UN Merker 1
UN Merker 2
UN Merker 3
UN Merker 4
S Merker 1

clr
= ton_stat.IN
NiLo: Nop 0

call ton_stat
in:=
PT:=T#250ms
Q:=
ET:=
 
Oder OB35, dann braucht er weder Timer, noch Flanke, noch Sprung - sondern nur diesen Ausschnitt (und zeitlich passender wird's auch noch):
Code:
[FONT=Courier New]L    #Merkerwort
SLW  1
T    #Merkerwort

UN   #Merker 1
UN   #Merker 2
UN   #Merker 3
UN   #Merker 4
S    #Merker 1[/FONT]


@Fanta-Er,
150 Beiträge und noch nicht den CODE-Button gefunden?
;) :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist bei weitem kein einfaches Problem !
Die OB1 Zykluszeit interferiert mit dem Timer (re-)start Perioden ... also wenn die 4 Merker ganz genau Taktmerker-artig sich genau nach 250ms abwechseln sollen ... wüsste ich nicht wie es auf jedem Fall gehen würde ... :lol:

PS: Stell dir vor du hast unregelmäßige OB1 Zykluszeiten (oder regelmäßig aber prim zu 250ms) , was passiert dann ? Die/der Timer wird/werden nicht unabhängig von OB1-zeit gestartet/gelesen ... usw
:confused:

?ist OB35 immer eine Lösung? ;)
 
Zuletzt bearbeitet:
die zeitabweichung ist beim messen und auch bei rampenfunktionen immer ein problem. es gibt IMMER zeiteinflüsse. es kommt auf die aufgabe(anwendung) und der hardware an.
um ganz genau arbeiten zu können reicht der ob35 noch nicht einmal aus.

in meinem beispiel ist es richtig, dass die zykluszeit einen einfluss auf die zeit hat. bei einer vollen 312er cpu mit vielen a-zyklischen aufrufen wird die zeit relativ weit schwanken.
zykluszeit zwischen 40-150ms
extrem beispiel bei 150ms => Letzte zeitauslesen des timers bei 249ms, im nächtsten zyklus true = 250+149 = 399ms. 399 + 399 + 399 + 399 = 1596ms soll = 1sec
beste beispiel bei 50ms => Letzte zeitauslesen des timers bei 200ms, im nächtsten zyklus true = 250ms. 250 + 250 + 250 + 250 = 1000ms soll = 1sec. höchste differenz beim letzten merker 596ms.
stört es bei verschieden blinktakten für lampen? nö. stört es bei berechnungen einer rampe? aber gewaltig.

pc477
mindestzykluszeit auf 10ms und programm läuft in diesen rahmen
beispiel bei ungüstigen fall 10ms => Letzte zeitauslesen des timers bei 249ms, im nächtsten zyklus true = 250+ 9 = 259ms. 259 + 259 + 259 + 259 = 1036ms soll = 1sec
beispiel bei güstigen fall 10ms => Letzte zeitauslesen des timers bei 240ms, im nächtsten zyklus true = 250ms. 250 + 250 + 250 + 250 = 1000ms soll = 1sec. höchste differenz beim letzten merker 36ms.

das große problem ist dabei, dass du ja irgendetwas vergleichen/berechnen willst (analogwert, peripheriegeräte usw.). hier hast den bus ( z.b. rückwandbus ca. 187kbs/s, pn <10ms usw.) und auch die aktualisierung der einzelnen geräte. die meisten analogbaugruppen habe z.b. eine interne aktualisierung von >40ms. die dürftest du hier auch mit einrechenen.

wenn jetzt zu viel in den ob35 gepackts wird, schnellt deine zykluszeit nach oben. du musst nähmlich alle relevanten werte dort programmieren. es kommt immer darauf an was ich machen will. so sehe ich es. keiner weis was der te machen will. in der praxis sind die schwankungen kleiner und somit ist die reproduzierbarkeit der messungen/berechnungen besser. du kanst nicht immer die 249ms treffen (2x150ms >250ms).
 
Zuletzt bearbeitet:
Zurück
Oben