Собственный опыт изготовления программатора GAL


Здесь нужно включить просмотр картинок.

   Для изготовления программатора я взял за основу : GalBlast 1.2. Этот программатор поддерживает 16V8/A/B/C/D/Z/ZD, 18V10/B, 20V8/A/B/C/D/Z/ZD, 20RA10/B, 20XV10/B, 22V10/B/C/Z, 26CV12/B, 6001/B, 6002B. Выпущеные производителями Lattice,National Semiconductors, STMicrosystems. Работает в среде win 3.1/95.

   Для чтения GAL используется 12 вольт для программирования от 12,0 до 20,5 вольт.
  В исходной схеме используется ЦАП   TLC7524 с защелкой и  LM78S40 импульсный регулятор напряжения.
  Посмотрел на схему и цены на указанные микросхемы и сделал следующие изменения:

ЦАП для генерации напряжения программирования/чтения.

  Так как отечественная промышленность не выпускает 8-битные ЦАП с выходом по напряжению и с защелкой, то я приобрел КМОП регистр   74HC573 (1564ИР33) и на резисторах 10 и 20 килоом собрал R-2R матрицу. Но я плохо прочитал документацию и сделал ошибку:
  74HC573 при высоком уровне на ножке LE (Latch Enable) пропускает входной код на выход, а защелкивает информацию переходом с высокого в низкий уровень.
  В исходной схеме используется ЦАП TLC7524 которая пропускает входной код к преобразователю (DAC) при низком уровне и защелкивает переходом из низкого в высокий.
  Так что пришлось собрать на транзисторе инвертор.
  Если собирать ЦАП на 74HC373/374 (1564ИР22/23) то инвертор не нужен, но расположение ножек не удобное для сборки R-2R матрицы.
  Для развязки от нагрузки я применил ОУ LM358 . Эта микросхема дешевая и имеет отличительную особенность - выходной сигнал может опускаться до 0 вольт. А также спроектирована для однополярного питания от +3 до +32 вольт.
  Если выходное напряжение не опускается ниже опорного в регулируемом стабилизаторе(1,23 вольта, смотри ниже) то стабилизатор закроется и на выходе получим 0.
  Проверял тестером 0.04 вольта.

Переработаная схема ЦАП.

Переработаная схема ЦАП



Напряжение программирования и питание.

  Так как мне не попадались 3.3 вольтовые GAL то переключатель(перемычку) 5/3.3V я исключил.
  Вместо LM78S40 я использовал микросхему RC2951 . Она выпускается разными производителями и может наименоваться LP2951, AS2951, LP2951(118ЕН2) итд.
  Эта микросхема представляет собой линейный регулируемый стабилизатор от 1,24 до 29 вольт при входном напряжении до 30 вольт и токе нагрузки до 100 милиампер. Кроме этого есть специальный вход для отключения выходного напряжения( TTL уровень). Единственный недостаток - обычно корпус узкий SOIC.

   Обычно программируемые устройства не "любят" когда на них подается напряжение программирования, а напряжение питания отсутствует.
   Этот вариант возможен при неисправности программатора или сбое компьютера. По этому я ввел цепь на транзисторе 2N3904 (любой NPN) которая отключает напряжение программирования при пропадании(не установлении) +5 вольт.

   Напряжение питания для устройства я выбрал +12 вольт. Из них вырабатывается +5 вольт для аналоговой части (АЦП и LM358) на микросхеме 78L05(1157ЕН5) и +5 вольт для цифровой части 7805(142ЕН5А) .
   Для выработки напряжения считывания/программирования я использовал микросхему таймера 555 (1006ВИ1) в режиме мультивибратора (частота около 10 килогерц) со схемой удвоения напряжения.

   В принципе можно исключить стабилизатор на 78L05 и поставить RC цепочку 10 ом и 100 микрофарад, схема должна работать.
   Так как основная моя работа - ремонт системных плат и мой рабочий компьютер всегда разобран, то я вытащил +12, +5 вольт из системного блока. Стабилизатор установил только для аналоговой части.

   Регулирование выходного напряжения происходит по исходной схеме. На операционный усилитель подается задающее напряжение от ЦАП (вход -) и выходное напряжение регулятора (вход + ). Разностное напряжение подается на вход Feed Back стабилизатора RC2951. Внутри RC2951 это напряжение сравнивается с опорным 1,23 вольта и регулируется выход.
   То есть RC2951 это ОУ у которой в цепи обратной связи стоит ОУ LM358 и RC2951 в свою очередь является обратной связью для ОУ LM358.
  Таким образом увеличение напряжения ЦАП вызывает увеличение входного сигнала (-) на LM358 и уменьшение выходного сигнала. Это уменьшение воздействует на вход Feed Back RC2951 и она воспринимает это как уменьшение выходного напряжения и увеличивает его.   Увеличение выходного напряжения возвращается на на вход "+" LM358 и уравновешивает увеличение на выходе "-". При уменьшении выходного напряжения ЦАП все происходит на оборот.

   Таким образом замыкается отрицательная обратная связь и система из двух ОУ должна прийти к равновесию.

   Так как быстродействие и коэффициент усиления разный то при малой емкости на выходе стабилизатора возможен колебательный процесс. При большой емкости будет срабатывать защита стабилизатора по току при включении, и время установления напряжения будет велико.
  Я установил танталовый конденсатор на 10 микрофарад и проконтроллировал осцилографом отсутствие колебательных процессов.

   Вместо реле включения питания на программируемую микросхему я применил транзисторный PNP ключ в обратном включении.
