Счетное устройство видеоимпульсов на ПЛИС
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Дипломная работа

Счетное устройство видеоимпульсов на ПЛИС

Факультет: Физический Исполнитель: Ларин Кирилл               Владимирович
Кафедра: Радиофизика и электроника Группа: ФФ‑504
Специальность: 013800  –  Радиофизика и электроника Научный  руководитель: ОАО ЧРЗ «ПОЛЕТ», Инженер-конструктор 1 кат.,  Рацебуржинский С.Л.
    Рецензент: Доктор технических наук, ЮУрГУ, профессор,      Родионов В.В.

 

 

Дата защиты:  21 июня 2006г.

Оценка: отлично

 

 

Челябинск – 2006



Содержание

 

Введение................................................................................................. 3

1 Актуальность темы............................................................................. 3

2 Цели и задачи...................................................................................... 5

3 Анализ задания и выбор платформы................................................ 5

1. Составление схемы устройства......................................................... 7

2. Выбор элементов............................................................................... 9

2.1 Выбор ПЛИС. Описание внутренней структуры ПЛИС............... 9

2.2 Компаратор.................................................................................... 13

2.3 Генератор тактовой частоты......................................................... 15

2.4 Индикатор...................................................................................... 16

2.4.1 Описание контроллера HD44780............................................... 17

2.4.2 Подключение ЖКИ-модуля....................................................... 18

2.4.3 Программирование и управление ЖКИ-модуля:..................... 25

2.5 Стабилизаторы.............................................................................. 32

2.5 Программатор ByteBlaster............................................................ 34

2.6 Сборка устройства......................................................................... 35

3. Конфигурирование ПЛИС.............................................................. 36

3.1 Система проектирования MAX+plus II........................................ 36

3.2 Описание программы конфигурации ПЛИС................................ 36

3.2.1 Антидребезговая система (antibounce)....................................... 37

3.2.1,1 Встроенная макрофункция – счетчик lpm_counter................ 38

3.2.2 Двоичо-десятичный счетчик (counter10).................................... 40

3.2.3 Устройство управлением индикатора (wh1602LCD)................ 41

3.2.3,1 Машина конечных автоматов................................................. 42

3.2.4 Делитель тактовой частоты для работы индикатора(divFreq). 46

3.2.5 Общая структура программы.................................................... 46

Заключение........................................................................................... 47

Литература........................................................................................... 48

Приложение 1 (Принципиальная схема устройства)......................... 49

Приложение 2 (Список портов ввода вывода ПЛИС epm 3256a)..... 50

Приложение 3 (Текст программы)...................................................... 51


Введение


Актуальность темы

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

Основной частью приборов для регистрации ядерных излучений является элемент, воспринимающий излучения, - детектор излучения. Для этой цели используются счетчики разных типов, позволяющие зарегистрировать попавшую в него частицу в виде кратковременного электрического тока – импульса. Наиболее широкое применение имеют газоразрядные счетчики, работа которых основана на ионизирующем действии ядерного излучения. Постепенно их начинают вытеснять сцинтилляционные счетчики (СС), действие которых основано на регистрации вспышек света, возникающих в некоторых веществах под ударами частиц. Основными элементами такого счетчика являются вещество, люминесцирующее под действием заряженных частиц (сцинтиллятор), и фотоэлектронный умножитель (ФЭУ). В начале 20 века визуальные наблюдения световых вспышек (сцинтилляций) под действием ионизирующих частиц (-частиц, осколков деления ядер) были основным методом ядерной физики. Позднее СС был полностью вытеснен.

Его возвращение в ядерную физику произошло в конце 40-х гг., когда для регистрации сцинтилляций были использованы многокаскадные ФЭУ с большим коэффициентом усиления, способные зарегистрировать чрезвычайно слабые световые вспышки. Принцип действия СС состоит в следующем: заряженная частица, проходя через сцинтиллятор, наряду с ионизацией атомов и молекул возбуждает их. Возвращаясь в невозбуждённое (основное) состояние, атомы испускают фотоны (Люминесценция). Фотоны, попадая на катод ФЭУ, выбивают электроны (Фотоэлектронная эмиссия), в результате чего на аноде ФЭУ возникает электрический импульс, который далее усиливается и регистрируется. Детектирование нейтральных частиц (нейтронов, -квантов) происходит по вторичным заряженным частицам, образующимся при взаимодействии нейтронов и -квантов с атомами сцинтиллятора.

Для того чтобы световая вспышка была зарегистрирована ФЭУ, необходимо, чтобы спектр излучения сцинтиллятора совпадал со спектральной областью чувствительности фотокатода ФЭУ, а материал сцинтиллятора был прозрачен для собственного излучения. Для регистрации «медленных нейтронов» в сцинтиллятор добавляют Li или В. Для регистрации «быстрых нейтронов» используются водородсодержащие сцинтилляторы. Для спектрометрии -квантов и электронов высокой энергии используют Nal (Tl), обладающий большой плотностью и высоким эффективным атомным номером.

ФЭУ, предназначенные для СС, должны обладать высокой эффективностью фотокатода (до 2,5%), высоким коэффициентом усиления (108—108), малым временем собирания электронов (~ 10–8 сек), при высокой стабильности этого времени. Последнее позволяет достичь разрешающей способности по времени СС 1–9 сек. Высокий коэффициент усиления ФЭУ наряду с малым уровнем собственных шумов делает возможной регистрацию отдельных электронов, выбитых с фотокатода. Сигнал на аноде ФЭУ может достигать 100 В в виде импульсов трапециевидной формы (видеоимпульсов).

Чтобы не только обнаружить ядерное излучение, но и измерить его интенсивность, недостаточно одного детектора излучения. Необходимы еще электронные устройства, подсчитывающие число электрических импульсов, то есть число попавших в детектор частиц, и устройства, показывающие результат подсчета [1].

Данная работа посвящена разработке электронного устройства считающего число электрических импульсов.

Цели и задачи

1. Необходимо реализовать счетное устройство апериодических видеоимпульсов с заданными параметрами:

· Диапазон изменения амплитуды входного сигнала 5…20В;

· Длительность импульса ф, не менее 10 нс;

· Минимальный интервал между импульсами , 10 мкс.

2.  Для отображения счета необходимо наличие индикатора. Реализовать индикатор, на котором высвечивается число импульсов в непрерывном режиме счета через некоторый промежуток времени.

3.  Управление устройством осуществляется посредством кнопок:  старт/стоп – (начало счета/конец счета), сброс – (сброс счетчика).

3 Анализ задания и выбор платформы

 Конечно, реализовать простой счетчик на дискретных элементах (триггерах), что может быть проще? Однако сложность заключается в том, что разработка счетчика на дискретных элементах потребует сложной настройки, что увеличит время разработки и цену устройства. Для моих целей нужен высокоскоростной счетчик. Реализовать его нужно на современной элементной базе. Платформы, на которых можно реализовать счетчик, на сегодняшний день нашлось две ПЛИС и микроконтроллеры, был сделан выбор в пользу первой, то есть ПЛИС  так как она легче поддается функциональным изменениям (в дальнейшем это устройство может быть использовано в других целях) и тактовая частота обработки сигнала не фиксирована как у микроконтроллера, её можно задавать аппаратно и делить её в зависимости от необходимости. Итак ПЛИС (Программируемая Логическая Интегральная Схема ).

Из наиболее известных производителей ПЛИС следует отметить фирму Altera. Небольшая, вначале, компания удачно решила задачи стоящие перед ними в начале (определить элементарные базис ПЛИС, разработать математические методы синтеза устройств в выбранном базисе, создать интегрированную систему проектирования цифровых устройств на ПЛИС), путем постепенного согласованного усложнения элементной базы и средств проектирования. Ее успех ко второй половине 90-х годов вывели её в число основных производства микросхем ПЛИС.

