Тем временем, мне удалось разобраться с управлением индикаторным модулем (
Часть 1,
часть 2).
На большой дополнительной плате помимо ПЛИС находятся также 3 микросхемы статической памяти UM61256A. Понятно, что почти наверняка в них хранится изображение, выводимое на панель. Так и оказалось: если вытащить одну из микросхем, в случайном изображении пропадает один из цветов.
У каждой МС памяти были подключены выводы шины адреса (у всех трёх параллельно), выводы шины данных с 2-го по 7-й биты (т.е. 6 из 8 ), и выводы OE и WE для управления записью/чтением (также параллельно у всех МС). Таким образом, имеется память с пятнадцатью битами адреса и восемнадцатью (по 6 на каждый цвет) битами данных.
Вооружившись
логическим анализатором, я начал исследовать сигналы на ножках памяти. Довольно быстро я обнаружил, что при низком уровне на "особенном" входе память находится в режиме записи, причём данные на 15 входах памяти соответствуют сигналам на остальных 15 входах маленькой доп. платы. На трёх же оставшихся входах (в каждом цвете - по одному) всегда был фиксированный уровень.
Для проверки того, что на входе записи WE просто присутствует уровень с "особенного" входа, я подал на "особенный" вход импульсы. Оказалось, что там не всё так просто. При низкой частоте на "особенном" входе память в режим записи не переводилась. А вот при высокой - переводилась, но тоже весьма хитро. Если подать на "особенный" вход импульсы, то запись данных в память происходит по каждому фронту на "особенном" входе (теперь пора назвать его "тактовым"!), но записываются данные только по 64-м первым адресам. Дальше 64*9 фронтов просто игнорируются платой, потом опять 64 раза идёт запись (следующие 64 адреса), затем снова пропуск длины 64*9, и т.д. На первый взгляд, совершенно не ясно, зачем это нужно.
А вот зачем. На большой дополнительной плате есть 3 разъёма: вход с маленькой платы, выход на панель и ещё один выход, все сигналы которого, кроме одного, повторяют сигналы, приходящие от маленькой платы. На каждом индикаторном модуле также есть разъёмы "Вход" и "Выход". Скорее всего, модули подключались друг за другом (вход следующего в выход предыдущего) в одном столбце большого экрана. Вход каждого столбца был подключен к большой доп. плате, а эти платы, в свою очередь, также были включены цепочкой. Изображение выводилось построчно, при этом первые 64 тактовых импульса предназначались для первого столбца панелей (первая большая плата), следующие 64 - для второго столбца (вторая плата в цепи), и т.д. Всего столбцов было 10, т.е. ширина экрана в пикселях - 640.
В каждом столбце все модули подключены параллельно, никакой зависимости от положения в цепи нет. Для задания адреса модуля служат 4 DIP-переключателя сзади (точнее, как мне кажется, за адрес там отвечают только 3 из них). Если перевести все переключатели в положение ON, данный модуль будет как бы самым верхним (с него начинается развёртка).
Для вывода изображения нужно сделать следующее:
1. В течение примерно 30 мс передать данные о цвете пикселей (5 бит R, 5 бит G, 5 бит B), выдав 640*64*N импульсов на тактовый вход (N - число индикаторных модулей в столбце).
2. Перевести тактовый вход в лог. 0 и подождать примерно 20 мс (не знаю точных границ времени ожидания, не исследовал).
3. Повторить 1-3.
К сожалению, для передачи изображения отведено всего около 30 мс, дальше данные не принимаются. Поэтому нужна довольно высокая частота передачи, и с помощью МК ATMega8, которым я исследую панель, не успеть выдать информацию о всех строках. Нужна более высокая тактовая частота (сейчас 8 МГц).
Вообще-то, хотелось бы избавиться от излишней длины сток изображения. Ведь выводить приходится 640 столбцов, когда их всего 64! Но, скорее всего, эта константа 640 "зашита" в конфигурацию ПЛИС маленькой платы, и изменить её невозможно. Остаётся только изучить обмен данными между большой платой и индикаторным модулем, чтобы полностью избавиться от этих двух дополнительных плат. Ну или взять быстрый МК.