Транзистор КТ209К использован для ключа по тому что он имеет низкое напряжение насыщения до 0,4 вольта (обычно 0,2).
Резистор между эмиттером и базой прикрывает транзистор в закрытом состоянии, а через резистор в цепи базы протекает ток на землю в открытом состоянии. Этот ток должен превышать ток потребления программируемой микросхемы поделенный на h21э.
  К сожалению с увеличение тока коллектора h21э падает и в паспорте транзистора он указан на 10 милиамперах. По этому нужно нагрузить ключ током порядка 100 милиампер и подобрать резистор так чтобы напряжение после ключа было >= 4,8 вольт а выключенном состояние откля. Резистор между базой и эмиттером должен надежно прикрывать транзистор.
   Для уменьшения мороки для головы и рук, лучше наверное использовать реле как в исходной схеме, или просто механический выключатель.

Переработаная схема питания.

Переработаная схема питания



Буферная развязка сигналов.


   Теперь развязка остальных сигналов
   В исходной схеме использовались прямые буфера с открытым коллектором 7417 (155ЛП4/1533ЛП17) Как оказалось проблема на рынке купить отечественный аналог. А платить за импортный 40 центов не охота. А вот обычный шинный формирователь типа 74LS245 (1533АП6 ) с удобным расположением выводов есть и стоят 5 центов.
   Применение открытого коллектора оправдывается при программировании 3,3 вольтовых GAL. При этом входные сигналы на GAL равны или чуть меньше напряжения питания. Обычно КМОП допускают подачу на вход напряжения не превышающего питания + 0,5 вольт.
   Я померял выходное напряжение для 1533АП6 и оно оказалось 3,8 вольта. Так что если хотите программировать GAL с питанием 3,3 то можно применить 555АП6 у нее обычно выходное напряжение 3,5 вольта.
   Не задействованые ножки GAL я зашунтировал на землю попавшимися под руку резисторами от 2 до 10 килоом. Садить на землю не рекомендую, так как после снятия напряжения чтения/программирования не задействованные ножки могут оказаться выходами (в соответствии с прошивкой) и при логической 1 пойдет перегрузка выхода по току.


Переработаная схема буфера.

Переработаная схема буфера

   Слева все выходы от порта принтера, справа ножки микросхемы.
Исключение ножка SDOUT - это выход из GAL который подается на вход принтерного порта ACK#.
   Можно еще поставить 3 светодиода+резисторы для индикации напряжения питания на плате, напряжения питания и программирования на чипе .


Настройка программатора.

   Каждый волен выбирать как паять: вначале интерфейс с компьютером, или схемы питания.
   Есть только одна проблема - чем ближе паяльник к компьютеру тем быстрее исправляются ошибки внесенные при сборке, с другой стороны не успел подумать где не работает, а руки уже тянуться за паяльником, исправлять, исправлять...

Для личного пользования лучше собирать монтажным проводом на макетной плате.
Если будете паять проводом который залуживается паяльнико без зачистки (ПЭВТЛК) то лучше его залуживать отдельно а затем впаивать в схему. Чтобы исклюячить массовые не пропаи.

   Я в начале припаял +5 вольт и впаял регистр ЦАПа.
   Подал напряжение, Потрогал - микросхема холодная.

   Припаял сигнальные провода к регистру ЦАПа.
   Подал напряжение, всунул в порт принтера Потрогал - микросхема холодная.

   И так далее. От лени рассчитывать/подбирать делитель выходного напряжения поставил подстроечный резистор.

   Для проверки прохождения сигнала можно использовать программу debug.

   Набираете debug в режиме DOS и вперед.

   "o 378 0" - вывели в порт данных 0.
   "o 378 4" - все биты в 0, бит D2 в 1.
   "i 379" - и на экране входной байт регистра состояния принтера.

   И паяльником, тестером, осцилографом, кусачками по плате пока не заработает :-).

   Для  лентяев  три програмки для тестирования с исходниками на TASM 2.0.
