Тестер микросхем на ATMega32

Тестер микросхем на atmega

Потребность в данном устройстве возникла у меня при сборке ретрокомпьютера Pentagon-128, когда компьютер, выполненный целиком на микросхемах мелкой логики (коих на плате пентагона порядка сотни корпусов) отказался работать после включения. После увлекательного поиска неисправности было обнаружено пять убитых микросхем. Что и побудило сделать тестер. Аппаратная часть разрабатывалась со следующими акцентами:

  1. Простота конструкции: минимум деталей, максимально простая печатная плата для повторения
  2. Микроконтроллер в DIP-корпусе (легко заменить если что вдруг..)
  3. Возможность управления по UART
  4. Возможность тестировать микросхемы до DIP-28 включительно. Следовательно, МК должен иметь достаточно свободных выводов.
  5. Графический экран и минимальный набор кнопок для экранного меню

Видение программной части:

  1. Прошивка должна позволять тестировать микросхемы мелкой логики с отображением результатов на экране.
  2. Режим тестирования памяти 565РУ5, 565РУ7 и импортных аналогов.
  3. Так же устройство планируется использовать при макетировании других устройств для связи с ПК. Т.е., рулить пинами DIP-сокета с комьютера. Идея такова: есть система команд, которые девайс умеет выполнять (например, "настроить пин на ввод/вывод", "прочитать уровень пина", "изменить уровень пина", "подать импульс" и т.д.). Программа из таких команд загружается в память МК по UART и выполняется. При этом, помимо простого "дергания" пинов можно реализовать команды работы с интерфейсами I2C, 1-wire, SPI и т.д. и использовать девайс в качестве адаптера для реализации I2C/1-wire/SPI терминала. Например, чтобы подключить какую-нибудь микросхему / датчик и поиграться с логикой ее работы прямо с компьютера, без перепрограммирования микроконтроллера.
  4. Возможность управлять выводами сокета вручную автономно, без компьютера.

В качестве экрана взят дисплей от телефона 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

В главном меню устройства есть три режима тестирования:

  1. Проверка и автоопределение подключенной микросхемы.
    Тут все просто - вставляем микросхему (ее первый вывод всегда подключается к первому выводу сокета), жмем кнопку "Test" и видим на экране название проверяемой микросхемы (или список возможных названий по ГОСТ и импортных аналогов) либо "Unknown", если микросхема неисправна либо неизвестна тестеру. Тестер прогоняет все тесты и отображает названия микросхем, для которых тесты выполнились.
    Автоопределение микросхемы
  2. Тест памяти 565РУ5 и 565РУ7
    Примерно то же самое, но для МС памяти. Тип микросхемы распознается автоматически, на экране отображается карта результата 8x8 ячеек. Успешно проверенные ячейки рисуются квадратом, сбойные - диагональным крестиком. Например, на фото ниже обнаружились четыре сбойные области. Справа показывается маркировка МС.
    Тестирование памяти 565РУ5
  3. Ручной тест микросхем
    Сначала выбирается количество выводов МС - DIP-8, DIP-14, DIP-16 или DIP-20. Затем, на экране отображаются состояния выводов для этого корпуса. Каждый пин можно настроить как вход либо как выход. Если стрелка идет к корпусу микросхемы, то этот пин работает на выход (и подключается ко входу тестируемой МС). Если стрелка идет от корпуса, то пин работает как входный (и подключается к выходу тестируемой МС). Кнопками вверх/вниз можно перемещаться между пинами либо выбрать режим (выбор делается кнопкой Test, название текущего режима отображается на экране) - "setup" или "out". В режиме Setup производится конфигурирование пинов на ввод или вывод. В режиме Out устанавливается состояние пинов выходов либо включается подтяжка к питанию для пинов-входов (нужна, например, если МС имеет выходы с открытым коллектором). Состояния задаются установкой чекбоксов у выводов. Текущий логический уровень на выводе можно посмотреть по его стрелке - если стрелка пустая, то уровень низкий, если закрашена - уровень высокий.
    Ручной режим тестирования

Исходники проекта можно взять тут: 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

Если используется другой программатор, то фьюзы на картинке:

Фьюзы тестера

DownloadСкачать прошивку
DownloadНабор прошивок с разной контрастностью экрана, v0.5
DownloadНабор прошивок с разной контрастностью экрана, v0.6
Рейтинг: 
0
Голосов еще нет