- •Кузнецов в.Н., Лисютченков с.Н. Цифровые и микропроцессорные устройства
- •Часть 3
- •220301– Автоматизация технологических процессов и производств
- •Содержание
- •Предисловие
- •Лабораторная работа №1 «Освоение среды разработки vmlab 3.12»
- •1.2 Теоретическое введение
- •1.2.1 Общие сведения
- •1.2.2 Среда разработки vmlab
- •1.2.3 Описание пользовательского интерфейса
- •1.2.4 Команды меню
- •Save All − сохранить все файлы Save As − сохранить файл текущего окна под новым именем
- •1.2.5 Доступные окна
- •1.2.6 Аппаратные компоненты
- •1.2.7 Формат программы на ассемблере
- •1.3 Порядок выполнения лабораторной работы
- •1.3.1 Создание нового проекта
- •1.3.2 Редактирование файла ассемблера
- •1.3.3 Ассемблирование и выполнение программы
- •1.4 Задание на лабораторную работу
- •1.5 Контрольные вопросы
- •1.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №2 «Изучение микроконтроллера aTmega128 и основы программирования»
- •2.2.1 Общие сведения о микроконтроллере aTmega128
- •Регистры ввода/вывода (рвв)
- •Организация памяти
- •Внешние прерывания
- •2.2.9 Директивы транслятора ассемблера
- •2.2.10 Выражения
- •2.2.11 Операнды
- •2.2.12 Функции
- •2.2.13 Операции
- •2.3 Порядок выполнения лабораторной работы
- •2.4 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •2.5 Контрольные вопросы
- •2.6 Содержание отчета по лабораторной работе
- •3.2.2 Адресация в микроконтроллере
- •3.2.3 Команды пересылки данных
- •Mov Rd,Rr(пересылка между рон) – копирует содержимое регистра Rrв регистр Rd. Регистр-источник Rrне изменяется.
- •3.2.4 Команды передачи управления
- •3.3 Порядок выполнения лабораторной работы
- •3.4 Задание на лабораторную работу
- •3.5 Контрольные вопросы
- •3.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №4 «Выполнение арифметических операций»
- •4.2 Теоретическое введение
- •4.3 Порядок выполнения лабораторной работы
- •4.4 Задание на лабораторную работу
- •4.5 Контрольные вопросы
- •4.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №5 «Изучение логических операций»
- •5.2 Теоретическое введение
- •Управление энергопотреблением и режимы сна.
- •5.3 Порядок выполнения лабораторной работы
- •5.4 Задания на лабораторную работу
- •5.5 Контрольные вопросы
- •5.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №6 «Изучение портов ввода/вывода и их программирование»
- •6.2 Теоретическое введение
- •6.2.1 Общие сведения
- •6.2.2 Порты в качестве универсального цифрового ввода-вывода
- •6.2.3 Настройка выводов
- •6.2.4 Неподключенные выводы
- •6.2.5 Альтернативные функции порта
- •6.2.5.1 Альтернативные функции порта a
- •6.2.5.2 Альтернативные функции порта в
- •6.2.5.3 Альтернативные функции порта c
- •6.2.5.4 Альтернативные функции порта d.
- •6.2.5.5 Альтернативные функции порта e
- •6.2.5.6 Альтернативные функции порта f
- •6.2.5.1 Альтернативные функции порта g
- •6.2.6 Описание регистров портов ввода-вывода
- •6.2.7 Обращение к портам ввода/вывода
- •6.3 Порядок выполнения лабораторной работы на симуляторе
- •6.4 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •Контрольные вопросы
- •6.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №7.
- •7.2.1 Общие сведения о Память
- •7.2.2 Статическое озу памяти данных
- •7.2.3 Организация памяти
- •7.2.4 Запоминающее устройство sram
- •7.2.5 Временная диаграмма доступа к памяти
- •7.3 Память данных на эсппзу
- •7.3.1 Чтение и запись эсппзу
- •7.3.2 Адресные регистры эсппзу
- •Порядок выполнения
- •7.4 Память ввода-вывода
- •Порядок выполнения
- •Порядок выполнения
- •7.5 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •7.6 Контрольные вопросы
- •7.7 Содержание отчета по лабораторной работе
- •Генерация тактовых импульсов
- •Инициализация усапп
- •8.2.2 Передача данных - Передатчик усапп
- •8.2.3 Прием данных - Приемник усапп
- •Асинхронный прием данных
- •8.2.4 Многопроцессорный режим связи
- •8.2.5 Описание регистров усапп
- •8.2.6 Последовательный периферийный интерфейс - spi
- •8.2.7 Функционирование вывода ss
- •8.2.8 Связь двух мк
- •8.3 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •8.6 Контрольные вопросы
- •Лабораторная работа №9 «Изучение принципа работы таймеров/счетчиков микроконтроллера»
- •9.2 Теоретическое введение
- •9.2.1 Общие сведения о таймерах/счетчиках
- •9.2.2 Назначение выводов таймеров/счетчиков
- •9.2.5 Выбор источника тактового сигнала
- •9.2.6 Режим таймера
- •9.2.7 Функция захвата (Capture)
- •9.2.8 Функция сравнения (Compare)
- •9.2.9 Режим шим
- •9.2.10 Сторожевой таймер
- •9.2.11 Общие сведения о работе клавиатуры
- •9.2.12 Ввод кода нажатой клавиши
- •9.2.13 Сканирование и идентификация
- •Листинг проектного файла №9
- •На эмуляторе
- •9.4 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •9.5 Контрольные вопросы
- •10.2.2 Функционирование модуля ацп
- •10.2.3 Принцип действия
- •10.2.4 Каналы дифференциального усиления
- •10.2.5 Изменение канала или выбор опорного источника
- •10.2.6 Входные каналы ацп
- •10.2.7 Источник опорного напряжения ацп
- •10.2.8 Повышение точности преобразования
- •10.2.9 Методы компенсации смещения
- •10.2.10 Описание получения результата преобразования
- •10.2.5 Параметры ацп
- •10.2 Порядок выполнения работы на симуляторе
- •На эмуляторе
- •10.3 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •10.4 Контрольные вопросы
- •Приложение
- •Список литературы
8.2.8 Связь двух мк
VMLAB позволяет симулировать два микроконтроллера основанные на параллельном соединении, позволяя обмениваться цифровыми сигналами между обоими процессами, подобно UART, SPI, и другие связанные сигналы.
Оба соединения могут быть построены, используя полностью различные схемы, соединения, и т.д. и могут проходить с различным временем. Если два микроконтроллера в VMLAB должны быть соединены параллельно, имеется необходимость определить в каждом собственный .PRJ файл.
· Переходим к команде меню «Multiprocess», затем «Start 2nd VMLAB». После этого открывается второе окно VMLAB, устанавливая главные измерения окна таким образом, что оба окна VMLAB размещались на целом экране. Чтобы узнать, какое окно работает в качестве Мультипроцесса, главный заголовок окна будет отображать следующую надпись: «VMLAB (multiprocess)».
· Загружаем и строим каждый проект отдельно.
· Когда оба проекта безошибочны, нажимаем «Go» (зеленый свет); оба проекта будут работать синхронно.
· Нажатие в режиме Multiprocess кнопки «Go» and «Restart» в обоих проектах равнозначны: щелкающийся к кнопке «Restart» в одном VMLAB будет отправлен также в другой.
· Нажатие «Step» вынудит остановиться в следующей границе проекта, но только в окне, где был нажата эта кнопка. Очевидно, другой МК не может остановиться в границе проекта, так как время обоих проектов может быть полностью различны.
Ограничения
· Анимация кода не поддерживается в Мультипроцессе.
· Только цифровые сигналы могут быть обменены между обоими процессами. Любой узел с аналоговым поведением будет в виде прямоугольника, когда будет экспортироваться в другой процесс.
· Способ Мультипроцесса значительно замедляет моделирование, так как некоторый ЦПУ наверху необходим для связи меж-процесса и синхронизации.
Используйте EXTIN и EXTOUT. Связь фактически выполнена случайным названием компонентов.
Синтаксис:
X <inst_name> EXTIN (начальная логика) <node>
Компонент EXTIN предназначен, чтобы мультиобрабатывать приложения. Используйте это, чтобы управлять <node> с сигналом от процесса партнера, экспортируемого там при использовании компонента EXTOUT.
Параметр <начальная логика> должен быть 1 или 0, идентифицируя начальное значение цифровой логики. Это необходимо, так как VMLAB не может выполнить объединенный анализ системы цифрового управления между обоими проектами мультипроцесса. Обеспечьте, чтобы такое логическое значение было совместимо с тем, исходящим из его копии EXTOUT, иначе будет помечена ошибка во время моделирования.
Сигналы, проникающие через EXTIN, являются цифровыми. Фактически, компонент копии EXTOUT действует как спусковой механизм Schmitt (на 30 %-70 % уровня мощности).
Подключение с партнером EXTOUT базируется на название <inst_name> экземпляра класса.
Пример:
Давайте возьмём два проекта VMLAB: ONE.PRJ и TWO.PRJ, которые будут выполнены в режиме Multiprocess.
В ONE.PRJ:
Xlink1 EXTOUT PA0; Экспортируйте узел 'PA0'
Xlink2 EXTOUT my_node; Экспортируйте 'my_node' узел
В TWO.PRJ:
Xlink1 EXTIN (1) node_1; 'node_1', управляемый предыдущим 'PA0'
Xlink2 EXTIN (0) PD0; 'PD0', управляемый предыдущим 'my_node'
Экземпляр класса называет 'link1', и 'link2' - то, что фактически подключает узел EXTOUT с его партнёром EXTIN.
Программа №8 (связь двух микроконтроллеров).
Данная программа реализует связь 2 МК Atmega128 через УСАПП. Итогом нашей программы является передача символов из одного МК в другой. Сначала активируем Watchdog. Затем активируем регистры УСАПП: TX/RCV. После этого устанавливаем задержку при передаче символов. На осциллографе можно увидеть отображение символом через сигналы
Рис 8.12 Алгоритм основной программы
Рис 8.13 Алгоритм подпрограммы delay
Листинг проектного файла №8 для передающего МК
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega128"
.PROGRAM "pere.asm"
.TARGET "pere.hex"
.TRACE ;
.CLOCK 1.8432meg
X1 TTY(9600 8) PE0 EXT_RX ;
Xlink1 EXTIN(1) EXT_RX ;
Xlink2 EXTOUT PE1 ;
.plot v(PE0) v(PE1) v(EXT_RX)
Листинг программы №8 для передающего и принимающего МК
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
.include "C:\VMLAB312\include\m128def.inc"
.def temp =r16
.def j =r17
.def k =r18
; ***********************************************
; Reset aand Interrupt vectors
; ***********************************************
.cseg
.org $0
rjmp start ; Reset handler
.org URXC0addr ; UART выполнение прерываний,
rjmp uart_rx
.org UDRE0addr ; UART Данные регистра, пустое прерывание
rjmp uart_em
.org UTXC0addr ; UART Передача выполненного прерывания
rjmp uart_tx
; ************************************************
; UART RX service: it echoes the character into TX
; ************************************************
;
uart_rx:
in temp, UDR0
out UDR0, temp
reti
uart_tx: ;UART Передача завершена
reti
uart_em: ;UART Пустые данные TX
reti
; ************************************************
; Main
; ************************************************
start:
ldi temp, 0x08 ; Включение Watchdog
wdr
out WDTCR, temp ;
ldi temp, 11 ; Установить 9600 бод для 1.8MHz
out UBRR0L, temp
ldi temp, 0xF8 ; Чтобы активировать все прерывания и TX / RCV
out UCSR0B, temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
sei ; позволить прерывания
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
; **************************************************
; Infinite loop, watchdog activation demonstrator
; **************************************************
forever:
ldi j, 5
loop1:
rcall delay
dec j ; Задержка
brne loop1
wdr ; Watchdog сброса, после долгого перерыва
rjmp forever
delay:
ldi k, 255
loop2:
dec k
brne loop2
ret
Листинг проектного файла №8 для принимающего МК
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega128"
.PROGRAM "prim.asm"
.TARGET "prim.hex"
.TRACE ; Activate micro trace
; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.CLOCK 1.8432meg
Xlink2 EXTIN(1) PE0
Xlink1 EXTOUT PE1
.plot V(PE0) v(PE1)