Была выбрана ПЛИС семейства MAX 3000 EPM3256A

 

Тип микросхемы Выходы I/O Триггеры Ячейки Мах частота MHz
EPM3032A 4 30 32 32 192
EPM3064A 4 30 62 64 64 192
EPM3128A 4 76 92 128 128 182
EPM3256A 4 112 154 256 256 156

 

Технология EEPROM обеспечивает сохранение конфигурации при отключении питания. Число логических эквивалентных вентилей ПЛИС находится в диапазоне 600-5000, количество программируемых пользователем выводов 44-208. Микросхемы могут быть запрограммированы с помощью программатора, в этом случае можно использовать все линии Ввода/Вывода (I /O). Кроме того, все ПЛИС имеют возможность внутрисистемного программирования (in-system programmability) через порт типа JTAG с использованием устройств типа BitBlaster, ByteBlaster и MasterBlaster, тогда 4 порта JTAG резервируются для этой цели. Выводы имеют возможность эмуляции режимов открытого коллектора и третьего (высокоимпедансного) состояния [2].



Выбор элементов

Компаратор

 

Компаратор сравнивает сигнал с опорным напряжением и оставляет только импульсы с заданной амплитудой. Выходной сигнал компаратора должен быть в виде TTL уровня. В соответствии с заданными характеристиками был выбран компаратор фирмы Analog Devices AD8561.


Рис 2.2.1 Расположение выводов компаратора


Таблица 2.2.1 Общее техническое описание V+ = +5.0 V, V– = VGND = 0 V, TA = +25 C

 

Параметры Обозначения

Условия эксплуатации

min max Единицы измерения
Входная емкость CIN

 

  3 пФ
Диапазон входных напряжений VCM

 

0 3.0 В
Длительность импульса tPW(E)

 

  6 нс
время срабатывания

ts

    1 нс
время удержания

tH

    1.2 нс

Цифровой выход (по напряжению)

Логическая “1” VOH

 

3.5 V+ В
Логический “0” VOL

 

0.25 0.4 В

Динамические характеристики

задержка распространения tP  

Продолжительность

200 mV с шагом 100 mV

–40C TA +85

6.7 13 нс

Питание

Ток источника питания(положительный) I+  

–40C TA +85C

 

4.5 6.0 мА
             

 

 

Рис 2.2.2(Физические параметры)

Перед компаратором необходимо поставить делитель, для обеспечения согласования по напряжению и сопротивлению [5].




Генератор тактовой частоты

Генератор тактовой частоты необходим для задания временного масштаба счетного устройства на ПЛИС. По тактам генератора будет работать счетное устройство. Был выбран генератор фирмы Auch JCO series с высотой импульсов 5В для CMOS и TTL логики.*

Таблица 2.3.1 Общее техническое описание:

 

Частота 20.0 МГц
Ток потребления 25 мА
Стабильность частоты ± 100 ppm (A-type)*
Емкость нагрузки 50 пФ или 10 TTL
Максимальное время спада и подъема 6 нс
Уровень выходного сигнала максимально низкого (лог. «0») 0.4 В
Уровень выходного сигнала минимально высокого(лог. «1») VDC - 0.5 В

 

Рис 2.3.1 (Физические параметры)


Рис 2.3.2 (Форма выдаваемого сигнала)

Индикатор

 

Был выбран двух строчный индикатор WH1602A с внутренней видео памятью и контролером HD44780.

 

 

Рис 2.4.1(Внешний вид и габариты индикаторы)



Подключение ЖКИ-модуля

Для соединения ЖКИ-модуля с управляющей системой используется параллельная синхронная шина, насчитывающая 8 или 4 (выбирается программно) линий данных DB0...DB7, линию выбора операции R/W, линию выбора регистра RS и линию стробирования/синхронизации Е. Кроме линий управляющей шины имеются две линии для подачи напряжения питания 5 В - GND и VCC, и линия для подачи напряжения питания драйвера ЖКИ - V0.

Рис 2.4.2. Подача питания на ЖКИ-модуль

 

На начальном этапе необходимо подать питание на ЖКИ-модуль и добиться от него признаков работоспособности. Схема включения модуля, рассчитанного на стандартный диапазон температур, показана на рис.2.4.2а. Подстроечный резистор R1 позволяет плавно менять напряжение питания драйвера ЖКИ, что приводит к изменению угла поворота жидких кристаллов. Этим резистором можно отрегулировать фактическую контрастность при некотором преимущественном угле наблюдения (снизу-вверх или сверху-вниз). Включение в данную схему ЖКИ-модуля, рассчитанного на расширенный диапазон температур, не приведет к успеху, так как из-за особенностей применяемых в них ЖК-материалов, эти ЖКИ требуют повышенного напряжения питания и при питании напряжением 5 В изображение либо будет отсутствовать совсем, либо будет слабоконтрастным. Для преодоления ситуации необходимо подать на вывод V0 отрицательное напряжение (напряжение на ЖКИ определяется разностью VCC и V0), составляющее в предельном случае - 5 В. Если в схеме отсутствует источник отрицательного напряжения, то не составляет труда собрать простейший преобразователь, например, по схеме на рис 2.4.2б.

Для активизации ЖКИ-модуля подается напряжение питания и регулируется движок резистора R1 (рис. 2.4.2). После окончания цикла внутренней инициализации модуль включается в режим развертки одной верхней строки. При изменении напряжения на выводе V0 сегменты этой строки должны менять свое состояние от прозрачного до непрозрачного, что является свидетельством правильного подключения питания модуля и работоспособности контроллера и драйверов ЖКИ. Движок устанавливается в такое положение, при котором изображение сегментов в верхней строке едва проступает на основном фоне ЖКИ. Теперь ЖКИ-модуль готов к приему и отображению информации. После того, как появится отображения на индикаторе какого-либо текста, можно более точно отрегулировать изображение в соответствии с необходимой контрастностью и требуемым углом наблюдения.

Для соединения модуля с управляющей системой можно выбрать один из двух вариантов: по 8-ми или 4-х разрядной шине. В первом случае потребуется 11 сигнальных линий, во втором - только 7. Сам процесс обмена также может быть организован двояко.

Можно подключить ЖКИ-модуль к системной шине (если таковая имеется) и выполнить обмен в синхронном режиме с максимальной скоростью. Но это может потребовать введения дополнительных схем для замедления скорости работы шины при выполнении операций обмена с ЖКИ-модулем, и подключение к системной шине в большинстве случаев потребует вводить схемы дешифрации и формирования сигналов Е и R/W, что опять приведет к дополнительным затратам. Все сказанное выше не означает, что вариант с подключением к шине принципиально неэффективен. В какой-то конкретной системе этот способ, наоборот, может быть самым оптимальным. Кроме того, некоторые современные процессоры, например, семейство МС68НС12, имеет встроенные средства для формирования сигналов выборки (CS), с возможностью программно определить скорость обмена с каждым конкретным устройством.

Другой вариант обмен с ЖКИ-модулем выполняется чисто программными средствами, через порты ввода-вывода. Вариант соединения с системной шиной, напротив, требует рассмотрения конкретных устройств, поэтому необходимо изучить временные диаграммы операций чтения и записи, приведенные на рис 2.4.4 и 2.4.5, а также значения временных параметров, приведенные в табл.2.4.5, 6 и сконструировать соответствующие управляющие схемы.

В данной работе используется именно этот вариант.

 

