
Потребность в данном устройстве возникла у меня при сборке ретрокомпьютера Pentagon-128, когда компьютер, выполненный целиком на микросхемах мелкой логики (коих на плате пентагона порядка сотни корпусов) отказался работать после включения. После увлекательного поиска неисправности было обнаружено пять убитых микросхем. Что и побудило сделать тестер. Аппаратная часть разрабатывалась со следующими акцентами:
Видение программной части:
В качестве экрана взят дисплей от телефона Nokia 5110. В качестве микроконтроллера тут идеально было бы использовать ATMega128 - памяти и свободных пинов хватает на все, но, увы - не DIP-корпус.
В итоге был выбран ATMega16 с перспективой замены на ATMega32 в будущем, по мере разрастания прошивки. В связи с нехваткой свободных выводов пришлось совместить две кнопки и линии RX/TX UART-а с выводами сокета тестируемой микросхемы. В результате 1) две кнопки навигации недоступны для микросхем в корпусах DIP-24 и DIP-28 2) UART недоступен для микросхем DIP-28. 3) 14-й вывод DIP-28 подключен на землю. Ограничения не сильно существенные, т.к. одной кнопки вполне достаточно для запуска теста, а микросхемы в DIP-28 тестируются не часто, и UART с ними не обязателен.
Схема того, что получилось:
Токоограничивающие резисторы R3 - R29 добавлены для того, чтобы обезопасить МК и тестируемую МС от возможных высоких токов, т.к. при тестировании тип микросхемы определяется перебором всех известных микросхем по базе. В принципе, эти резисторы можно исключить из схемы. Если планируется проверять микросхемы серии К155, то лучше исключить резисторы идущие на выводы питания - 7, 8 и 16.
Диоды D1 - D10, установлены для согласования уровней МК (5В) с уровнями дисплея JP1(3.3В). В принципе, их тоже можно исключить (или уменьшить их количество), т.к. опыт показывает, что экраны 5110 могут нормально работать с уровнями +5В. Но я рисковать не стал.
Частота кварцевого резонатора выбрана из соображений обеспечения максимальной безошибочной скорости обмена по UART. Если подключение по UART не планируется, можно установить кварц на 16 МГц (перекомпилировать прошивку при этом нет необходимости).
Сейчас в базе тестера 57 следующих типов микросхем:
ЛН1,HC04,ТЛ1; ЛН2,HC05; ЛА3, ЛА23,HC00; ЛА11, ЛА13; ЛА8; ЛА1, ЛА6, ЛА16, ЛА22; ЛА7; ЛА4, ЛА24; ЛА10; ЛА2; ЛА18; ЛЕ1,ЛЕ5,ЛЕ6,ЛЕ10; ЛЕ11; ЛЛ1, ЛЛ4, HC32; ЛИ1, ЛИ8, HC08; ЛИ2; 155ИД1; ИД4; ИД7,HC138; ТМ2,HC74; ЛП9; ТМ8; ТМ9,HC174; 155ЛП11; ИР23,HC374; ТВ9; ИЕ5; ИЕ7; ИЕ2; КП2; КП11; КП13; КП7; АП3; АП4; АП5; ИР16; ИР34; ИЕ10,HC161; ИЕ18; ИЕ19; HC541; ИР37,HC574; ИЕ13,HC191; HC126; КП12,HC253; КП14; ИР22; ИР33; ИР38; ИР9; ИР26; КП17,КП19; ЛП5,HC86; АП6,HC245; ИП7; HC166
В главном меню устройства есть три режима тестирования:
Исходники проекта можно взять тут: https://github.com/trol73/avr-ic-tester
Для написания тестов использован простой язык и скрипт компилятора на питоне. Сами тесты хранятся в файле data.ic. Компилятор (запускается compiler.py) формирует файл data.h с данными тестов.
Пример теста для микросхемы 555ТМ2 (импортный аналог 74HC74).
CHIP[14] 'ТМ2,HC74' POWER: -7 +14 IN: 4, 2, 3, 1, 10, 12, 11, 13 OUT: 5, 6, 9, 8 TEST: 00010001 => 1010 TEST: 01110111 => 1010 TEST: 10001000 => 0101 TEST: 11101110 => 0101 SET: 11011101 PULSE: +3 TEST: 1001 PULSE: +11 TEST: 1010 SET: 0-> 2, 12 PULSE: +3 TEST: 0110 PULSE: +11 TEST: 0101
В первой строчке указывается корпус микросхемы (количество выводов в квадратных скобках) и её возможные названия.
Вторая строка - определение выводов питания, эти пины будут сконфигурированы на выход, на 7м пине будет всегда установлен низкий уровень,
на 14м - высокий.
Далее перечисляются входы (IN) и выходы (OUT) микросхемы, пины будут сконфигурированы соответственно. Если микросхема имеет
выходы с открытым коллектором, то перед ними следует указать символ @ чтобы включить подтяжку к питанию.
Как, например, для 555ЛН2:
CHIP[14] 'ЛН2,HC05' POWER: -7 +14 IN: 1, 3, 5, 9, 11, 13 OUT: @2, @4, @6, @8, @10, @12
Команда SET устанавливает логический уровень на отдельных (или всех) пинах-выходах. Возможны две формы описания команды: если надо изменить сразу уровни на всех входах (тут длина двоичного числа обязательно должна быть равна количеству входов МС)
SET: 11011101
если надо изменить уровень на отдельных пинах (можно менять как на входах, так и на выходах)
SET: 0 -> 3, 11 ; 1 -> 4, 2, 1, 10, 12, 13
В данном примере полная и сокращенная команды дают одинаковый результат
Команда TEST проверяет состояния пинов, для нее, аналогично, возможны две формы записи:
если надо проверить состояния всех выходов
TEST: 1010
либо, возможна проверка состояний только отдельных пинов (как выходов, так и входов)
TEST: 5, 9 -> 1 ; 6, 8 -> 0
Команды SET и TEST можно объединить в одну команду
TEST: 00010001 => 1010
которая эквивалентна последовательности
SET: 00010001 TEST: 1010
В командах SET и TEST можно использовать символы двоеточия для разделения битовых масок и лучшей удобочитаемости.
Например, эти команды эквивалентны:
SET: 00010001 SET: 0001:0001 SET: 0001:00:01
Для подачи импульсов служит команды PULSE
PULSE: +3
подает положительный импульс на 3-й пин тестируемой МС (т.е., сначала устанавливает на выводе низкий уровень, затем меняет его на высокий).
Команда
PULSE: -5
подает отрицительный импульс на 5й пин тестируемой МС (т.е., сначала устанавливает на выводе высокий уровень, затем меняет его на низкий).
Для проверки микросхем, у которых некоторые пины могут работать и как входы, и как выходы в зависимости от состояния, служит команда CONFIG.
Пример ее использования для микросхемы 555АП6:
CONFIG: 18, 17, 16, 15, 14, 13, 12, 11, 1, 19 -> IN ; 2, 3, 4, 5, 6, 7, 8, 9 -> OUT
Исходники проекта на гитхабе: https://github.com/trol73/avr-ic-tester
Фьюзы можно прошить следующей командой (если использовать avrdude в связке с usbasp):
avrdude -U "lfuse:w:0x7F:m" -U "hfuse:w:0xDF:m" -U "lock:w:0x3F:m" -s -c usbasp -p m32 -V
Если используется другой программатор, то фьюзы на картинке: