Секретов нет. По каждому фронту импульсов с каждого подкассетника формируется прерывание. В прерывании от правого приёмного подкассетника сбрасывается счётчик (регистр) времени срабатывания Автостопа. В основном цикле программы каждые 10...100мсек этот счётчик инкрементируется. По достижении некого порогового числа (его задаёте сами, чтобы в конце кассеты не срабатывал) срабатывает режим СТОП. Если импульсы от правого подкассетника приходят чаще, чем счётчик успеет дойти до заданного порогового значения, то продолжает исполняться включённый режим, например PLAY.
---------- Сообщение добавлено 11:29 ---------- Предыдущее сообщение было 02:12 ----------
Сообщение от
Turbo_man
каждые 10...100мсек
Решил изменить у себя со 100мсек на 4 мсек. Таков сейчас временнОй дискрет. А то погрешность счёта может доходить до этих самых 100мсек. Ведь обнулять каждым фронтом счётчик 100мсек нельзя.
Вот кусочек кода:
Код:
;это каждые 4 мсек
;-----------------------------------------------------
btfsc FF_MOTOR
goto S_AUTOSTOP
btfsc REW_MOTOR
goto S_AUTOSTOP
btfsc HEAD_PM
goto S_AUTOSTOP
clrf Auto_Stop
goto FIN_AUTOSTOP
S_AUTOSTOP
incf Auto_Stop,f
;-----------------------------------------------------
movlw .150 ;таймер на 600мсек для 1.0х
btfss SPEED_15 ;для скорости 1,5х
movlw .100 ;таймер на 400мсек
btfss SPEED_20 ;для скорости 2х
movlw .75 ;таймер на 300мсек
;-----------------------------------------------------
xorwf Auto_Stop,w
btfss STATUS,Z
goto FIN_AUTOSTOP
clrf Auto_Stop
call SUB_STOP
bsf F_IND_MODE
FIN_AUTOSTOP
;-----------------------------------------------------
---------- Сообщение добавлено 11:45 ---------- Предыдущее сообщение было 11:29 ----------
А это кусок прерывания правого подкассетника TR (левый подкассетник это SR):
Код:
;*****************************************************
OT_TR
btfss PIR1,CCP1IF
goto OT_SR
bcf PIR1,CCP1IF
clrf Auto_Stop
;-----------------------------------------------------
Тут обнуляется регистр.
---------- Сообщение добавлено 14:00 ---------- Предыдущее сообщение было 11:45 ----------
Сообщение от
Turbo_man
Решил изменить у себя со 100мсек на 4 мсек.
Сделал, мне понравилось. Исчезли ложные срабатывания автостопа при переходе "на ходу" с 4,76 см/сек на 9,53см/сек, которые иногда случались.
P.S. Этого оказалось мало. Нужно ещё обнулять счётчик автостопа при смене скорости.
Но и этого тоже мало.
Кроме этого восстановил заводскую функцию выборки петли ленты при закрывании кассетоприёмника с кассетой. Поскольку появились свободные входы у МК.
---------- Сообщение добавлено 14:13 ---------- Предыдущее сообщение было 14:00 ----------
Ещё не удержался и добавил-таки 3-ю скорость перемотки. Пониженную.
Включается автоматически во время перемотки FF и Т1/Т2 >= 2.2, или при перемотке REW и Т2/Т1 >= 2.2.
Но пришлось добавлять электролит 1000/16V в базу регулирующего транзистора как выше написал. Иначе возникал "дребезг" от периодического вкл/выкл этого режима из-за отсутствия усредения значений Т1 и Т2 (делать этого не стал нарочно, т.к. есть минусы от этого).
Социальные закладки