Рис 2.4.3 Подключение к управляющей системе

 

В соответствии с временной диаграммой (рис.2.4.4, 5 ) в исходном состоянии сигнал Е = 0, сигнал R/W = 0, значение сигнала RS - произвольное, шина данных DBO...DB7 в состоянии высокого импеданса (НI). Такое состояние управляющих сигналов (E и R/W) должно поддерживаться все время в промежутках между операциями обмена с ЖКИ-модулем. Шина данных в эти моменты в принципе свободна, и может использоваться в мультиплексном режиме для каких-либо других целей, например, для сканирования матрицы клавиатуры. Естественно, необходимо позаботиться об исключении конфликтов на шине данных в момент совершения операций обмена с ЖКИ-модулем.[8]

Последовательности действий, которые необходимо выполнять управляющей системе при совершении операций записи и чтения для 8-ми и 4-х разрядной шины приведены соответственно в табл 2.4.1...4.


Таблица 2.4.1 Операции записи для 8-ми разрядной шины

 

1.Установить значение линии RS
2.Вывести значение байта данных на линии шины DB0...DB7
3.Установить линию Е = 1
4.Установить линию E = 0 5.Установить линии шины DB0...DB7 = HI

 

Таблица 2.4.2 Операции чтения для 8-ми разрядной шины

 

1.Установить значение линии RS
2.Установить линию R/W = 1
3.Установить линию Е = 1
4.Считать значение байта данных с линий шины DB0...DB7
5.Установить линию Е = 0
6.Установить линию R/W = 0

 

Таблица 2.4.3 Операция записи для 4-х разрядной шины

 

1. Установить значение линии RS
2. Вывести значение старшей тетрады байта данных на линии шины DB4...DB7
3. Установить линию Е = 1
4. Установить линию Е = 0
5. Вывести значение младшей тетрады байта данных на линии шины DB4...DB7
6. Установить линию Е = 1
7. Установить линию Е = 0
8. Установить линии шины DB4...DB7 = HI

 

Таблица 2.4.4 Операция чтения для 4-х разрядной шины

 

1. Установить значение линии RS
2. Установить линию R/W = 1 3. Установить линию Е = 1
4. Считать значение старшей тетрады байта данных с линий шины DB4...DB7
5. Установить линию Е = 0
6. Установить линию Е = 1
7. Считать значение младшей тетрады байта данных с линий шины DB4...DB7
8. Установить линию Е = 0
9. Установить линию R/W = 0

 

Рис 2.4.4. Временная диаграмма операции записи

Рис 2.4.5 Временная диаграмма операции чтения

 

Приведенные в табл 2.4.1...4 операции подразумевают, что время выполнения каждого шага составляет не менее 250 нс. Однако  это условие может быть легко нарушено, поэтому необходимо тщательно контролировать минимальные значения временных интервалов, чтобы они всегда находились в области допустимых значений, указанных в таблице 2.4.5, 6 и при необходимости вводить задержки.


Таблица 2.4.5 Значения временных характеристик. Операция записи

 

Параметр Обозначение Мин. Макс. Единица
Период сигнала Е tcycE 500 - нс
Положительный полупериод сигнала Е PWEH 230 - нс
Фронт/спад сигнала Е tEr, tEf - 20 нс
Установление адреса tAS 40 - нс
Удержание адреса tAH 10 - нс
Установление данных tDSW 80 - нс
Удержание данных tDSW 10 - нс

 

Таблица 2.4.6 Значения временных характеристик. Операция чтения

 

Параметр Обозначение Мин. Макс. Единица
Период сигнала Е tcycE 500 - нс
Положительный полупериод сигнала Е PWEH 230 - нс
Фронт/спад сигнала Е tEr, tEf - 20 нс
Установление адреса tAS 40 - нс
Удержание адреса tAH 10 - нс
Установление данных tDSW - 160 нс
Удержание данных tDSW 5 - нс

 

Описанные выше операции записи/чтения байта являются базовыми для осуществления обмена с ЖКИ-модулем. Реализация этих двух операций - единственное, что отличает процесс обмена по 8-ми разрядной шине от обмена по 4-х разрядной шине. На основе этих двух операций, реализованных программно (когда модуль подключен к портам Ввода/Вывода какого нибудь  устройства), или аппаратно (когда модуль подключен к системной шине), строятся все виды операций программирования и управления.

2.4.3 Программирование и управление ЖКИ-модуля:

Управление контроллером ведется посредством интерфейса управляющей системы. Основными объектами взаимодействия являются регистры DR и IR. Выбор адресуемого регистра производится линией RS, если RS = 0 - адресуется регистр команд (IR), если RS = 1 - регистр данных (DR).

Данные через регистр DR, в зависимости от текущего режима, могут помещаться (или прочитываться) в видеопамять (DDRAM) или в ОЗУ знакогенератора (CGRAM) по текущему адресу, указываемому счетчиком адреса (АС). Информация, попадающая в регистр IR, интерпретируется устройством выполнения команд как управляющая последовательность. Прочтение регистра IR возвращает в 7-ми младших разрядах текущее значение счетчика АС, а в старшем разряде флаг занятости (BF).

У контроллера HD44780 существует набор внутренних флагов, определяющих режимы работы различных элементов контроллера (таблица 2.4.7). В таблице 2.4.8 приведены значения управляющих флагов непосредственно после подачи на ЖКИ-модуль напряжения питания. Переопределение значений флагов производится специальными командами, записываемыми в регистр IR, при этом комбинации старших битов определяют группу флагов или команду, а младшие содержат собственно флаги.

Таблица 2.4.7 Флаги, управляющие работой контроллера HD44780

 

/D: режим смещения счетчика адреса АС, 0 - уменьшение, 1 - увеличение.
S: флаг режима сдвига содержимого экрана. 0 - сдвиг экрана не производится, 1 - после записи в DDRAM очередного кода экран сдвигается в направлении, определяемым флагом I/D: 0 - вправо, 1 - влево. При сдвиге не производится изменение содержимого DDRAM. изменяются только внутренние указатели расположения видимого начала строки в DDRAM.
S/C: флаг-команда, производящая вместе с флагом R/L операцию сдвига содержимого экрана (так же, как и в предыдущем случае, без изменений в DDRAM) или курсора. Определяет объект смещения: 0 - сдвигается курсор, 1 - сдвигается экран.
R/L: флаг-команда, производящая вместе с флагом S/C операцию сдвига экрана или курсора. Уточняет направление сдвига: 0 - влево, 1 - вправо.
D/L: флаг, определяющий ширину шины данных: 0 - 4 разряда, 1 - 8 разрядов.
N: режим развертки изображения на ЖКИ: 0 - одна строка, 1 - две строки
F: размер матрицы символов: 0 - 5 х 8 точек, 1 - 5 х 10 точек.
D: наличие изображения: 0 - выключено, 1 - включено
С: курсор в виде подчерка: 0 - выключен, 1 - включен
В: курсор в виде мерцающего знакоместа: 0 - выключен, 1 - включен.

 

Таблица 2.4.8 Значения управляющих флагов после подачи питания

 

I/D = 1: режим увеличения счетчика на 1
S = 0: без сдвига изображения
D/L = 1: 8-ми разрядная шина данных
N = 0: режим развертки одной строки
F = 0: символы с матрицей 5 х 8 точек
D = 0: отображение выключено
С = 0: курсор в виде подчерка выключен
В = 0: курсор в виде мерцающего знакоместа выключен

 

