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

Приборы для регистрации ядерных излучений. Делитель тактовой частоты для работы индикатора. Генератор тактовой частоты. Программирование и управление ЖКИ-модуля. Устройство управления индикатором, двоичо-десятичный счетчик. Порты ввода вывода ПЛИС.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид дипломная работа
Язык русский
Дата добавления 17.01.2011
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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 Блок-схема устройства управления индикатором

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

Обыкновенный двоичный счетчик выступает в роли делителя тактовой частоты для работы индикатора т.к. индикатору нужна частота меньше чем, выдает кварцевый генератор. Коэффициент деления определяется расчетным и опытным путем (подбором).

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

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

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

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

Заключение

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

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

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

Рис 4.1 Плата готового счетного устройства.

Литература

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

2. Бродин В.Б., Калинин А.В., «Системы на микроконтролерах и БИС программируемой логики» - М.: Эконом, 2002.

3. Вицын Н. «Современные тенденции развития систем автоматизированного проектирования в области электроники» // Chip News, № 1, 1997. С. 12-15.

4. Губанов Д. А., Стешенко В. Б., Храпов В. Ю., Шипулин С. Н. «Перспективы реализации алгоритмов цифровой фильтрации на основе ПЛИС фирмы ALTERA» // Chip News, № 9-10, 1997, с. 26-33.

5. Тех. Док. «One Technology Way, P.O. Box9106, Norwood, MA 02062-9106, U.S.A.», http://www.analog.com

6. LCD Controller/Driver LSI. Data Book. © 1994 Hitachi America Ltd.

7. «Алфавитно-цифровые индицирующие ЖК-модули фирмы Powertip.» Каталог, 1-е издание, © 1998 КТЦ-МК.

8. Микросхема: СЕ110. Техническое описание, 1-е издание, © 1997 КТЦ-МК,

9. Микросхема: DB-CE110. Техническое описание, 1-е издание, © 1997 КТЦ-МК.

10. Тех. Док.«MC78TXX», Fairchild Semiconductor Corporation, 2002, http://www.fairchildsemi.com

11. Тех. Док. «LMS1585A», National Semiconductor Corporation, April, 2000, http://www.national.com, Email: europ.support@nsc.com

12. Тех. Док. «ByteBlasterMV Parallel Port Download Cable» Altera Corporation, July, 2002, Version 3.3

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

Приложение 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;

Размещено на Allbest.ru


Подобные документы

  • Основные узлы дискретного устройства: генератор прямоугольных импульсов, параллельно-последовательный счетчик, преобразователь кодов, делитель частоты, сумматор. Описание работы дискретного устройства. Выбор микросхем. Схема электрическая принципиальная.

    курсовая работа [3,7 M], добавлен 28.01.2013

  • Принцип работы Wi-Fi. Излучение от мобильных устройств в момент передачи данных. Определения тактовой частоты для OFDM. Задача на определение объёма сигнала, создаваемого симфоническим оркестром. Устройство и принцип работы панели плазменного телевизора.

    курсовая работа [1,4 M], добавлен 12.08.2014

  • Предпосылки к развитию ПЛИС. Сравнительный анализ ПЛИС, СБИС и микроконтроллеров. Обзор аналогов: компараторы LM311 и LM339, на операционных усилителях, Р300Х, сравнительные устройства. Создание схемы устройства. Сравнение мировых производителей ПЛИС.

    курсовая работа [2,0 M], добавлен 11.07.2011

  • Разработка расширителя портов ввода-вывода и особенности его применения. Программируемая логическая интегральная схема CPLD. Плис CoolRunner-II, главные функции. Листинг модулей на языке Verilog. Временная диаграмма, внутреннее содержание модуля.

    курсовая работа [1,9 M], добавлен 26.01.2013

  • Генератор звуковой частоты ГЗЧ-2500: предназначение, основные технические характеристики, масса, габариты, устройство и принцип работы. Гарантийные обязательства, сведения о рекламациях. Меры предосторожности при обращении с техническими устройствами.

    курсовая работа [1,2 M], добавлен 22.01.2016

  • Структура фрагмента процессора. Функциональный состав процессорного блока. Входные/выходные сигналы распределителя. Микропрограмма управления для команды. Устройство управления и синхронизации, принцип его работы. Порты ввода, вывода микроконтроллера.

    курсовая работа [653,2 K], добавлен 17.04.2015

  • Параметры делителя частоты. Теоретическое обоснование схемного решения. Асинхронный двоичный счетчик в качестве делителя частоты. Упрощенная структурная схема делителя. Ввод коэффициента деления. Составление электрической принципиальной схемы устройства.

    курсовая работа [1,2 M], добавлен 08.01.2013

  • Принцип работы делителя частоты импульсов на 5 (JK-триггер). Синхронный недвоичный счетчик (на JK-триггерах). Сдвигающий регистр (на D-триггерах). Скремблеры с начальной установкой и самосинхронизирующиеся. Генератор псевдослучайной последовательности.

    реферат [1,0 M], добавлен 24.12.2010

  • Разработка структурной схемы проектируемого модуля. Описание генератора опорной частоты, подбор делителя частоты, мультиплексора. Общая погрешность коммутации сигналов. Моделирование работы счетчиков–делителей в среде Electronics Workbench 5.12.

    курсовая работа [1,0 M], добавлен 15.06.2011

  • Цифровой делитель частоты: сущность и предназначение. Разработка функциональной и принципиальной схемы устройства. Определение источника питания для счетчика, гальванической развязки и операционного усилителя. Расчет устройств принципиальной схемы.

    курсовая работа [1,8 M], добавлен 24.09.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.