Hallo Leute,
ich habe ein Mega Problem.
Ich habe hier alte Uhren rumliegen mit "Schrittmotoren" ( heißt diese
müssen um einen Takt zu machen, immer umgepolt werden)
Damit das ganze auch sinn macht, diese logisch anzusteuern, haben die
auch eine Lichtschranke verbaut. (Die Zahnräder des Uhrwerks haben
unterschiedlich breite Stege, somit kann ist zu unterschiedlichen
stellungen die Lichtschranke länger oder dementsprechend kürzer
unterbrochen.
Die Funktion der Uhr sollte folgender maßen sein:
Man lege die Batterie ein, der Sekundenzeiger läuft los im schnellgang
und die Lichtschranke ist eingeschalten und erfasst eine große Pause von
ca. 500ms, dann sollte der Sekundenzeiger die letzten Schritte bis zur
12 Uhr position noch im langsameren Gang machen.
Steht der Sekundenzeiger läuft automatisch der Minuten/Stundenzeiger los
und dieser bewirkt 3 große Zeiten bei der Lichtschranke.
5 sekunden, 10 sekunden und 15 sekunden, nach den 15 sekunden wird mit
einer bestimmten anzahl schritten, die 12 Uhr position dann auch
erreicht.
Das habe ich soweit auch Programmiert bekommen in Bascom, jedoch bin ich
immer davon ausgegangen, wenn die Zeiger alle auf der 12 Uhr position
schon stehen. Stelle ich jetzt die Zeiger unterschiedlich ein, und z.b.
die Lichtschranke ist jetzt schon unterbrochen (was sie bei 12 Uhr
position nicht ist) dann läuft mein Referrenzlauf nicht mehr.
Ich weis nicht wie ich es hinbekomme, das vorab die Lichtschranke
abgefragt wird, und erst dann bei lichtdurchlass die referenzfahrt
ausgelöst wird.
Sinnvoll wäre es, wenn ich jeden einzelnen Schritt (impuls) den der
Motor bekommt, auch erfasse und dazu passend die Lichtschranke abfrage,
denn beim Sekundenzeiger z.b. habe ich ja 60 Schritte und die
Lichtschranke verhält sich dazu: 0001 0001 0001 0001 0001 0001 0001 0001
0001 0001 0001 0001 0001 1111 0010
beginnden von 0 uhr auf 12 uhr fahrend.
Das Uhrwerk ist mit 2 Motoren ausgestattet, daher ist auch der
sekundenlauf extra.
Wie würde man es hinbekommen, ersteinmal überhaupt die Impulse sinnvoll
anzusteuern, ich habe dies zurzeit so gemacht: (mit hilfe vom Timer0)
1 | Sekundentakt:
|
2 | If Sekunde = 10 Then
|
3 | Portb.1 = 0
|
4 | Portb.2 = 1
|
5 | Elseif Sekunde = 20 Then
|
6 | Portb.1 = 1
|
7 | Portb.2 = 0
|
8 | Elseif Sekunde = 30 Then
|
9 | Sekunde = 10
|
10 | End If
|
11 | Return
|
Aber in diesem fall werden schon 2 Impulse /Schritte gemacht.
Wie kann ich das anstellen, das ich im Hauptprogramm immer nur einen
Schritt aktiviere, dann die Lichtschranke Abfrage, diesen wert mit einem
vorgegebenen Bit code vergleichen lasse, wenn diese ubereinstimmen, wird
ein flag oder so gesetzt und das weiterführen mit dem nächsten bit code.
weil wichtig sind ja wie oben zu sehen, nur die letzte 3 4er Gruppen.
Und sobald diese übereinstimmen, mit einem vorgabewert, sollte die
Sekunde stehen bleiben.
Und wie ist es machbar, das ich überhaupt ersteinmal die Lichtschranke
abfrage, denn wenn die Lichtschranke unterbrochen ist, und die Sekunde
ihren referrenzlauf durchführt, erkennt sie die bit folge ja nicht.
Also muss erst einmal der Minuten/Stunden Motor angesteuert werden, mit
z.b. 30 Schritten und wenn dann die Lichtschranke licht durchlässt, dann
sollte die sekunde die referenz ausführen, dann wie oben beschrieben der
weitere ablauf.
Ich hoffe ich habe mich etwas verständich ausgedrückt, falls nicht bitte
ich um entschuldigung und bei noch offenen fragen bitte melden.
ich danke euch im voraus für etwalige hilfe.
grüße