Список управляющих комбинаций битов регистра IR и выполняемые ими команды приведены в таблице 2.4.9. Так как на момент включения ЖКИ-модуль ничего не отображает (флаг D = 0), то для того, чтобы вывести какой-либо текст необходимо, как минимум, включить отображение, установив флаг D = 1. Вот пример широко распространенной последовательности для инициализации ЖКИ-модуля: , $OC, 6 (знак "$" перед числом указывает на шестнадцатеричное основание) устанавливает режим отображения 2-х строк с матрицей 5 х 8 точек и работу с 8-ми разрядной шиной данных; $OC включает отображение на экране ЖКИ-модуля, без отображения курсоров; 6 устанавливает режим автоматического перемещения курсора слева-направо после вывода каждого символа.


Таблица 2.4.9. Управляющие комбинации битов регистра IR

 

D1 D2 D3 D4

D5

D6 D7 D8 Назначение
0 0 0 0

0

0 0 1 Очистка экрана, АС = 0, адресация АС на DDRAM
0 0 0 0

0

0 1 - АС = 0, адресация на DDRAM, сброшены сдвиги, начало строки адресуется в начале DDRAM
0 0 0 0

0

1 I/D S Выбирается направление сдвига курсора или экрана
0 0 0 0

1

D C B Выбирается режим отображения
0 0 0 1

S/C

R/L - - Команда сдвига курсора/экрана
0 0 1

DL

N F - - Определение параметров развертки и ширины шины данных
0 1 AG

AG

AG AG AG AG Присвоение счетчику АС адреса в области CGRAM
1 AG AG

AG

AG AG AG AG Присвоение счетчику АС адреса в области DDRAM
                   

 

Контроллер HD44780 поддерживает как операции записи, так и операции чтения. Чтение регистра DR приводит к загрузке содержимого DDRAM или CGRAM, в зависимости от текущего режима, при этом курсор смещается на одну позицию, как и при записи. Чтение регистра IR возвращает 8 значащих разрядов, причем в 7-ми младших содержится текущее значение счетчика АС (7 разрядов, если адресуется DDRAM, и 6 - если CGRAM), а в старшем - флаг занятости BF. Этот флаг имеет значение 1 когда контроллер занят и 0 - когда свободен. Необходимо учитывать, что большинство операций, выполняемых контроллером, занимают значительное время, около 40 мкс, а время выполнения некоторых доходит до единиц миллисекунд, поэтому цикл ожидания снятия флага BF должен обязательно присутствовать в программах драйвера ЖКИ-модуля и предшествовать совершению любой операции (естественно, кроме операции проверки флага BF).

Один важный момент! После совершения операции записи или чтения DDRAM и появления после нее признака готовности (BF = 0), прочитанное в этом же цикле (вместе с флагом BF) значение АС, скорее всего не будет достоверным. Дело в том, что между появлением признака готовности и вычислением контроллером нового значения АС существует некоторый временной интервал, составляющий около 4 мкс при тактовой частоте контроллера 270 кГц. Поэтому, если необходимо получить истинное значение АС, нужно совершить повторную операцию прочтения IR спустя не менее чем 4 мкс (если контроллер работает на частоте 270 кГц время ожидания необходимо пропорционально увеличить).

Вывод на экран символа производится записью его кода в регистр DR. При этом символ размещается в DDRAM по текущему адресу, указываемому АС, а значение АС увеличивается или уменьшается на 1. Чтобы произвести переустановку курсора на нужную позицию, необходимо присвоить АС соответствующее значение (см. таблицу 2.4.9). Здесь есть одна тонкость. Когда производится последовательная запись символов и в результате заполняется вся строка, курсор автоматически переходит на вторую строку, но если необходимо принудительно установить курсор, скажем, на начало второй строки, то будет неверным присвоить АС казалось бы логичное значение (40), правильным является значение (64). Значения адресов DDRAM в диапазоне ...fF (а равно и ...F) являются неопределенными и результаты работы с ними могут быть непредсказуемыми.

Необходимо учитывать, что контроллеры, устанавливаемые на ЖКИ-модули, могут иметь различные наборы символов, причем это может зависеть как от производителя контроллера, так и от модификации данной конкретной модели. Например, фирма Powertip выпускает ЖКИ-модули с четырьмя базовыми модификациями наборов символов: японской, европейской, французской и русской.

Более того, существует как минимум два варианта русского набора символов: контроллер фирмы Hitachi (H2 по маркировке фирмы Powertip) и контроллер фирмы Epson (EH по маркировке Powertip). Контроллер фирмы Hitachi обладает существенным недостатком - у него весьма ограниченный набор русских символов, фактически у него имеются только прописные русские буквы, и даже среди них отсутствует символ "Ф". Напротив, контроллер фирмы Epson содержит полный набор русских символов в прописном и строчном вариантах, поэтому он весьма удобен для отечественных применений. Это свойство контроллеров фирмы Epson обеспечило им заслуженную популярность на российском рынке, поэтому в последнее время основная масса импортируемых в нашу страну ЖКИ-модулей оснащены именно этим контроллером; в качестве примера в таблице 2.4.10 приведен набор символов этого контролера.

Таблица 2.4.10.Таблица кодов символов контроллера Epson набор "Russian"

 

 

Из допустимых для размещения в DDRAM кодов символы с кодами <--DESCRIPTION-->0...7 (и их дубликат с кодами 8...<--DESCRIPTION-->F) имеют специальное назначение - это переопределяемые символы, графическое изображение которых может назначить сам потребитель, разместив соответствующую информацию в области CGRAM. Для программирования доступны 8 переопределяемых символов в режиме с матрицей 5 х 7 точек и 4 с матрицей 5 х 10 (в режиме 5 х 10 переопределяемые символы адресуются кодами DDRAM через один: <--DESCRIPTION-->0, 2, 4, 6). Для кодирования матрицы используются горизонтально "уложенные" байты, пять младших битов которых несут информацию о рисунке (причем 1 означает, что сегмент будет включен), 4-й разряд каждого из 8-ми (или 11-ти в режиме 5 х 10) байтов матрицы определяет левую колонку символа, а 0-й - правую. Старшие три бита не используются, равно как и старшие пять байтов, составляющих полную область матрицы символа (16 байтов) в режиме 5 х 10 (обратите внимание, что матрица программируемых символов допускает использование полной высоты строки (8 строчек для режима 5 х 7 и 11 строчек для режима 5 х 10), то есть можно размещать точки в области подчеркивающего курсора).

Чтобы определить собственный символ необходимо установить счетчик АС на адрес начала матрицы требуемого символа в CGRAM - <--DESCRIPTION-->0, 8, и т.д. (<--DESCRIPTION-->0, , для режима 5 х 10 точек) - произвести перезапись всех байтов матрицы, начиная с верхней строки. После этого, записав в DDRAM код запрограммированного символа: <--DESCRIPTION-->0, 1, 2 (<--DESCRIPTION-->0, 2, 4 для режима 5 х 10 точек), на экране в соответствующем месте будет отображаться переопределенный символ.

Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 2.4.7 (содержащей в том числе команду выбора необходимой разрядности шины).

Необходимо помнить, что когда Вы объявляете режим работы с 4-х разрядной шиной, то есть выдаете команду , то делаете это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи напряжения питания, а значит вы не сможете адекватно объявить необходимое значение флагов N и F, располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад, то есть для 4-х разрядного режима образом.[9]




Стабилизаторы

 

Для питания ПЛИС нужно +3.3В, компаратора, индикатора и генератора +5В. Для питания всего устройства взят источник питания от персонального компьютера, который выдает +12 В. Было выбрано два интегральных стабилизатора.

Первый на +5В фирмы Fairchild Semiconductor MC78T05

Таблица 2.5.1 Технические характеристики

 

