Итак, я составил некий алгоритм и написал программку. Получилось не слишком культурно, оптимизации там нет вообще, подпрограммы не использовал, а не мешало бы… Грубо говоря, программа состоит из 6 похожих частей, точнее из 3 пар. Первой парой (опрос двух линеек, поочередный) определяется DARK, второй – MAXRAY, а третья пара уже является циклом по сбору и выдаче номеров точек. Работа проверялась в Proteus’e 7.2 SP6. Настройки, при которых происходит эмуляция («обход» timestep) приложил. Для тех, кто захочет посмотреть, поясню принцип и некоторые моменты.
Слева, до резистора R11/R12 идет некое подобие эмуляции аналогового сигнала, замешанное на Pattern Generator’ах. Смысл: при отсутствии сигнала на выходе у нас должно быть около 1 В, при появлении – около 1,01 В. При наложении лучей – чуть больше. Как задать «лучи» – при запуске эмуляции можно будет пролистать оба рабочих поля этих генераторов. Ставим в любом месте «полоску» (внизу щелкаем на 00, вводим 31(D) или 0x1F(H)). На выходе таким образом появится 1,01 В. Если поставим 255(D) или 0xFF(H), то будет больше, этим я подразумеваю наложение лучей – номер такой ячейки дублируется на выходе. Всего лучей фиксируется 4, больше мне не нужно
Далее уже идет реальная реализация. На Q1(2), R9(10), R11(12) происходит «преобразование» напряжения в удобное для обработки. И еще задействуем одновременно индикацию на светодиодах. Как видно, АЦП будет работать с напряжением на коллекторе транзистора (подразумевался обычный КТ-315). Т.е. на базе у нас будет где-то 0,95-1,05 В, на коллекторе соответственно – 2,53-1,35 В, регулируем подбором R11(12). Должно быть не выше 2,56 В, т.к. это уже идет опорное на АЦП. Ну а вообще те пределы с запасом, на самом деле 1 В и 1,01 В на базе дают 2,01 В и 1,89 В на коллекторе. В принципе то, что я и хотел (см. пост выше).
Дальше в принципе все ясно итак

Микроконтроллер, светодиоды для индикации, тумблер для смены режимов. Как запускать? По включению загорается красный светодиод. Далее переводим тумблер SW2 в нижнее положение, т.е. как бы выключаем свет. Переводим тумблер SW1 также в нижнее положение, происходит 10-кратный опрос линеек, выясняем DARK. Загорается первый желтый светодиод. Далее «включаем» свет путем перевода тумблера SW2 вверх. Потом также переводим тумблер SW1 вверх. По аналогии происходит 10-кратый опрос ячеек, получаем значение MAXRAY (следим за тем, чтобы в этот момент лучи не пересекались). Загорается второй желтый светодиод. И далее идет цикл по опросу ячеек. Выдача идет на Virtual Terminal.
Теперь скорее ремарка для тех, кто столкнется с Proteus, Virtual Terminal и ATmega8. Не работает? Хотя нет, стойте… Какие-то зюквочки выводит на экран! Шрифт надо поменять… На том самом виртуальном терминале, запускаем эмуляцию и на окне терминала правой кнопкой – Set Font (я поставил Lucida Console), и еще Hex Display Mode не помешает.
Вобщем в Proteus’e все красиво работает. МК на частоте 2 МГц, АЦП – 250 кГц, такой вышел, имхо, оптимальный вариант по быстродействию и точности. Не 200-50 кГц как рекомендуют, но ближе всего… На 125 кГц уже «не успевает». Итого получается около 15 000 точек за секунду опрос. Я до сих пор даташита не нашел на свою линейку и даже точно не знаю, сколько в ней «точек»

Если прикинуть: 600dpi и длина где-то под 10 дюймов, то выходит около 6000, МК опрашивает 7000, с запасом
А теперь
вопросы по схемотехнической реализации. С целью минимизировать потери 10мВ набор Q1(2), R9(10), R11(12) будет расположен в непосредственной близости у фотоприемников. Далее идет кабель, на данный момент 7-ми жильный. Это CLK, SI1, SI2, питание (2 шт), AO1, AO2. Хотя еще наверняка будет линия на опорное напряжение – тогда уже 8 жильный (витая пара?

), вроде бы Mode на датчиках не задействован. Вобщем ориентация на 8 жил, длина порядка 5-10 метров. Идея с витой парой очень мне понравилась и прочно осела в голове.
Далее идет блок, который будет содержать МК со светодиодами и некий блок питания, еще не думал над ним. Итак, МК обычно ассоциируется с красивой печатной платкой, но вот в моем случае зачем она нужна вообще? Думаю можно с легкостью обойтись без нее, если бы не развязка с ПК. А делать ее нужно на оптопаре, думаю так. И вот здесь вопрос, как лучше поступить? Кабель от коробочки с БП и МК будет ну не больше метра до ПК. Поэтому если размещать оптрон в корпусе с МК, то оформить это все на единой плате будет логично. Но в таком случае увеличивается число жил, идущих к ПК. А если сделать кабель из 2 жил вида земля и TXD, а оптопару с обвязкой поместить в СОМ-разьем? Здесь я не знаю как лучше, тем более я не знаю, сколько именно обвязки будет вокруг оптрона. Широко распространена схема с 2 оптопарами на прием/передачу, см. в аттаче. Но мне ведь нужна именно ровно половина. Кстати говоря, светодиод, символизирующий активность на выходе передачи данных, я просто подцепил на эту линию – никак это не повлияет на нее?
Блок питания. Конечно, теоретически нужен хороший, со стабильным напряжением на выходе, с гальванической развязкой – т.е. трансформатор. Но. Одно но – у меня потребление настолько мизерное, что задействовать трансформатор можно лишь с точки зрения безопасности и этой самой гальванической развязки от сети. Посудите сами – 8 светодиодов (восьмой будет лампочка вида «СЕТЬ»

) – 100 мА, 2 датчика – пусть 200 мА, контроллер – пусть еще 100 мА, да и оптопара, резисторы и прочее – максимум 0,5 А по 5 В. И ради такого городить трансформатор?
Да, еще вопрос по обвязке МК. Выходы AVCC и AREF. Начнем с последнего, прочитал, что при использовании внутреннего ИОН хорошо бы подключить конденсатор на выходе. И все. Какой? По аналогии и с AVCC. Кто занимался – подскажите, что вы использовали.