Расчет параметров огибающей:
Пусть количество точек огибающей на интервале T0: N = 100.
Рассчитаем период вывода кодов в ЦАП:
находиться
в пределах от 50 до 256.
Выбор элементной базы
Цифровой мультиплексор: КР1554КП15
Аналоговый мультиплексор: КР590КН6
ОЭВМ: D87C51FA
АЦП: MAX165
ЦАП: AD7533
Операционный усилитель: OP297
Логический элемент «Не»: КР1554ЛН1
Документация к элементной базе
Цифровой мультиплексор: КР1554КП15
Рис.2 Условное графическое обозначение
Рис.3 Назначение выводов
Напряжение питания микросхем серии КР1554 - от 2 до 6 В, параметры нормируют при значениях напряжения питания 3,3 ±0,3 В и 5 В ±10%. Рабочий температурный интервал -45...+85 С. Ток, потребляемый в статическом режиме, по нормам технических условий не превышает 4 мкА для простых микросхем и 8 мкА для микросхем средней степени интеграции.
Аналоговый мультиплексор: КР590КН6
Микросхема КР590КН6 – восьмиканальный аналоговый коммутатор с дешифратором для коммутации напряжения от -15В до 15В.
Рис.4 Корпус типа 238.16-2
Рис.5 Функциональная схема
Рис.6 Таблица назначения выводов
Рис.7 Основные электрические параметры
ОЭВМ: D87C51FA
Рис.8 Условное графическое обозначение с навесными элементами (схема формирования сброса на элементах R1, C1 и схема кварцевого генератора внутренней частоты – ZQ1, C2, C3)
Рис.9 Основные параметры
АЦП: MAX165
Рис.10 Конфигурация контактов
Отличительные особенности:
Время преобразования 5 мкс
Встроенное УВХ
Максимальная ошибка преобразования ±1 LSB
Ширина полосы пропускания 500 кГц
Встроенный 1,22 В ИОН и буфер
5 В однополярное питание
8 битный µР интерфейс
Время доступа к данным 100 нс
Типовое потребление 15 мВт
Миниатюрный корпус
МАХ165 является совместимым по выводам усовершенствованным аналогом прибора МХ7575
ЦАП: AD7533
Рис.11 Конфигурация контактов
Рис.12 Основные характеристики
Рис.13 Таблица назначения контактов
Операционный усилитель: OP297
Рис. 14 Конфигурация контактов
Рис.15 Основные электрические параметры
Логический элемент «Не»: КР1554ЛН1
Рис.16 Примерный вид элемента
Рис.17 Основные электрические параметры
Разработка программного обеспечения
|
ORG |
0H |
; Начало программы |
|
JMP |
MAIN |
; Переход на метку начала основной программы |
|
ORG |
0BH |
; Адрес подпрограммы обработки прерывания (таймер 0) |
|
JMP |
IRQ_TIMER0 |
; Переход к подпрограмме обработки прерывания от таймера 0 |
|
RETI |
|
;Окончание подпрограммы прерывания |
MAIN: |
; Основная программа (инициализация) |
||
|
CALL |
INIT |
; Вызов подпрограммы инициализации |
LOOP: |
; Основной цикл |
||
|
CALL |
SYNHRO |
; Передача сигналов синхрогруппы |
|
CALL |
DIGIT |
; Ввод и передача цифровых сигналов |
|
CALL |
ANALOG |
; Ввод и передача аналоговых сигналов |
|
JMP |
LOOP |
; Переход на метку LOOP |
INIT: |
; Подпрограмма инициализации |
||
|
CALL |
INIT_TIMER0 |
; Вызов подпрограммы инициализации таймера 0 (формирование огибающей) |
|
CALL |
INIT_TIMER2 |
; Вызов подпрограммы инициализации таймера 2 (несущей частоты) |
|
MOV |
DPTR, #TABSIN |
; Указатель на массив огибающей |
|
MOV |
R7, #100 |
; Счетчик точек огибающей |
|
MOV |
IE, #10000010B |
; Разрешение прерываний от таймера 0 |
|
RET |
|
; Выход из подпрограммы |
SYNHRO: |
; Передача сигналов синхрогруппы |
||
|
MOV |
R2, #8 |
; Счетчик повторений |
SYNHRO1: |
CALL |
B11 |
; Вызов подпрограммы формирования последовательности B11 |
|
DJNZ |
R2, SYNHRO1 |
; Цикл |
|
RET |
|
; Выход из подпрограммы |
B11: |
MOV |
A, #11100100B |
; Запись в АСС последовательности Б11 |
|
CALL |
OUTA |
; Вывод байта из АСС |
OUTA: |
; Формирование нового бита ACC.0 с помощью бита четности |
||
|
MOV |
B,#7 |
; Счётчик бит |
OUTAB |
RLC |
A |
; Сдвиг АСС влево, запись АСС.0 в Carry |
|
CALL |
SEND_CARRY |
; Передача бита из CARRY |
|
DJNZ |
B,OUTAB |
; Цикл |
|
RET |
|
; Выход из подпрограммы |
DIGIT: |
; Ввод и передача цифровых каналов |
||
|
MOV |
R0, #12 |
; Счетчик цифровых каналов |
|
MOV |
P3, #0 |
; Подключение #1 на вход P1.1 |
DIGIT_L: |
; Цикл ввода и передачи цифровых каналов |
||
|
MOV |
C, P1.1 |
; Ввод выбранного входа в CARRY |
|
CALL |
SEND_CARRY |
; Передача состояния входа |
|
INC |
P3 |
; Следующий цифровой канал на вход P1.1 |
|
DJNZ |
R0, DIGIT_L |
; Повторение опроса и передачи |
|
RET |
|
; Выход из подпрограммы |
ANALOG_IN: |
; Ввод данных из АЦП в ACC |
||
|
CLR |
P1.2 |
; Пуск преобразователя |
|
SETB |
P1.2 |
; Устанавливаем сигнал CS,RD |
ANALOG_IN_L: |
JNB |
P1.3, ANALOG_IN_L |
; Ожидание завершения преобразования |
|
CLR |
P1.2 |
; Начало чтения |
|
MOV |
A, P0 |
; Ввод данных в ACC |
|
SETB |
P1.2 |
; Завершение чтения |
|
RET |
|
; Выход из подпрограммы |
ANALOG: |
; Ввод и передача аналоговых каналов |
||
|
MOV |
R0, #16 |
; Счетчик аналоговых каналов |
|
MOV |
P3, #0 |
; Подключение первого аналогового канала ко входу АЦП |
ANALOG_L: |
CALL |
ANALOG_IN |
; Ввод аналоговых каналов |
|
MOV |
R1, #8 |
; Счетчик передаваемых бит из ACC |
|
CALL |
SEND_ACC |
; Передача R1 бит из АСС |
|
INC |
P3 |
; Подключение следующего канала входа к АЦП |
|
DJNZ |
R0, ANALOG_L |
; Цикл опроса и передачи каналов |
|
RET |
|
; Выход из подпрограммы |
SEND_ACC: |
; Передача заданного количества бит из АСС |
||
|
RLC |
A |
; Сдвиг АСС влево -> CARRY |
|
CALL |
SEND_CARRY |
; Передача бит из CARRY |
|
DJNZ |
R1, SEND_ACC |
; Цикл передачи бит из АСС |
|
RET |
|
; Выход из подпрограммы |
INIT_TIMER0: |
; Подпрограмма инициализация таймера 0 |
||
|
MOV |
TMOD, #2 |
; Задаем режим автозагрузки |
|
MOV |
TH0, #138 |
; Задаем коэффициент пересчета |
|
MOV |
TL0, TH0 |
; Первая загрузка из TH0 |
|
SETB |
TR0 |
; Разрешение счета |
|
RET |
|
; Выход из подпрограммы |
INIT_TIMER2: |
; Подпрограмма инициализации таймера 2 |
||
|
MOV |
T2CON, #4 |
; Инициализация таймера 2 в |
|
MOV |
T2MOD, #2 |
; режиме генератора частоты на выводе P1.0 |
|
MOV |
RCAP2H, #255 |
|
|
MOV |
RCAP2L, #255 |
|
|
RET |
|
; Выход из подпрограммы |
IRQ_TIMER0: |
; Подпрограмма обработки прерывания (таймер 0) |
||
|
PUSH |
ACC |
; Сохранение значения ACC |
|
CLR |
A |
; Ввод в АСС очередной |
|
MOVC |
A, @A+DPTR |
; точки огибающей |
|
MOV |
P2, A |
; Вывод точки огибающей в ЦАП |
|
INC |
DPTR |
; Переходим на адрес следующей точки |
|
DJNZ |
R7, IRQ_EXIT |
; Цикл вывода |
|
MOV |
DPTR, #TABSIN |
; Адрес первой точки огибающей |
|
MOV |
R7, #100 |
; Счетчик точек |
|
SETB |
P1.7 |
; Признак окончания периода огибающей |
IRQ_EXIT: |
POP |
ACC |
; Возвращаем в АСС сохраненное значение |
|
RETI |
|
; Выход из подпрограммы обработки прерывания |
SEND_CARRY: |
; Синхронизация передачи бита данных с периодом огибающей |
||
|
JNB |
P1.7, SEND_CARRY |
; Ожидание завершения периода огибающей |
|
CLR |
P1.7 |
; Сброс признака завершения периода огибающей |
|
JC MOV |
SEND_CARRY_1 RCAP2L, #250 |
; Передача F1 |
|
RET |
|
; Выход из подпрограммы |
SEND_CARRY_1: |
MOV RET |
RCAP2L, #253
|
; Передача F2 ; Выход из подпрограммы |
|
END |
|
; Конец программы |
