Про сенсор от сканера и LPT порт.
Данная страница посвещена описанию принципа работы и применению ПЗС сенсора от сканера.

Попался мне недавно б/у шный сканер AGFA SNAPSCAN e42. И решил Я посмотреть как он устроен...
Более всего меня интересовало то, как собственно сканер "видит". Разобрав его Я обнаружил, что идентифицировать тип используемого ПЗС сенсора не так то просто, потому, что он впаян в плату а сверху на нём какая либо маркеровка отсутствует.
Однако на плате с сенсором было написано "KOTA II CCD PCB(NEC)"
При чём тут NEC ?
Уж не их ли это ПЗС ?
Полазив по их сайту Я обнаружил, что по количеству ножек, расположению выходов и тактовых сигналов подходит только mPD8871.
Вот описание :mPD8871.pdf

Схематически структура его показана тут:

В датчике имеется 3 одинаковых канала для красного, зелёного и синего цветов.
Как можно видеть на рисунке все 3 канала полностью идентичны.
Для тех, кто не в курсе : общий принцип работы ПЗС такой: информация из массива датчиков переностися в здвиговый регистр, из которого (в аналаговом виде) поэлементно считывается по внешнему тактовому сигналу.
Расположение выводов показано тут:



Схема подключения датчика в "эксперементальной установке" показана тут:



А вот как выглядят управляющие сигналы в цикле чтения строки (в эксперементе они формировались программно LPT портом):

Вот программа, которая использовалась для формирования сигналов (запускать надо из DOSа)
begin
asm cli end;

port_old_val:=$03;
port[$0378]:=port_old_val;

repeat


port_old_val:=port_old_val or $04;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port[$0378]:=port_old_val;
port_old_val:=port_old_val and $FB;
port[$0378]:=port_old_val;

for i:=0 to 10000 do begin

port_old_val:=port_old_val or $01;
port_old_val:=port_old_val and $FD;
port[$0378]:=port_old_val;

port_old_val:=port_old_val or $02;
port[$0378]:=port_old_val;

port_old_val:=port_old_val and $FE;
port[$0378]:=port_old_val;

end;


until false;

end.


А вот и сама "эксперементальная установка":


Для проверки "видения" использовалась вот такая бумажка


И вот, что увидел сенсор:

Для ввода в компьютер потребовался бы АЦП и использовать LPT порт уже бы не удалось из-за недостаточного количества входных линий и слишком низкого быстродействия.
Чтение из сдвигового регистра надо производить максимально возможно быстро т.к. в процессе хранения в нём аналоговых данных постепенно накапливается ошибка, а из вышепреведённого примера видно, что быстрее порт работать уже не заставиш т.к. задержки и так отсутствуют.

Тоесть оптимально было бы использовать микроконтроллер для "быстрого" чтения всей строки в память и последующей передачи в компьютер с произвольной скоростью по произвольному интерфейсу.


(C)2006 O-D-V
>>>dima_2001_2001{NOT_FOR_SPAM}fromru.com
>>>http://o-d-v.no-ip.org
>>>ftp://o-d-v.no-ip.org