Hallo,
90 Grad versetzte Gabellichtschranke. Ein Kanal auf einen Interrupt, flankengetriggert.
Im Handler den zweiten Kanal pollen und schauen ob er H oder L ist. Dann hast du die Richtung.
Mit der Ermitteln der Geschwindigkeit ist es nicht getan. Wenn es richtig sein soll brauchst
du einen Zähler, 16 Bit reichen für ca. 45 Minuten. Das sieht dann so aus:
mctr: jb MLOCK,blabla
push PSW
mov C,T0
push ACC
xch A,MCL ;R6 zur Bearbeitung in Accu und Accu sichern
jc vor ;Wenn gesetzt vorw„rts
setb BACK ; Master läuft rückwärts
dec A ;Sonst rückwärts
cjne A,#0FFh,ende ;Falls A <> 255 berspringe Dec R7
dec MCH
sjmp ende
vor: clr BACK ;Master läuft vorw„rts
inc A ;Vorwärts;
jnz ende ;Falls A Null geworden (Carry) incrementiere R7
inc MCH
ende: xch A,MCL ;Accu wieder in R6, Accu wiederherstellen
mov MSP,CTR1
mov CTR1,#0FFh ; Zähler für Masterspeed zurücksetzen
mov CTR1V,#150 ; Vorhaltewert laden
acall diff
pop ACC
pop PSW
blabla: setb EX0 ;Interrupt wieder freigeben
reti
Auf AVR ist das etwas einfacher. Da kannst du den Hardwarezähler hernehmen und auch regelmäßig
ins EEPROM laden, damit beim Abschalten nix verloren geht.
Der Regelalgo ist nicht ganz trivial. Der Projektor jittert ständig und du willst nicht jede
Änderung weitergeben. Also erstmal warten bis die Differenz groß genug ist. Dann langsam nachregeln.
Vermutlich ist das beim nem digitalen Audioplayer recht einfach, weil es keine mechanischen
Einflüsse auf Slave Seite gibt. Trotzdem, das ist anspruchsvoll. Aber was wäre das Leben ohne
Herausvorderungen.
Michael