Параметр Обозначение Характеристики Min Max Единицы измерения
Выходное напряжение V0 5мА ≤ Io ≤ 3.0A , TJ = +25° 4.8 5.2 В
Отклонение напряжения по нагрузке DV0 5мA ≤ Io ≤ 3.0A , TJ = +25°C 10 30 мВ
Максимальный выходной ток IPK TA = +25°C 5.0 - A
Выходное сопротивление R0 f = 1.0kHz 2.0 - мОм
Ток короткого замыкание Isc   VI = 35V, TJ =+25°C 1.5 2.5 A
Входное напряжение (для V0 = 5V)   V1 TJ =+25°C   35 40 В
Рассеваемая мощность W     25 Вт

 

§ Внутреннее короткое замыкание тока исключено

§ Внутренняя защита от тепловой перегрузки [10]

 

Рис 2.5.2 (Физические параметры стабилизатора MC78T05)

 

Второй на +3.3 В фирмы National Semiconductor LMS1585A

Основные характеристики:

§ Интервал выходных напряжений……………..1.5V и 3.3V

§ Не стабильность тока в сети…………………………………0.005%

§ Не стабильность тока на нагрузке……………………………0.05%


Таблица 2.4.3 Технические характеристики:

 

Параметр Обозначение Условие min max Един. измер.
Выходное напряжение Vout IOUT = 0mA, VIN = 5V 0 IOUT 5A, 4.75VVIN7V 3.267 3.235 3.333 3.365 В В
Отклонение выходного напряжения по нагрузке DVout VIN = 5V, 0 IOUT 5A 0.05 0.5 %
Рабочий ток   VIN = 5V 7.0 13.0 мА

 

§ Максимальное входное и выходное напряжение (относительно земли)…………………………………………….…………………………….13V

§ Электростатический допуск………………………………….2000V

 

[11]

Рис 2.4.3 (Физические параметры стабилизатора LMS1585A)


Программатор ByteBlaster

Устройство для программирования ПЛИС. На вход подается шина с LPT порта а на выходе 7-и разрядная шина из которой 4 провода на порт JTAG, 2 на питание +5 В и 2 на землю смотри приложение 1( схема устройства)

Рис 2.5.1.(Подключение ПЛИС к Компьютеру через LPT порт с помощью Byte Blaster)

 

Рис 2.5.2(Схема ByteBlaster)

 

Как видно из схемы Байтбластер содержит одну микросхему НС244 которая содержит в себе всего лишь 4 буфера и резисторы. Это значит она очень дешевая и простая, её можно изготовить в домашних условиях.[12]

Сборка устройства

Как уже ранее говорилось, ПЛИС была выбрана EPM3256ATC144-10 семейства MAX3000, для прошивки к ней подключаются программатор (Byte Blaster). Также в устройство входит компаратор (AD8561), генератор тактовой частоты (Auch JCO series), кнопки (СТАРТ/СТОП, СБРОС), источник питания ПК, стабилизаторы напряжения (MC78T05, LMS1585A) и индикатор (WH1602A). Принципиальная схема приведена в приложение 1. В приложение 2 приведен список выводов ПЛИС. Подключение компонентов схемы ведется согласно тех. документации прилагаемое с микросхемой.

 



Конфигурирование ПЛИС

3.1 Система проектирования MAX+plus II

 

В качестве средства автоматизации проектирования устройств на основе собственных микросхем фирма Altera разработала систему MAX+plus II . Эта система состоит из 11 программ-обработчиков проекта (приложений), которые функционируют под управлением программы Manager. Система является полноцикловой, т.е. поддерживает не отдельные этапы проектирования (как система типа CAD - computer aided design), а сквозной процесс от ввода и контроля описания до программирования микросхемы ПЛИС. Такие системы получили название EDA - electronic design automation.
Проект в системе MAX+plus II может быть иерархическим и состоять из набора модулей. Каждый модуль содержит описание части проекта, форма проекта может быть графическое представление принципиальной схемы, текст на языках AHDL/ VHDL/ Verilog, логико-временные диаграммы функционирования.

Для создания исходных модулей в состав приложений включены редакторы: графический – Graphic Editor, текстовый – Text Editor, логико-временных диаграмм Waveform Editor. Любой файл(модуль) может быть представлен в графическом виде как символ. Это можно сделать явно с использования редактора символов – Symbol Editor. Далее эти символы могут быть использованы при создании иерархического проекта. Пользователю обширные библиотеки примитивов и макрофункций.[2]


Устройство управлением индикатора (wh1602LCD)

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

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

Машина конечных автоматов

Машина конечных автоматов или Машина состояний в AHDL – это структура, позволяющая описывать конечный автомат в виде множества внутренних состояний проекта. Переходы между состояниями синхронизируется тактовым сигналом. Условие и направление перехода определяется для каждого состояния индивидуально. Каждому состоянию можно поставить в соответствие один или несколько входных управляющих сигналов.

Машина состояний описывается как переменная в разделе VARIABLE. Поведение машины описывается в разделе логики после ключевого слова BEGIN. Форма описания машины состояний следующая:

Имя_переменной : MACHINE [ OF BITS <список битов> ]

                                 WITH STATES (состояние1, состояние2,……);

где

    состояние ::=<имя> [= значение ],

<значение> ::= <число>ê<имя>.

Например.

ss: MACHINE OF BITS (q1,q2,q3)

              WITH STATES ( s1 = B”000”,

s2 = B”001”)

s3 =B”010”);

или

ss: MACHINE WITH STATES(s0,s1);

Обязательным является перечисление списка состояний (s0,s1). Если не обязательна конструкция OF BITS, то объявление имени состояния равносильно объявлению переменной типа NODE.

Если объявлена конструкция OF BITS, то перечисленные биты должны существовать физически. В этом случае рассматриваются комбинация значений выходов этих битов (логических ячеек), аналогично константам. Кроме того, количество возможных состояний в этом случае равно 2 в степени “количества битов”, поэтому желательно явно описать все состояния, включая ложные. Первое по списку состояние является состоянием после сигнала сброса.

Машина состояний имеет следующие порты.

.clk – входной тактовый сигнал;

.reset – сигнал сброса, активный уровень – “1”;

.ena – разрешение перехода, активный уровень – “1”.

Поведение машины можно описать с помощью конструкции CASE

SUBDESIGN StateMachine

(

    clk, reset, d: INPUT; -- входные порты

    q: OUTPUT; -- выходной порт

)

VARIABLE

    ss: MACHINE WITH STATES(s0,s1); --переменная ss –машина с с-ми s0, s1

BEGIN

    ss.clk = clk; --соединим входной сигнал clk с тактовым входом машины

    ss.reset = reset; --соединим входной сигнал reset с входом сброс

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

CASE ss IS

    WHEN s0 =>           -- в состоянии s0

              q = GND; -- устанавливаем выход q в 0

              IF d THEN    --если на входе d высокий уровень,

              ss = s1;  --то следующее состояние будет s1,

END IF; -- иначе ss останется прежнем

WHEN s1=>            --в состоянии s1

              q = VCC; --устанавливаем выход q в 1

IF !d THEN              --если на входе d низкий уровень,

ss = s0;  --следующее состояние будет s0, иначе ss останется END IF;     --прежним;

END CASE;

END;