Одна защелкивает код 0 в регистре ЦАП, вторая FF,а третья формирует пилу в течении минуты на выходе ЦАП.


Тестирование в полном комплекте.

После того как программатор собран и потестирован можно попробовать запустить программу при подключенном программаторе.
Я пишу обычно свои программки в Delphi или assemblere. Но вот эта часть из исходного текста на C++ :

   /* set/reset individual pins of LPT port */
   static void SetSTROBE(BOOL on)
   {
   output(lptbase[lpt]+2,on?input(lptbase[lpt]+2)&~0x01:input(lptbase[lpt]+2)|0x01);
   }

   Наводит на мысль что при записи в порт, программа считывает последнее выведенное в порт значение, накладывает на него маску и выводит его в порт обратно.
  На мой взгляд это справедливо если порт находиться в стандартном режиме(не PS/2, EPP,ECP ).    Так что выставтье в Setup BIOS режим порта - стандартный (SPP).

   В остальном программа работает великолепно: сама находит адрес порта, считывает параметры для записи и з чипа, корректно читает и пишет Jedec файл и тд.
   Скомпилировать исходник на Borland С++ версии 4.5 и 5.0 работающий корректно не удалось. В меню появился порт LPT3.
   Мне удалось найти информацию, что исходник написан для WIN 3.1 (по этому под win 98 Debuger не работает ), и копирайт Borland 1990/91 год.
   Так что нужно компилировать (если хотите что-то изменить) На C++ более старой версии.

   Перед первой установкой программируемой микросхемы в сокет, можно вместо программирующеко напряжения подать +12V.
   Таким образом можна настроить чтение из GAL при не работающем/собраном/настроеном ЦАП/регуляторе напряжения.

   После настройки чтения можно настроить ЦАП/регулятор напряжения.
.    Нужно изьять микросхему и восстановить схему программатора.
   В программе Galblast в меню Порт есть пункт Setup. Выберите его и программа защелкнет в ЦАП код предположительно соответствующий 12 вольтам на выходе регулятора. Желательно подкрутить резистором Vpp_MAX к 12 вольтам.
   Движение движка MAX вниз по схеме дает увеличение выходного напряжения на выходе.

   Для проверки я выставил 11,95 вольт (попасть в 12,00 обычным резистором тяжело).
  Я выставил 20,00 вольт и 100 милисекунд время программировани(программа предложила шить в ручном режиме), а за тем измерил выходное напряжение. Оказалось 19,95. Синтервалом 30 минут повторил опыт - 11,97 и 19,89 вольт. Если шить непрерывно и в течении длительного времени то из за теплового дрейфа результат наверное будет хуже. Но это же любительский программатор !
   Можно и накрутить 11 или 13 вольт, программа пересчитает и занесет в реестр Windows этот параметр, и подгонит напряжение к 12 вольтам.


Программы для создания Jedec файла.

   На предыдущей  странице  есть несколько ссылок на программы для создания Jedec файла. Я сходил на сайт Atmel и скачал Atmel-WinCUPL, Version 5.1. В последний раз можно было перейти по этой ссылке.
   Долго я правда не мог понять почему 16V8 понимает, а 20V8 нет. Понимает только 20V8A, да и от русских букв, даже в коментариях, вываливается. А в остальном можна работать

Какие микросхемы удалось потестить.

Выковырял из плат следующие микросхемы: National GAL20V8A, Lattice GAL16V8A, Cypres PALCE16V8 и PALCE20V8, Atmel ATF20V8.

  • National GAL20V8A, Lattice GAL16V8A
    Читаются/пишутся/стираются без проблем.

  • Cypres PALCE16V8 и PALCE20V8   Не читаются/пишутся/стираются.
    Подбор напряжения и длительности импульсов не помогает.
    Вывод: мне попались одноразовые, защищенные от считывания микросхемы.
    Что и подтверждает прочитанную мной информацию: PAL - одноразовые GAL - многоразовые программируемые матрицы.

  • Atmel ATF20V8.
    При напряжении 12 вольт длительности импульсов 10 милисекунд пишеться. При 12 вольтах и 100 милисекундах стирается.


Переработаная схема программатора GAL для принтера HP LaserJet II и выше
   Разархивировать, набрать в DOS "copy mygal_s.hpp prn /b"



Добавление 20 января 2009: схема в формате PDF и PCAD2002

misyachniy@mail.ru



Сайт создан в системе uCoz