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 - начальный адрес
первого экранного блока прокрутки.
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 МГц также не приведены.
ПРИЛОЖЕНИЕ
A
Программа
для МК цифрового осциллографа.
;--------------------------------------------------------------------------------
; НГТУ РЭФ Кафедра ЭП 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
using 0 ;использовать банк
регистров 0
Config:
mov SP,#07Fh ;стек расположен по
адресу 80h в ОЗУ
;----------------------------------------------------------------
; Настройка WDT
;----------------------------------------------------------------
;Отключение WDT
clr EA ;Запретить все
прерывания
mov WDTCN, #0DEh
mov WDTCN, #0ADh
setb EA
;----------------------------------------------------------------
; Настройка портов ввода-вывода
;----------------------------------------------------------------
mov SFRPAGE, #00Fh ;Переход на
страницу F SFR
;Связывание периферийных устройств с
разрядами портов
mov XBR0, #000h
mov XBR1, #080h ;биты SYSCKE
T2EXE T2E INT1E T1E INT0E T0E CP1E
;значения 1 0
0 0 0 0 0 0
;/SYSCLK подключен
mov XBR2, #040h ;биты WEAKPUD
XBARE CNVST2E T4EXE T4E UART1E EMIFLE CNVST0E
;значения 0
1 0 0 0 0 0 0
;Разрешить установленные
перемычки
;Настройка режимов вывода разрядов портов
;1 - режим Push-Pull
;0 - режим Open-Drein
mov P0MDOUT, #03Fh
;Результат настройки портов ввода-вывода
;порт P0
;P0.0 = SYSCLK (Push-Pull Output)(Digital)
;P0.1 = GP I/O (Push-Pull Output)(Digital)
;P0.2 = GP I/O (Push-Pull Output)(Digital)
;P0.3 = GP I/O (Push-Pull Output)(Digital)
;P0.4 = GP I/O (Push-Pull Output)(Digital)
;P0.5 = GP I/O (Push-Pull Output)(Digital)
;P0.6 = GP I/O (Open-Drain
Output/Input)(Digital)
;P0.7 = GP I/O (Open-Drain
Output/Input)(Digital)
mov P1MDOUT, #0FFh
mov P3MDOUT, #0FFh
;----------------------------------------------------------------
; Настройка генератора (SYSCLK=100 МГц и на
P0.6 выводится 50 МГц )
;----------------------------------------------------------------
mov SFRPAGE, #00Fh
mov OSCICN, #083h ;1 ;биты
IOSCEN IFRDY - - - - IFCN1 IFCN0
;значения 1
0 1 1
;внутренний
генератор разрешён
;частота не
программируется
;значение
предделителя = 1 (SYSCLK=25 МГц)
mov PLL0CN, #000h ;2 ;PLL
использует в качестве опорной частоты
;частоту
внутреннего генератора
mov SFRPAGE, #000h
mov FLSCL, #030h ;3 ;биты - - FLRT - - - FLWE
;значения 1
1 0
;стирание и запись
Flash памяти запрещена
;Память работает на
частоте SYSCLK <= 100 MHz
mov SFRPAGE, #00Fh
mov PLL0CN, #001h ;4 ;PLL включен
mov PLL0DIV, #001h ;5 ;предделитель
PLL установлен в 1
mov PLL0FLT, #001h ;6 ;диапазон
частот, которые делятся 19-30 МГц
;7 ;выходная частота
PLL = 65-100 МГц
mov PLL0MUL, #004h ;8 ;коэффициент
умножения PLL равен 4
;задержка - 5 мкс ;9
mov i, #040h ;установка
задержки
djnz i, $ ;i-- и переход
на себя, если не 0
mov PLL0CN, #003h ;10 ;включение
PLL
mov i, #0FFh ;установка
задержки
PLL_WAIT:
dec i
mov ACC, i ;если нет
синхронизации с PLL в течении 5us,
jz PLL_NOWAIT ;то ошибка в
установках PLL
mov ACC, PLL0CN
jnb ACC.4, PLL_WAIT ;задержка до
появления синхроимпульсов с PLL
mov CLKSEL, #022h ;системная частота
берётся с PLL и
;делится на 4 перед
выводом на P0.0
PLL_NOWAIT:
;----------------------------------------------------------------
; Настройка таймера
;----------------------------------------------------------------
;таймер 3 используется для задания частоты
дискретизации сигнала с АЦП
mov SFRPAGE, #001h;
mov TMR3CF, #008h ; Таймер 3
тактируется от частоты SysClk
;----------------------------------------------------------------
; Настройка прерываний
;----------------------------------------------------------------
mov SFRPAGE, #000h
mov IE, #000h ;Запретить все
прерывания
mov IP, #000h ;Все
устройства имеют низкий приоритет
;-----------------------------------------------------------------
; Главная часть программы
;-----------------------------------------------------------------
; Настройка контроллера SED1335
ConfigSED1335:
mov R1,#40h ;установка системы
lcall WrComm
mov DPTR,#msg1 ;параметры установки
системы
lcall WrData
mov R1,#44h ;прокрутка
lcall WrComm
mov dptr,#msg2 ;параметры прокрутки
lcall WrData
mov r1,#5Dh ;форма курсора
lcall WrComm
mov dptr,#msg3 ;параметры курсора
lcall WrData
mov r1,#4Ch ;направление курсора
lcall WrComm
mov R1,#5Ah ;прокрутка по точкам
lcall WrComm
mov DPTR,#msg18 ;параметр прокрутки
по точкам
lcall WrData
mov dptr,#5Bh ;наложение
lcall WrComm
mov dptr,#msg4 ;параметр наложения
lcall WrData
mov r1,#59h ;включение/выключение
дисплея
lcall WrComm
mov dptr,#msg5; параметр дисплея
lcall WrData
Dig_osc:
mov kf,Button_kf
;Выделение битов b2,b1,b0 и запись в kf1
mov A, kf
anl A, #007h
mov kf1, A
;Выделение битов b5,b4,b3 и запись в kf2
mov A, kf
RR A
RR A
RR A
anl A, #007h
mov kf2, A
mov CoefAmplif,Button_CoefAmplif
mov switch,CoefAmplif
call InputADC1
call Converting
; Вывод осциллограммы
mov R1,#46h; установка курсора
lcall WrComm
mov DPTR,#msg6
lcall WrData
mov R1,#42h; запись в память дисплея
lcall WrComm
mov DPTR,#00h
M0: movx A, @DPTR ;загрузка в A
данных из XRAM
cjne A, #0A1h, M1 ;загружены
все данные?
ljmp M2
M1:
mov R1, A
clr p3.2 ;a0=0=данные
mov A, R1 ; послать байт данных
mov P1, A
clr P3.0 ; CS - строб
clr P3.1 ; дисплея
setb P3.1
setb P3.0
inc DPTR
sjmp M0 ; следующий байт
M2:
sjmp Dig_osc
; Подпрограммы
; WrComm посылает байт в контроллер в виде
команды
WrComm:
setb P3.2 ; a0=1=команда
WrComm_1:
mov A, R1 ; послать байт данных
mov P1, A
clr P3.0 ; CS - строб
clr P3.1 ; дисплея
setb P3.1
setb P3.0
ret
Write: clr p3.2 ;a0=0=данные
sjmp WrComm_1
; WrData посылает байт на который указывает
; DPTR в контроллер ввиде данных.
WrData: clr A
movc A, @A+DPTR ;загрузка в A
значения параметра, записанного в ПЗУ
cjne A, #0A1h, WrData1;загружены все
параметры?
ret
WrData1:
mov R1, A
lcall Write ; отправить
inc DPTR
sjmp WrData ; следующий байт
;-----------------------------------------------------------------
; Подпрограмма ввода с канала 1 АЦП
;-----------------------------------------------------------------
InputADC1:
mov SFRPAGE, #00Fh
;Ввод в XRAM 240 байтов
cjne kf1,#001h,_5MHz1
;--------------------------
;Частота дискретизации 10 МГц
;--------------------------
_10MHz1:
mov DPTR, #000h ;3
mov ACC, Padc1 ;3
movx @DPTR, A ;3
nop ;1
mov DPTR, #001h
mov ACC, Padc1
movx @DPTR, A
nop
mov DPTR, #002h
mov ACC, Padc1
movx @DPTR, A
nop
; .
; .
; .
mov DPTR, #0EFh
mov ACC, Padc1
movx @DPTR, A
nop
;---------------------------
;Частота дискретизации 5 МГц
;---------------------------
_5MHz1:
cjne kf1, #002h, _2_5MHz1
mov DPTR, #000h
Input1_2:
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
;задержка 70 нс
nop
nop
nop
nop
nop
nop
nop
cjne A, DPL, Input1_2
;-----------------------------
;Частота дискретизации 2.5 МГц
;-----------------------------
_2_5MHz1:
cjne kf1, #003h, _500KHz1
; Задание числа c которого считает
таймер
mov DPTR, #000h
Input1_3:
mov A, Padc1 ;2
movx @DPTR, A
inc DPTR
mov A, #0F0h
;задержка 270 нс
mov i,#008h ;2
djnz i,$ ;3
nop
nop
cjne A, DPL, Input1_3
;Частота дискретизации 500 КГц
;-----------------------------
_500KHz1:
cjne kf1, #004h, _250KHz1
; Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3H,#0FFh
mov RCAP3L,#05Ch
mov DPTR, #000h
Input1_4:
mov SFRPAGE, #00Fh ;3
mov A, Padc1 ;2
movx @DPTR, A ;3
inc DPTR ;1
mov A, #0F0h ;2
mov SFRPAGE, #001h ;3
mov TMR3CN, #004h ;3
;задержка 1690 нс
jnb TMR3CN.7,$ ;4
nop
nop
mov TMR3CN,#000h ;3
mov TMR3H,#0FFh ;3
mov TMR3L,#05Ch ;3
cjne A, DPL, Input1_4 ;5
;-----------------------------
;Частота дискретизации 250 КГц
;-----------------------------
_250KHz1:
cjne kf1, #005h, _50KHz1
; Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3H,#0FEh
mov RCAP3L,#094h
mov DPTR, #000h
Input1_5:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 3690 нс
jnb TMR3CN.7,$
nop
nop
mov TMR3CN,#000h
mov TMR3H,#0FEh ;3
mov TMR3L,#094h ;3
cjne A, DPL, Input1_5
;-----------------------------
;Частота дискретизации 50 КГц
;-----------------------------
_50KHz1:
cjne kf1, #006h, _25KHz1
;Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3H,#0F8h
mov RCAP3L,#054h
mov DPTR, #000h
Input1_6:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 19690 нс
jnb TMR3CN.7,$
nop
nop
mov TMR3CN,#000h
mov TMR3H,#0F8h
mov TMR3L,#054h
cjne A, DPL, Input1_6
;-----------------------------
;Частота дискретизации 25 КГц
;-----------------------------
_25KHz1:
cjne kf1, #007h, _5KHz1
mov SFRPAGE, #001h
mov RCAP3H,#0F0h
mov RCAP3L,#084h
mov DPTR, #000h
Input1_7:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 39 690 нс
jnb TMR3CN.7,$
nop
nop
mov TMR3CN,#000h
mov TMR3H,#0F0h
mov TMR3L,#084h
cjne A, DPL, Input1_7
;-----------------------------
;Частота дискретизации 5 КГц
;-----------------------------
_5KHz1:
cjne kf1, #008h, _2_5KHz1
mov SFRPAGE, #001h
mov RCAP3H,#0B2h
mov RCAP3L,#004h
mov DPTR, #000h
Input1_8:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 199690 нс
jnb TMR3CN.7,$
nop
nop
mov TMR3CN,#000h
mov TMR3H,#0B2h
mov TMR3L,#004h
cjne A, DPL, Input1_8
;-----------------------------
;Частота дискретизации 2.5 КГц
;-----------------------------
_2_5KHz1:
cjne kf1, #009h, _500Hz1
mov SFRPAGE, #001h
mov RCAP3H,#063h
mov RCAP3L,#0E4h
mov DPTR, #000h
Input1_9:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 399 690 нс
jnb TMR3CN.7,$
nop
nop
mov TMR3CN,#000h
mov TMR3H,#063h
mov TMR3L,#0E4h
cjne A, DPL, Input1_9
;-----------------------------
;Частота дискретизации 500 Гц
;-----------------------------
_500Hz1:
cjne kf, #010h, _250Hz1
; Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3L,#000h
mov RCAP3H,#000h
mov DPTR, #000h
Input1_10:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 1 999 690 нс
mov i,#3
M1_10:
mov TMR3CN, #004h
jnb TMR3CN.7,$
mov TMR3CN,#000h
mov TMR3H,#000h
mov TMR3L,#000h
djnz i, M1_10
cjne A, DPL, Input1_10
;-----------------------------
;Частота дискретизации 250 Гц
;-----------------------------
_250Hz1:
cjne kf1, #011h, ExitInputADC
; Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3L,#000h
mov RCAP3H,#000h
mov DPTR, #000h
Input1_11:
mov SFRPAGE, #00Fh
mov A, Padc1
movx @DPTR, A
inc DPTR
mov A, #0F0h
mov SFRPAGE, #001h
mov TMR3CN, #004h
;задержка 3 999 690 нс
mov i,#006d
M1_11:
mov TMR3CN, #004h
jnb TMR3CN.7,$
mov TMR3CN,#000h
mov TMR3H,#000h
mov TMR3L,#000h
djnz i, M1_11
cjne A, DPL, Input1_11
ExitInputADC:
ret
;----------------------------------------------------------------
; Подпрограмма заполняет память XRAM
данными,
; которые записываются в память дисплея
;----------------------------------------------------------------
Converting:
mov DPTR, #200h
L1: ;Смещение адреса на 240 байтов назад
mov A, DPH
clr C
subb A, #02h
mov DPH,A
movx A, @DPTR
mov R1, A ;в R1 номер пикселя в
строке
;вычисление адреса байта на дисплее
mov B, #08h
div AB
mov R3, A ; в R3 адрес байта
;вычисление номера пикселя в байте
inc A
mov B, #08h
mul AB
clr C
subb A, R1
;установка бита в байте
mov R7, A
inc R7
mov A, #01h
L0: RLC A
dec R7
cjne R7, #00h, L0
mov R7, A ; в R7 содержимое байта
;запись в XRAM байта с установленным
битом
mov DPH, #02h
mov DPL, R3
mov A,R7
movx @DPTR, A
mov A, DPH
cjne A, #1Fh, L1
;Запись метки конца массива данных
mov DPTR, #2000h
mov A, #0A1h
movx @DPTR, A
ret
;----------------------------------------------------------------
; Таблицы и данные
;----------------------------------------------------------------
; Инициализация параметров SED1335.
;установка системы
msg1: db 30h, 87h, 07h, 27h, 39h, 0EFh, 28h, 0h, 0A1h
;прокрутка
msg2: db 0, 0, 0EFh, 0B0h, 04h, 0EFh, 0, 0, 0, 0, 0A1h
msg3: db 04h, 86h, 0A1h; форма курсора
msg4: db 01h, 0A1h; параметр наложения
msg5: db 16h, 0A1h; включение/выключение
дисплея
msg6: db 0B0h, 04h, 0A1h; установка курсора
на графическую страницу
msg11: db' ', 01Ah
msg18: db 0, 01Ah; параметр прокрутки по
горизонтали
END
После выполнения
работы была разработана цифрового осциллографа, придумана программа для МК.
В ходе
проделанной работы были изучены:
–
принципы
построения цифровых осциллографов
–
документация
на выбранные микросхемы
–
принцип
работы ЖКД
Цифровой
осциллограф позволяёт наблюдать на ЖКД переменное напряжение любо частоты до 10
МГц. Также можно исследовать два сигнала одновременно.
Частота
дискретизации и коэффициент ослабления\усиления сигнала задаются кнопками.
Для измерения
постоянных напряжений можно трансформаторы заменить на операционные усилители
или воспользоваться встроенными АЦП доработав программу для МК. Также можно
добавить вывод текста на дисплей, показывающего количество вольт на деление и
количество секунд на деление.
Список использованных источников
1. Б.П. Хромой, Ю.Г. Моисеев. Электрорадиоизмерения.
Учебник для техникумов. – M: Издательство
"Радио и связь", 1985г.
2. ADG211- Документация. Режим доступа: [#"1.files/image041.jpg">
Рисунок
1 – Регулировка наклона и уровня
В нажатом состоянии ручки запуск развертки осуществляется по
фронту, в вытянутом – по спаду. Регулятор LEVEL определяет точку на выбранном
фронте, при пересечении которой запускается развертка.
Дле регулировки уровня подключим ко входу Ain0.0 потенциометр.
Напряжение на Ain0.0 может
меняться от 0 до 1 В. Ain0.0 подключим при программировании к 10 – ти разрядному ADC0.
Рисунок 2 – потенциометр для регулировки уровня
Для настройки АЦП0 загружаются регистры AMX0CF, AMX0SL, ADC0CF, ADC0CN значениями
приведёнными в таблице 1.1.
Таблица 1.1 – Регистры
для настройки и управления АЦП0
Название регистра
|
Значение
|
Описание
|
AMX0CF
|
xxxx0000
|
Регистр настройки AMUX0
|
AMX0SL
|
xxxx0000
|
Регистр выбора канала AMUX0
|
ADC0CF
|
11111000
|
Регистр конфигурации АЦП0
|
ADC0CN
|
10000000
|
Регистр управления АЦП0
|
ADC0H
|
11111111
|
Регистр старшего байта слова данных АЦП0
|
ADC0L
|
11111111
|
Регистр младшего байта слова данных АЦП0
|
В
результате настройки Ain0.0 - Ain0.7 – независимые одиночные входы.
Выбран
канал Ain0.0
мультиплексора.
Частота дискретизации вычисляется из формулы:
,
где - системная тактовая частота
(100 МГц);
- число, задаваемое битами 3
– 7 регистра ADC0CF.
Коэффициент
усиления встроенного усилителя равен 1.
Более подробно опишем назначения битов регистра ADC0CN:
Бит 7: AD0EN: Бит включения АЦП0.
0: АЦП0 отключен. АЦП0
находится в режиме пониженного энергопотребления.
1: АЦП0 включен. АЦП0
находится в активном режиме и готов к преобразованию данных.
Бит 6: AD0TM: Бит установки
режима слежения АЦП0.
0: Нормальный
режим слежения: Когда АЦП0 включен, слежение осуществляется всегда, за
исключением момента преобразования.
1: Энергосберегающий
режим слежения: Режим слежения определяется битами AD0CM1-0 (см. ниже).
Бит 5: AD0INT: Флаг прерывания
от АЦП0 (устанавливается при завершении преобразования).
0: АЦП0 не закончил
преобразование данных (с момента последнего обнуления этого флага).
1: АЦП0 закончил
преобразование данных.
Бит 4: AD0BUSY: Бит занятости АЦП0.
Чтение:
0: Преобразование данных
завершено или в данный момент преобразование не осуществляется.
При аппаратном обнулении
этого бита флаг AD2INT устанавливается в 1.
1: Идет процесс
преобразования данных АЦП0.
Запись:
0: Не оказывает никакого
влияния.
1: Инициирует запуск
преобразования АЦП0, если биты AD2CM1-0 = 00b.
Биты 3-2: AD0CM1-0: Биты
выбора режима запуска преобразования АЦП0.
Если AD2TM = 0:
00: Запуск преобразования
осуществляется установкой в 1 бита AD2BUSY.
01: Запуск преобразования
осуществляется при переполнении Таймера 3.
10: Запуск преобразования
осуществляется нарастающим фронтом внешнего сигнала CNVSTR2.
11: Запуск преобразования
осуществляется при переполнении Таймера 2.
Если AD2TM = 1:
00: слежение (выборка) начинается в момент установки в 1 бита
AD2BUSY и длится 3 периода сигнала дискретизации АЦП0; затем начинается
преобразование данных.
01: слежение (выборка) начинается при
переполнении Таймера 3 и длится 3 периода сигнала дискретизации АЦП0; затем
начинается преобразование данных.
10: слежение (выборка) происходит
лишь при низком уровне сигнала на входе CNVSTR2; преобразование запускается
нарастающим фронтом сигнала на входе CNVSTR2.
11: слежение (выборка)
начинается при переполнении Таймера 2 и длится 3 периода сигнала дискретизации АЦП0;
затем начинается преобразование данных.
Бит 1: AD2WINT: Флаг прерывания
от детектора диапазона АЦП0 (сбрасывается программно)
0: Преобразованные данные
не соответствуют заданному диапазону (с момента последнего обнуления этого
флага).
1: Преобразованные данные
соответствуют заданному диапазону
Бит 0: AD2LJST: Бит
выравнивания результата преобразования
0: Данные в регистровой
паре ADC0H:ADC0L выровнены вправо
1: Данные в регистровой
паре ADC0H:ADC0L выровнены влево
Рисунок 3 – Блок – схема
алгоритма подпрограммы InputADC1
Продолжение рисунка 3
Ниже
приведены фрагмент текста программы для настройки АЦП (фрагмент нужно
разместить после фрагмента для настройки прерываний):
;----------------------------------------------------------------
; Настройка АЦП0
;----------------------------------------------------------------
mov SFRPAGE, #000h
mov AMX0CF, #000h
mov AMX0SL, #000h
mov ADC0CF, #0F8h
mov ADC0CN, #080h
Дальше
приведён фрагмент текста программы подпрограммы InputADC1,
который соответствует частоте дискретизации 500 КГц (для остальных частот
аналогично):
;-----------------------------
;Частота дискретизации 500 КГц
;-----------------------------
_500KHz1:
cjne kf1, #004h, _250KHz1
; Задание числа c которого считает
таймер
mov SFRPAGE, #001h
mov RCAP3H,#0FFh
mov RCAP3L,#05Ch
mov R4, #000h ;переменная synchronization
mov DPTR, #000h
Input1_4:
mov SFRPAGE, #00Fh ;3
mov A, Padc1 ;2
movx @DPTR, A ;3
inc DPTR ;1
cjne R3,#000h, L0
clr AD0INT
setb AD0BUSY ; запуск АЦП
jz AD0INT,&
mov A, ADC0L
mov R0, A
clr C
subb A,R0
cjne A, #000h, Input1_4
mov R4, #001h
mov A, #0F0h ;2
L0: mov SFRPAGE, #001h ;3
mov TMR3CN, #004h ;3
;задержка 1690 нс
jnb TMR3CN.7,$ ;4
nop
nop
mov TMR3CN,#000h ;3
mov TMR3H,#0FFh ;3
mov TMR3L,#05Ch ;3
cjne A, DPL, Input1_4 ;5