Итак, для работы нужно сначала выставить нужные режимы и флаги через регистр IR(регистр команд) обращение к нему ведется через линию RS выставлением на неё логического нуля. В состоянии Z0 обнуляются все переменные. С состояния P1 по состояние P4 выдерживается четыре паузы 21 мс, 4.1 мс, 0.1 мс и 0.1мс по причине указанной в пункте 2.4.4 до полной готовности индикатора и загружается управляющее слово Н ”38”, что означает: 8 разрядная шина данных, режим развертки одной строки и символы с матрицей 5х8. Далее в состоянии b4, c4 загружается управляющее слово Н”3C” что означает точно тоже самое, но матрица 5х10 точек, чтобы по крупнее показывал. С состояния r5 выбирается режим отображения управляющим словом Н”0C” что означает: включение изображения, курсор в виде почерка . С состояния r6 выбирается направление сдвига курсора вправо без сдвига изображения управляющим словом Н”06”. В состоянии r7 сбрасываются сдвиги, и начало строки адресуется в начало видео памяти DDRAM. В состоянии r8 идет очистка экрана, и счетчик адреса AC адресуется на видео память DDRAM.

На этом этапе все флаги необходимые для формирования изображения загружены. Само формирование изображения начинается с состояния dz0. В состояниях ..z0 значения с счетчика поступают и перекодируются согласно табл3.2.10 дальше записываются в регистр данных. В состоянии ..z1 идет считывание из регистра данных в регистр знакогенератора CGRAM и выводится на экран. И все это начиная с ds циклически, повторяется через заданный интервал времени. Смотри рисунок 3.2.3.1

В данном описании программы я опускал состояния, в которых выдерживались необходимые паузы для общения ПЛИС и микроконтроллера индикатора. Также нужно заметить, что данные в этот модуль программы поступают в параллельном виде, название этой шины Line[].

Рис 3.2.3.1 Блок-схема устройства управления индикатором



Общая структура программы

Структуру проекта можно увидеть, используя специальное приложение Max+plus/ Hierarhy Display. Откроется окно, в котором проект представлен в виде дерева, указаны имя каждого файла и исходный тип, а также иконка. Двойной щелчок по иконке открывает исходный файл нижнего уровня с помощью соответствующего редактора. Слева от каждой ветви указаны файлы с такими же именами, но другими расширениями, которые созданы в процессе обработки исходного файла.

 

Рис 3.2.5.1 Дерево проекта конфигурации

Тексты каждого модуля можно увидеть в Приложении 3.



Заключение

 

Подводя итог выше проведенной работы, хочу заметить, что получившееся устройство оказалось вполне удачным. Работа устройства была проверена с помощью генератора прямоугольных импульсов. Плата устройства показана на рисунке 4.1.

Данное устройство можно подключать не только к СС с ФЭУ, но и к другим детекторам радиоактивных излучений, например счетчик Гейгера. Для этого необходимо пересчитать делитель, который установлен до компаратора.

На этапе разработки в схему счетного устройства была добавлена АЦП Analog Device, AD7715с последовательным интерфейсом SPI. АЦП планируется использовать для измерения напряжения подаваемого на детектор.


Литература

 

1. Корсунский М.И.,«Атомное ядро» - М.: Гостехиздат, 1957.


Приложение 3 (Текст программы)

 

--Антидребезговая система

INCLUDE "LPM_COUNTER";

CONSTANT DELAY = 6;

SUBDESIGN ANTIBOUNCE

(

    IN          : INPUT;

    CLK      : INPUT;

    OUT      : OUTPUT;

)

VARIABLE

    CT         : LPM_COUNTER WITH(LPM_WIDTH=DELAY);

    TRIG : DFF;

BEGIN

    TRIG.D = !IN;

    CT.ACLR = !(!IN $ TRIG.Q);

    CT.CLOCK = CLK;

    TRIG.CLK=CT.Q[DELAY-1];

    OUT = !TRIG.Q;

END;

--Десятичнодвоичный счетчик

CONSTANT DIGITS = 6;

INCLUDE "LPM_COUNTER";

SUBDESIGN COUNTER10

(

    -- входные данные

    CLOCK                                                : INPUT;

    ACLR                                                   : INPUT;

    COUNT_ENA                                     : INPUT;

    -- выход

    Q[DIGITS-1..0][3..0]         : OUTPUT;

)

 

VARIABLE

    RESET[DIGITS-1..0]                 : NODE;

    COUNTER[DIGITS-1..0]           : LPM_COUNTER WITH (LPM_WIDTH=4);

BEGIN

    IF COUNTER[0].Q[3..0]==B"1010" THEN RESET[0]=vcc; ELSE RESET[0]=gnd; END IF;

    IF COUNTER[1].Q[3..0]==B"1010" THEN RESET[1]=vcc; ELSE RESET[1]=gnd; END IF;

    IF COUNTER[2].Q[3..0]==B"1010" THEN RESET[2]=vcc; ELSE RESET[2]=gnd; END IF;

    IF COUNTER[3].Q[3..0]==B"1010" THEN RESET[3]=vcc; ELSE RESET[3]=gnd; END IF;

    IF COUNTER[4].Q[3..0]==B"1010" THEN RESET[4]=vcc; ELSE RESET[4]=gnd; END IF;

    IF COUNTER[5].Q[3..0]==B"1010" THEN RESET[5]=vcc; ELSE RESET[5]=gnd; END IF;

    COUNTER[0].clock=clock;

    COUNTER[DIGITS-1..1].clock=RESET[DIGITS-2..0];

    Q[DIGITS-1..0][3..0]=COUNTER[DIGITS-1..0].Q[3..0];

    COUNTER[DIGITS-1..0].aclr=RESET[DIGITS-1..0]#aclr;

    COUNTER[0].cnt_en=COUNT_ENA;

END;

--Устройство управления индикатором

CONSTANT DATA_WITH = 8;

 

INCLUDE "LPM_COUNTER";

SUBDESIGN WH1602

(

    CLK                              : INPUT;

    IN[5..0][DATA_WITH-1..0]       : INPUT;

    D[DATA_WITH-1..0]                : BIDIR;

    E                                        : OUTPUT;

    RW                               : OUTPUT;

    RS                                     : OUTPUT;

)

VARIABLE

    clk_a                                  : NODE;

    Ddff[DATA_WITH-1..0]                     : dff;

    Din[DATA_WITH-1..0]                       : dff;

    Dmsh[DATA_WITH-1..0]          : NODE;

    _RW                                  : NODE;

    _RS                              : NODE;

    Eena                                  : NODE;

    Pause                                 : LPM_COUNTER WITH (LPM_WIDTH=9);

    STR                             : LPM_COUNTER WITH (LPM_WIDTH=4);

    LINE[DATA_WITH-1..0]          : NODE;

    ST                                     : MACHINE

              WITH STATES ( z0, p1, r1, p2, r2, p3, r3, p4,

                                                   r4, b4, c4, r5, b5, c5, r6, b6, c6, r7, b7, c7, r8, b8, c8,

                                                   ds, bs, cs, dz0, bz0, cz0, dz1, bz1, cz1 );

    Dtri[DATA_WITH-1..0]                      : TRI;

    OE                                     : NODE;

    INC[3..0]                           : NODE;

    INBUF[5..0][DATA_WITH-1..0]        : DFF;

    READ                                         : DFF;

 

