12-09-2020, 05:38 PM
Francis (Spot Wobble ) came over this afternoon with some 405 line VHS recordings. The idea was to evaluate my 405 to 625 converter on more awkward signals. Glad to say that the H lock was excellent. I don't have too much control over that. The V lock was suffering because various splats on the signal were being interpreted as V sync. I do the V sync separation myself from digitally sliced sync. I'll need to beef up the logic so that it only accepts a V sync pulse in a tight window after the previous one. Either that or invent some kind of vertical flywheel sync. One trick will be to ensure it can lock in the first place. Another trick might be to do a sort of integrator which will only flag a V sync after a few broad pulse have been identified. This might fail on a CV2000 recording which I think has a single long field pulse.
The existing V sync separator is the digital equivalent of monostables. It has no real tolerance for iffy signals.
The existing V sync separator is the digital equivalent of monostables. It has no real tolerance for iffy signals.
Code:
-- VS_RUNNING is pulse less than half line
if SEPARATED_SYNC_EDGE and not VS_RUNNING then V_SEP_COUNT <= "111111111";
elsif V_SEP_COUNT = "0000000000" then V_SEP_COUNT <= "000000000";
else V_SEP_COUNT <= V_SEP_COUNT -1;
end if;
if SEPARATED_SYNC_EDGE then VS_RUNNING <= true;
elsif V_SEP_COUNT = "000000000" then VS_RUNNING <= false;
else VS_RUNNING <= VS_RUNNING;
end if;
if V_SEP_COUNT = "000000001" and SEPARATED_SYNC then V_SEP <= true;
elsif V_SEP_COUNT = "000000001" and not SEPARATED_SYNC then V_SEP <= false;
else V_SEP <= V_SEP;
end if;
V_SEP1 <= V_SEP;
-- FS_RUNNING is pulse greater than half line
if SEPARATED_SYNC_EDGE and not FS_RUNNING then F_SEP_COUNT <= "1111111111";
elsif F_SEP_COUNT = "0000000000" then F_SEP_COUNT <= "0000000000";
else F_SEP_COUNT <= F_SEP_COUNT -1;
end if;
if SEPARATED_SYNC_EDGE then FS_RUNNING <= true;
elsif F_SEP_COUNT = "0000000000" then FS_RUNNING <= false;
else FS_RUNNING <= FS_RUNNING;
end if;
if V_SEP and not V_SEP1 then F_SEP <= to_std_logic(FS_RUNNING);
else F_SEP <= F_SEP;
end if;
www.borinsky.co.uk Jeffrey Borinsky www.becg.tv







