| |||
А0 |
RD |
WR |
Функция |
0 |
0 |
1 |
Чтение флага статуса |
1 |
0 |
1 |
Чтение данных дисплея и адрес курсора |
0 |
1 |
0 |
Запись данных дисплея и параметров |
1 |
1 |
0 |
Запись команды |
RD или E – сигнал чтения или разрешения. Когда выбран интерфейс семейства 8080, этот сигнал действует как активный низко уровневый строб-импульс чтения.
WR или R/W – сигнал записи. Когда выбран интерфейс семейства 8080, этот сигнал действует как активный низко уровневый строб-импульс чтения. Шина данных защёлкивается по переднему фронту этого сигнала.
CS - выбор чипа. Этот активный по низкому уровню вход разрешает SED1335F.
RES – сброс. Этот активный по низкому уровню вход осуществляет аппаратный сброс SED1335F.
Схема представлена на рисунке 3.8.
Рисунок 3.8 – Схема подключения ЖКД
Аналоговый сигнал подаётся на вход Ain1 или Ain2. Сигнал ослабляется или усиливается по амплитуде в зависимости от заданного количества вольт на деление. После этого он преобразуется в дифференциальную форму трансформатором. И затем попадает на аналоговый вход АЦП. АЦП оцифровывает сигнал и каждые 25 нс на цифровых выходах АЦП появляется цифровой код соответствующий определённому уровню напряжения. Этот цифровой код считывается МК и записывается в память XRAM через промежуток времени, зависящий от количества секунд на деление. То есть происходит прореживание цифрового кода.
После записи в память, МК не реагирует ни на какие прерывания, а выводит информацию о сигнале в виде осциллограммы на ЖКД. После вывода одного кадра происходит считывание следующего кадра с выходов АЦП.
5 Описание программы для микроконтроллера
Разработка программы для МК C8051F120 фирмы Silicon Laboratories с системой команд совместимой с MCS – 51 проводилось с помощью программного продукта Keil mVision2 версии 2.40a, симулирующего работу МК.
Программа состоит из блока настройки портов ввода – вывода, генератора, периферийных устройств, прерываний, ЖКД и подпрограммы для ввода данных с АЦП - InputADC. На рисунке 5.1 показана блок – схема алгоритма программы для МК.
Используемые в программе переменные:
– kfn – коэффициент частоты дискретизации (n=1 или 2 – номер канала);
– CoefAmplif – содержит число выводимое в порт P6 для задания коэффициента усиления;
– i – переменна – счётчик;
– Num – переменная, используема для записи в XRAM последовательности чисел;
– Switch – порт, управляющий аналоговыми коммутаторами;
– Button_kf – порт, к которому подключены кнопки задающие kf
– Button_CefAmplif - порт, к которому подключены кнопки задающие CefAmplif
– Padc1 – АЦП канал 1;
– Padc2 – АЦП канал 2;
Сначала программа подключает файл с определением регистров специального назначения, которые имеются в данном микроконтроллере. Регистрам общего назначения присваиваются имена переменных приведённых выше. Порты P4 и P5 подключены к цифровым выходам АЦП и настроены как цифровые входы с открытым стоком. С помощью приоритетного декодера матрицы на разряд P0.0 выводится сигнал тактирования АЦП с частотой SYSCLK/4 (SYSCLK=100 МГц).
В переменную kf производится запись в младшие четыре разряда – коэффициента kf1 для задания частоты дискретизации сигнала с канала 1 и в старшие четыре разряда - коэффициента kf2 для задания частоты дискретизации сигнала с канала 2. Связь значения коэффициента и частоты дискретизации приведена в таблице 3.1 (n=1 или 2).
Таблица 5.1 – Связь коэффициента частоты и периода дискретизации
kfn |
f, Гц |
T, с |
TimeOnDiv |
1 |
10М |
100н |
4 мкс |
2 |
5М |
200н |
5 мкс |
3 |
2.5М |
400н |
10 мкс |
4 |
500к |
2мк |
50 мкс |
5 |
250к |
4мк |
100 мкс |
6 |
50к |
20мк |
500 мкс |
7 |
25к |
40мк |
1 мс |
8 |
5к |
200мк |
5 мс |
9 |
2.5к |
400мк |
10 мс |
10 |
500 |
2м |
50 мс |
11 |
250 |
4м |
100 мс |
Частота дискретизации соответствующая количеству секунд на деление определяется по формуле:
, (3.3)
где n – количество байт содержащих информацию об уровне сигнала;
TimeOnDiv – количество секунд на деления;
tmax и tmin – границы временного интервала.
Скорость работы МК позволяет сохранять информацию о сигнале за 90 нс. Поэтому максимальная частота дискретизации сигнала
(5.1) .
Необходимая частота дискретизации сигнала задаётся с помощью задания задержки между считываниями данных с АЦП. Для создания задержки используется таймер TMR3. Таймер тактируется системным тактовым сигналом, и изменение значения таймера на 1 происходит каждые 10 нс. Для создания необходимой задержки в таймер записывается число, с которого он начинает счёт. Флаг переполнения таймера проверяется до тех пор, пока таймер не переполнится. Таким образом, создаётся задержка с точностью до 10 нс.
В переменную CoefAmplif загружается байт данных, содержащий информацию о коэффициенте усиления и о виде измеряемого напряжения (переменного или постоянного). Биты 7 и 6 управляют ключами S2A и S2C соответственно, которые подключают или отключают конденсатор. Биты 5, 4, 3 и 2, 1, 0 задают коэффициент усиления или ослабления Ku для канала 1 и канала 2 соответственно.
Связь Ku и вида измеряемого напряжения с числом в переменной CoefAmplif приведена в таблице 5.2 (n=1 или 2 – номер канала).
Таблица 5.2 – Зависимость Ku и вида напряжения от CoefAmplif
CoefAmplif |
Вид напряжения |
Kun |
XX 000 000 |
X |
1/2 |
XX 001 001 |
X |
1/5 |
XX 010 010 |
X |
1/10 |
XX 011 011 |
X |
10 |
XX 100 100 |
X |
1 |
XX 000 000 |
DC |
X |
XX 000 000 |
AC |
X |
Ниже представлена блок-схема программы для МК.
Рисунок 5.1 – Блок схема алгоритма программы для МК
Ниже приведено более подробное описание настройки контроллера SED1335.
После вывода кода 40h (команда «System Set») на шину данных контроллера, производится вывод восьми байтов (P1 – P8), содержащих параметры команды.
В программе задаются следующие значения этих параметров:
P1=30h.
M0=0 - внутренний генератор символов ROM.
М1=0 - генератор символов RAM1; 32 знака.
М2=0 - высота символа 8 пикселов (2716 или эквивалент ROM).
W/S=0 - однопанельное управление
IV=1- нет коррекции верхней строки экрана (нет смещения)
T/L=1 - режим ТВ
DR=0 - нормальная операция
P2=87h.
FX=7h - ширина символа равна 8 пикселей.
WF=1 - двухкадровое управление АС
P3 = FY= 07h - высота символа равна 8 пикселей.
P4 = С/R = 27h - адресный диапазон равен 40 байтов на одну строку дисплея.
P5 = TC/R =39h - длина строки равна 58 байтов.
P6 = L/F = EFh - количество линий на кадр равно 240.
P7 = AL = 28h и P8 = AH = 0 - горизонтальный адресный диапазон (текстовый) равен 40.
Значения параметров команды «Scroll» (код 44hрр):
P1 = SAD 1L = 0 и P2 = SAD1H = 0 - начальный адрес первого экранного блока прокрутки.
P3 = SL1 = P6 = SL2 = EFh - 255 строк на прокручиваемый блок.
P4 = SAD2L = B0h и P5 = SAD2H = 04h - начальный адрес второго блока прокрутки.
P7 = SAD3L = 0h и P8 = SAD3H = 0h - начальный адрес третьего блока прокрутки.
P9 = SAD4L = 0h и P10 = SAD4H = 0h - начальный адрес четвёртого блока прокрутки.
Значения параметров команды «CURSOR FORM» (код 5Dhрр):
P1= CRX = 04h – ширина курсора равна 5 пикселей.
P2 = 86h.
CRY = 6h - высота курсора равна 7 пикселей
CM = 1 – блочный курсор.
Далее выставляется команда «CURSOR DIRECTION» с кодом 4Сhрр. Два младших бита кода команды CD1 и CD2 сброшены, поэтому курсор будет двигаться вправо.
Значения параметра команды «HORIZONTAL SCROLL RATE» (код 5Ahрр):
P1 = 0 – ноль пикселей для прокрутки.
Значения параметра команды «OVERLAY» (код 5Ahрр): P1 = 01h.
MX0 = 0 и MX1 = 1 - метод композиции наслоённого экрана следующий: (L1 and L2) or L3.
DM1 = DM2 = 0 – текстовый режим отображения блоков экрана 1 и 3, соответственно.
Командой «DISPLAY ON/OFF» (код 59h) включается дисплей (P1=16h).
Изображение выводится на дисплей сканированием его памяти. Курсор двигается слева направо и сверху вниз. Каждый бит в памяти соответствует пикселю на дисплее. Контроллер настроен так, что ширина горизонтальной линии равна 40 байтов (40*8=320) и этих линий 240. Контроллер сканирует память дисплея, пока не достигнет конца ряда, а потом переходит на следующий ряд. То есть адрес начала ряда с номером n равен 40*n или 28h*n.
Информация о сигнале с канала 1 хранится в XRAM микроконтроллера по адресу 000h – 0F0h (240 байтов).
Для отображения осциллограммы по вертикали нужно 256 пикселей, так как АЦП 8 – ми разрядный. По горизонтали будем использовать 240 пикселей. То есть размер графического экрана равен байтов. Эти байты будут храниться в XRAM по адресу 0200h – 1FFFh.
Коду 0 соответствует напряжение -0.512 В, а коду 255 соответствует напряжение +0.512 В. Коду 128 – напряжение 0 В. В каждом байте, которые хранятся по адресу 000h – 0F0h содержится номер пикселя в строке дисплея, который нужно зажечь. Адрес байта – это номер строки (Рисунок 5.2).
Рисунок 5.2 – Соответствие байтов памяти дисплея и положения пикселей на дисплее.
На рисунке 5.3 более подробно приведены блок-схемы подпрограмм для записи команд и данных в память дисплея.
Перед выводом осциллограммы посылается команда с кодом 46h «CSRW» - установка адреса курсора. У неё два параметра – два байта шестнадцатиразрядного адреса. Мы устанавливаем курсор в начало графической страницы.
Осциллограмма выводится путём подачи команды «MWRITE» контроллеру SED1335. После выставления кода команды 42h производится посылка байтов данных в память дисплея.
Текст программы представлен в приложении A. В программе приведена только подпрограмма InputADC1, так как подпрограмма InputADC2 – такая же.
Изменены лишь названия переменных.
Рисунок 5.3 – Блок схема алгоритма подпрограммы WrComm и WrData
240 команд идущих подряд, записывающих данные с АЦП с частотой дискретизации 10 МГц также не приведены.
Программа для МК цифрового осциллографа.
;--------------------------------------------------------------------------------
; НГТУ РЭФ Кафедра ЭП 2006г.
; Азанов М.А. РЭ3-11
; FILE NAME : dig_osc.asm
; TARGET MCU : C8051F120
; DESCRIPTION : Программа для МК цифрового осциллографа.
; NOTES : Прием данных с АЦП, сохранение выборки в памяти, вывод данных
; на ЖКИ, прием данных о параметрах сигнала и установка нужной
; частоты дискретизации и уровня сигнала
;----------------------------------------------------------------------------------
$include (c8051f120.inc)
;-------------------------
;Объявление переменных
;-------------------------
kf equ R0 ;коэффициент частоты дискретизации
; kfn f Т
; 1 10М 100н
; 2 5М 200н
; 3 2.5М 400н
; 4 500к 2мк
; 5 250к 4мк
; 6 50к 20мк
; 7 25к 40мк
; 8 5к 200мк
; 9 2.5к 400мк
;10 500 2м
;11 250 4м
CoefAmplif equ R2 ;коэффициент усиления
i equ R3 ;переменная - cчётчик1
Num equ R4
kf1 equ R5
kf2 equ R6
switch equ P2 ;порт, управляющий аналоговыми коммутаторами
Button_kf equ P6
Button_CoefAmplif equ P7
Padc1 equ P4 ;АЦП канал 1
Padc2 equ P5 ;АЦП канал 2
;-----------------------------------------------------------------------------
; Векторы прерывания и сброса
;-----------------------------------------------------------------------------
cseg AT 0 ;Определение сегмента в адресном пространсве CODE по адресу 0
jmp Config ;Относительный переход на Config
;------------------------------------
; Объявленеие сегмента Main
;------------------------------------
Main segment CODE ;объявление сегмента Main, имеющего класс памяти CODE
rseg Main ;выбор сегмента Main
При использовании материалов активная ссылка на источник обязательна.