BEGIN

    clk_a = dff(!clk_a, clk, vcc, vcc);

    Pause.clock = clk_a;

    -- outputs

    Ddff[DATA_WITH-1..0].d = Dmsh[DATA_WITH-1..0];

    Ddff[DATA_WITH-1..0].clk = !clk_a;

    Dtri[DATA_WITH-1..0].in = Ddff[DATA_WITH-1..0].q;

    D[DATA_WITH-1..0] = Dtri[DATA_WITH-1..0].out;

    Din[DATA_WITH-1..0].d = D[DATA_WITH-1..0];

    Din[DATA_WITH-1..0].clk = !dff (clk_a & Eena , clk, vcc, vcc);

    Dtri[DATA_WITH-1..0].oe = dff (OE, !clk_a, vcc, vcc);

 

    RW = dff (_RW, !clk_a, vcc, vcc);

    RS = dff (_RS, !clk_a, vcc, vcc);

    E = dff (clk_a & Eena , clk, vcc, vcc);

    -- machine

    ST.clk = clk_a;

    CASE ST IS

              WHEN z0 =>

                       Dmsh[DATA_WITH-1..0] = H"FF";   OE = vcc;

                       Eena = gnd;              _RW = gnd;             _RS = gnd;     Pause.aclr = vcc;

                       ST = p1;

              -- загрузка индикатора после включения питания

              -- пауза перед включением 21мс

              WHEN p1 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = gnd;    _RW = gnd;    _RS = gnd; Pause.aclr = gnd;

                       IF Pause.q[]==200 THEN ST = r1; ELSE ST = p1; END IF;

              -- INITIAL SETTING ONCE 00111000

              WHEN r1 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = p2;

              -- пауза 7 мс > 4.1 мс

              WHEN p2 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = gnd;    _RW = gnd;    _RS = gnd; Pause.aclr = gnd;

                       IF Pause.q[]==100 THEN ST = r2; ELSE ST = p2; END IF;

              -- INITIAL SETTING TWICE 00111000

              WHEN r2 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = p3;

              -- пауза 0.7 мс > 0.1 мс

              WHEN p3 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = gnd;    _RW = gnd;    _RS = gnd; Pause.aclr = gnd;

                       IF Pause.q[]==10 THEN ST = r3; ELSE ST = p3; END IF;

              -- INITIAL SETTING THIRD 00111000

              WHEN r3 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = p4;

              -- пауза 0.7 мс > 0.1 мс

              WHEN p4 =>

                       Dmsh[DATA_WITH-1..0] = H"38";    OE = vcc;

                       Eena = gnd;    _RW = gnd;    _RS = gnd; Pause.aclr = gnd;

                       IF Pause.q[]==10 THEN ST = r4; ELSE ST = p4; END IF;

              -- Function Set 0011NF**

              WHEN r4 =>

                       Dmsh[DATA_WITH-1..0] = H"3C";   OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = b4;

              WHEN b4 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = c4;

              WHEN c4 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = r5; ELSE ST = b4; END IF;

              -- Display ON/OFF = 00001DCB, Display ON,Cursor&Blink OFF

              WHEN r5 =>

                       Dmsh[DATA_WITH-1..0] = H"0C";   OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = b5;

              WHEN b5 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = c5;

              WHEN c5 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = r6; ELSE ST = b5; END IF;

              -- Entry Mode Set = 000001IS, Increment & Shift OFF

              WHEN r6 =>

                       Dmsh[DATA_WITH-1..0] = H"06";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = b6;

              WHEN b6 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = c6;

              WHEN c6 =>

                  Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = r7; ELSE ST = b6; END IF;

              -- Return Home

              WHEN r7 =>

                       Dmsh[DATA_WITH-1..0] = H"02";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = b7;

              WHEN b7 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = c7;

              WHEN c7 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = r8; ELSE ST = b7; END IF;

              -- Clear Display

              WHEN r8 =>

                       Dmsh[DATA_WITH-1..0] = H"01";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = b8;

              WHEN b8 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = c8;

              WHEN c8 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = b8; END IF;

              --формирование изображения

              WHEN ds =>

                       Dmsh[DATA_WITH-1..0] = LINE[];   OE = vcc;

                       Eena = vcc; RW = gnd; _RS = vcc; Pause.aclr = vcc;

                       ST = bs;

              WHEN bs =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = cs;

              WHEN cs =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF STR.q==H"F" THEN ST=dz0;

                       ELSIF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = bs; END IF;

              --перемещение в начало

              WHEN dz0 =>

                       Dmsh[DATA_WITH-1..0] = H"40";    OE = vcc;

                       Eena = gnd;    _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = bz0;

              WHEN bz0 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = cz0;

              WHEN cz0 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = dz1; ELSE ST = bz0; END IF;

 

              WHEN dz1 =>

                       Dmsh[DATA_WITH-1..0] = H"80";    OE = vcc;

                       Eena = vcc; _RW = gnd;    _RS = gnd; Pause.aclr = vcc;

                       ST = bz1;

              WHEN bz1 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;

                       ST = cz1;

              WHEN cz1 =>

                       Dmsh[DATA_WITH-1..0] = H"00";    OE = gnd;

                       Eena = gnd;    _RW = vcc; _RS = gnd; Pause.aclr = gnd;

                       IF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = bz1; END IF;

    END CASE;

 

 

    INBUF[5..0][DATA_WITH-1..0].clk=READ.q;

    INBUF[5..0][DATA_WITH-1..0].d=IN[5..0][DATA_WITH-1..0];

    IF ST==dz1 THEN READ.d=vcc; ELSE READ.d=gnd; END IF;

    READ.clk=clk;

    IF ST==ds THEN STR.clock=vcc; ELSE STR.clock=gnd; END IF;

    STR.aclr=READ.q;

    CASE STR.q[] IS

              WHEN H"1" => LINE[]=INBUF[5][DATA_WITH-1..0];

              WHEN H"2" => LINE[]=INBUF[4][DATA_WITH-1..0];

              WHEN H"3" => LINE[]=INBUF[3][DATA_WITH-1..0];

              WHEN H"4" => LINE[]=INBUF[2][DATA_WITH-1..0];

              WHEN H"5" => LINE[]=INBUF[1][DATA_WITH-1..0];

              WHEN H"6" => LINE[]=INBUF[0][DATA_WITH-1..0];

              WHEN H"7" => LINE[]=H"20";

              WHEN H"8" => LINE[]=H"43";

              WHEN H"9" => LINE[]=H"44";

              WHEN H"A" => LINE[]=H"45";

              WHEN H"B" => LINE[]=H"46";

              WHEN H"C" => LINE[]=H"47";

              WHEN H"D" => LINE[]=H"48";

              WHEN H"E" => LINE[]=H"49";

              WHEN H"F" => LINE[]=H"4A";

    END CASE;

END;

 


* промиль (миллионная часть, 10-6). Стабильность частоты
Допустимое отклонение частоты от номинального значения. Измеряется в процентах или в "ppm"



Дипломная работа

Счетное устройство видеоимпульсов на ПЛИС

Факультет: Физический Исполнитель: Ларин Кирилл               Владимирович
Кафедра: Радиофизика и электроника Группа: ФФ‑504
Специальность: 013800  –  Радиофизика и электроника Научный  руководитель: ОАО ЧРЗ «ПОЛЕТ», Инженер-конструктор 1 кат.,  Рацебуржинский С.Л.
    Рецензент: Доктор технических наук, ЮУрГУ, профессор,      Родионов В.В.

 

 

Дата защиты:  21 июня 2006г.

Оценка: отлично

 

 

Челябинск – 2006



Содержание

 

Введение................................................................................................. 3

1 Актуальность темы............................................................................. 3

2 Цели и задачи...................................................................................... 5

3 Анализ задания и выбор платформы................................................ 5

1. Составление схемы устройства......................................................... 7

2. Выбор элементов............................................................................... 9

2.1 Выбор ПЛИС. Описание внутренней структуры ПЛИС............... 9

2.2 Компаратор.................................................................................... 13

2.3 Генератор тактовой частоты......................................................... 15

2.4 Индикатор...................................................................................... 16

2.4.1 Описание контроллера HD44780............................................... 17

2.4.2 Подключение ЖКИ-модуля....................................................... 18

2.4.3 Программирование и управление ЖКИ-модуля:..................... 25

2.5 Стабилизаторы.............................................................................. 32

2.5 Программатор ByteBlaster............................................................ 34

2.6 Сборка устройства......................................................................... 35

3. Конфигурирование ПЛИС.............................................................. 36

3.1 Система проектирования MAX+plus II........................................ 36

3.2 Описание программы конфигурации ПЛИС................................ 36

3.2.1 Антидребезговая система (antibounce)....................................... 37

3.2.1,1 Встроенная макрофункция – счетчик lpm_counter................ 38

3.2.2 Двоичо-десятичный счетчик (counter10).................................... 40

3.2.3 Устройство управлением индикатора (wh1602LCD)................ 41

3.2.3,1 Машина конечных автоматов................................................. 42

3.2.4 Делитель тактовой частоты для работы индикатора(divFreq). 46

3.2.5 Общая структура программы.................................................... 46

Заключение........................................................................................... 47

Литература........................................................................................... 48

Приложение 1 (Принципиальная схема устройства)......................... 49

Приложение 2 (Список портов ввода вывода ПЛИС epm 3256a)..... 50

Приложение 3 (Текст программы)...................................................... 51


Введение


Актуальность темы

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

Основной частью приборов для регистрации ядерных излучений является элемент, воспринимающий излучения, - детектор излучения. Для этой цели используются счетчики разных типов, позволяющие зарегистрировать попавшую в него частицу в виде кратковременного электрического тока – импульса. Наиболее широкое применение имеют газоразрядные счетчики, работа которых основана на ионизирующем действии ядерного излучения. Постепенно их начинают вытеснять сцинтилляционные счетчики (СС), действие которых основано на регистрации вспышек света, возникающих в некоторых веществах под ударами частиц. Основными элементами такого счетчика являются вещество, люминесцирующее под действием заряженных частиц (сцинтиллятор), и фотоэлектронный умножитель (ФЭУ). В начале 20 века визуальные наблюдения световых вспышек (сцинтилляций) под действием ионизирующих частиц (-частиц, осколков деления ядер) были основным методом ядерной физики. Позднее СС был полностью вытеснен.

Его возвращение в ядерную физику произошло в конце 40-х гг., когда для регистрации сцинтилляций были использованы многокаскадные ФЭУ с большим коэффициентом усиления, способные зарегистрировать чрезвычайно слабые световые вспышки. Принцип действия СС состоит в следующем: заряженная частица, проходя через сцинтиллятор, наряду с ионизацией атомов и молекул возбуждает их. Возвращаясь в невозбуждённое (основное) состояние, атомы испускают фотоны (Люминесценция). Фотоны, попадая на катод ФЭУ, выбивают электроны (Фотоэлектронная эмиссия), в результате чего на аноде ФЭУ возникает электрический импульс, который далее усиливается и регистрируется. Детектирование нейтральных частиц (нейтронов, -квантов) происходит по вторичным заряженным частицам, образующимся при взаимодействии нейтронов и -квантов с атомами сцинтиллятора.

Для того чтобы световая вспышка была зарегистрирована ФЭУ, необходимо, чтобы спектр излучения сцинтиллятора совпадал со спектральной областью чувствительности фотокатода ФЭУ, а материал сцинтиллятора был прозрачен для собственного излучения. Для регистрации «медленных нейтронов» в сцинтиллятор добавляют Li или В. Для регистрации «быстрых нейтронов» используются водородсодержащие сцинтилляторы. Для спектрометрии -квантов и электронов высокой энергии используют Nal (Tl), обладающий большой плотностью и высоким эффективным атомным номером.

ФЭУ, предназначенные для СС, должны обладать высокой эффективностью фотокатода (до 2,5%), высоким коэффициентом усиления (108—108), малым временем собирания электронов (~ 10–8 сек), при высокой стабильности этого времени. Последнее позволяет достичь разрешающей способности по времени СС 1–9 сек. Высокий коэффициент усиления ФЭУ наряду с малым уровнем собственных шумов делает возможной регистрацию отдельных электронов, выбитых с фотокатода. Сигнал на аноде ФЭУ может достигать 100 В в виде импульсов трапециевидной формы (видеоимпульсов).

Чтобы не только обнаружить ядерное излучение, но и измерить его интенсивность, недостаточно одного детектора излучения. Необходимы еще электронные устройства, подсчитывающие число электрических импульсов, то есть число попавших в детектор частиц, и устройства, показывающие результат подсчета [1].

Данная работа посвящена разработке электронного устройства считающего число электрических импульсов.

Цели и задачи

1. Необходимо реализовать счетное устройство апериодических видеоимпульсов с заданными параметрами:

· Диапазон изменения амплитуды входного сигнала 5…20В;

· Длительность импульса ф, не менее 10 нс;

· Минимальный интервал между импульсами , 10 мкс.

2.  Для отображения счета необходимо наличие индикатора. Реализовать индикатор, на котором высвечивается число импульсов в непрерывном режиме счета через некоторый промежуток времени.

3.  Управление устройством осуществляется посредством кнопок:  старт/стоп – (начало счета/конец счета), сброс – (сброс счетчика).

3 Анализ задания и выбор платформы

 Конечно, реализовать простой счетчик на дискретных элементах (триггерах), что может быть проще? Однако сложность заключается в том, что разработка счетчика на дискретных элементах потребует сложной настройки, что увеличит время разработки и цену устройства. Для моих целей нужен высокоскоростной счетчик. Реализовать его нужно на современной элементной базе. Платформы, на которых можно реализовать счетчик, на сегодняшний день нашлось две ПЛИС и микроконтроллеры, был сделан выбор в пользу первой, то есть ПЛИС  так как она легче поддается функциональным изменениям (в дальнейшем это устройство может быть использовано в других целях) и тактовая частота обработки сигнала не фиксирована как у микроконтроллера, её можно задавать аппаратно и делить её в зависимости от необходимости. Итак ПЛИС (Программируемая Логическая Интегральная Схема ).

Из наиболее известных производителей ПЛИС следует отметить фирму Altera. Небольшая, вначале, компания удачно решила задачи стоящие перед ними в начале (определить элементарные базис ПЛИС, разработать математические методы синтеза устройств в выбранном базисе, создать интегрированную систему проектирования цифровых устройств на ПЛИС), путем постепенного согласованного усложнения элементной базы и средств проектирования. Ее успех ко второй половине 90-х годов вывели её в число основных производства микросхем ПЛИС.

Была выбрана ПЛИС семейства MAX 3000 EPM3256A

 

Тип микросхемы Выходы I/O Триггеры Ячейки Мах частота MHz
EPM3032A 4 30 32 32 192
EPM3064A 4 30 62 64 64 192
EPM3128A 4 76 92 128 128 182
EPM3256A 4 112 154 256 256 156

 

Технология EEPROM обеспечивает сохранение конфигурации при отключении питания. Число логических эквивалентных вентилей ПЛИС находится в диапазоне 600-5000, количество программируемых пользователем выводов 44-208. Микросхемы могут быть запрограммированы с помощью программатора, в этом случае можно использовать все линии Ввода/Вывода (I /O). Кроме того, все ПЛИС имеют возможность внутрисистемного программирования (in-system programmability) через порт типа JTAG с использованием устройств типа BitBlaster, ByteBlaster и MasterBlaster, тогда 4 порта JTAG резервируются для этой цели. Выводы имеют возможность эмуляции режимов открытого коллектора и третьего (высокоимпедансного) состояния [2].



Дата: 2019-12-22, просмотров: 229.