
- •Федеральное агентство железнодорожного транспорта
- •Основы микропроцессорной техники
- •Введение
- •Лабораторная работа № 1 Изучение интегрированной среды разработки mplab
- •Методика выполнения работы
- •Создание нового проекта
- •Создание файла с исходным текстом программы.
- •Добавление файла к проекту
- •Компиляция исходного текста программы в машинные коды.
- •Запись кода программы во внутреннюю flash память микроконтроллера
- •Отладка (выполнение) программы
- •Порядок выполнения работы
- •Постановка задачи.
- •Разработка алгоритма программы.
- •Написание текста программы на языке Ассемблер.
- •Трансляция исходного текста программы в машинные коды.
- •Тестирование и отладка.
- •Сопровождение.
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Постановка задачи.
- •Разработка алгоритма программы.
- •Написание текста программы на языке Ассемблер.
- •Тестирование и отладка.
- •Сопровождение.
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы Перечень рекомендуемой литературы
Порядок выполнения работы
В данной лабораторной работе необходимо разработать и отладить программу, измеряющую напряжение на выходе потенциометра R1. Конкретное задание выдается преподавателем.
В качестве примера рассмотрим следующее задание. В исходном состоянии все светодиоды погашены. При повороте ручки потенциометра R1 на одно из делений с 1-го по 6-е включается соответствующий светодиод (HL1...HL6), остальные светодиоды гаснут.
Постановка задачи.
Для решения данной задачи вполне достаточно 8-разрядной точности аналого-цифрового преобразования. Соответственно, весь диапазон цифровых отсчетов составляет 256 значений, а на одно деление шкалы потенциометра приходится 256/10=26 дискретных значений. Зависимость включения светодиодов от результатов аналого-цифрового преобразования можно представить в виде таблицы (см. табл. 6.1.)
Таблица 6.1.
Состояние светодиодов в зависимости от результата аналого-цифрового преобразования
Значение на выходе АЦП |
HL1 |
HL2 |
HL3 |
HL4 |
HL5 |
HL6 |
0...25 |
0 |
0 |
0 |
0 |
0 |
0 |
26...51 |
1 |
0 |
0 |
0 |
0 |
0 |
52...77 |
0 |
1 |
0 |
0 |
0 |
0 |
78...103 |
0 |
0 |
1 |
0 |
0 |
0 |
104...129 |
0 |
0 |
0 |
1 |
0 |
0 |
130...155 |
0 |
0 |
0 |
0 |
1 |
0 |
156...255 |
0 |
0 |
0 |
0 |
0 |
1 |
Разработка алгоритма программы.
Алгоритм программы приведен на рис. 6.5.
В первом блоке осуществляется настройка портов ввода-вывода и аналого-цифрового преобразователя на соответствующие режимы работы и включение модуля АЦП. Нулевой разряд порта А настраивается на ввод информации, а остальные разряды порта А и порт С – на вывод. АЦП настраивается на работу с аналоговым входом AN0 и напряжением источника питания микроконтроллера в качестве источника опорного напряжения. При частоте кварцевого генератора 4 МГц выбирается FOSC/8. Для обеспечения 8-разрядного преобразования выбирается левое выравнивание результата, при этом достаточно анализировать значение регистра ADRESH.
Рис. 6.5. Блок-схема алгоритма основной программы.
Во втором блоке запускается аналого-цифровое преобразование, а в третьем ожидается его завершение.
В блоках 4, 6, 8, 10, 12 и 14 производится сравнение результата аналого-цифрового преобразования с рассчитанными ранее порогами.
В блоке 5 выключаются все светодиоды, поскольку уровень измеряемого сигнала ниже первого порога.
В блоках 7, 9, 11, 13, 15 и 16 гасятся все светодиоды, кроме одного, в соответствии с табл. 6.1.
Далее программа возвращается к запуску следующего аналого-цифрового преобразования
Написание текста программы на языке Ассемблер.
Исходный текст программы приведен далее:
;предварительные настройки
#include p16f873a.inc
__CONFIG _HS_OSC ;высокочаятотный кварцевый резонатор
ORG H'000' ;вектор сброса
GOTO BEGIN ;переход на начало основной программы
;начало основной программы
BEGIN: BSF STATUS,RP0 ;выбираем банк регистров 1
;задаем режимы работы параллельных портов
MOVLW B'00000001' ;PORTA, 7-1 выходы, PORTA, 0 вход
MOVWF TRISA ;программируем регистр направления PORTA
MOVLW B'11000000' ;PORTC,7-6 вход, PORTC,5-0 выходы
MOVWF TRISC ;программируем регистр направления PORTC
;задаем режим работы АЦП
MOVLW B'00001110' ;задаем аналоговый вход PORTA,0, левое выравн.
MOVWF ADCON1 ;программируем регистр АЦП 1
BCF STATUS,RP0 ;выбираем банк регистров 0
MOVLW B'01000001' ;задаем аналоговый вход PORTA,0 и включаем АЦП
MOVWF ADCON0 ;программируем регистр АЦП 0
NOP ;пауза 4 мкс
NOP ;|
NOP ;|
NOP ;|
;основная программа
M10: BSF ADCON0,GO ;зепуск преобразования
M20: BTFSC ADCON0,GO ;ожидание окончания преобразования
GOTO M20 ;|
MOVLW D'26' ;первый порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M30 ;переход к гашению всех светодиодов
MOVLW D'52' ;второй порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M40 ;переход к вкюч. HL1 и гашению остальных светод.
MOVLW D'78' ;третий порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M50 ;переход к вкюч. HL2 и гашению остальных светод.
MOVLW D'104' ;четвертый порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M60 ;переход к вкюч. HL3 и гашению остальных светод.
MOVLW D'130' ;пятый порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M70 ;переход к вкюч. HL4 и гашению остальных светод.
MOVLW D'156' ;второй порог сравнения
SUBWF ADRESH,W ;сравнение результата преобразования с порогом
BTFSS STATUS,C ;скачек, если выше порога
GOTO M80 ;переход к вкюч. HL5 и гашению остальных светод.
BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
BSF PORTC,5 ;включение HL6
GOTO M10 ;возврат к началу основной программы
M30: BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
GOTO M10 ;возврат к началу основной программы
M40: BSF PORTA,5 ;включение HL1
CLRF PORTC ;гашение HL2...HL6
GOTO M10 ;возврат к началу основной программы
M50: BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
BSF PORTC,0 ;включение HL2
GOTO M10 ;возврат к началу основной программы
M60: BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
BSF PORTC,1 ;включение HL3
GOTO M10 ;возврат к началу основной программы
M70: BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
BSF PORTC,3 ;включение HL4
GOTO M10 ;возврат к началу основной программы
M80: BCF PORTA,5 ;гашение HL1
CLRF PORTC ;гашение HL2...HL6
BSF PORTC,4 ;включение HL5
GOTO M10 ;возврат к началу основной программы
END ;конец программы
Трансляция текста программы в машинные коды.
Процесс создания нового проекта и компиляции программы подробно описан в лабораторной работе №1.
Тестирование и отладка.
На этапе отладки программы необходимо выявить и устранить все возникшие на предыдущих этапах ошибки. Описание процесса программирования микроконтроллера и запуска программы приведен в лабораторной работе № 1.
Сопровождение.
Поскольку все программы, разрабатываемые при изучении курса ОМТ носят чисто учебный характер, то их работоспособность необходимо поддерживать лишь до момента защиты лабораторной работы преподавателю.
Содержание отчета
В отчете необходимо привести постановку задачи, блок-схему алгоритма и текст программы на языке Ассемблер с исправлениями, возникшими на этапе отладки.
Контрольные вопросы
ЛАБОРАТОРНАЯ РАБОТА № 7
Изучение работы модуля захвата/сравнения/ШИМ
микроконтроллеров PIC-micro
Цель работы: Изучение работы и программирование модуля CCP (захват/сравнение/ШИМ) микроконтроллера PIC16F873A.
Микроконтроллер PIC16F873A имеет два модуля CCP1 и CCP2, осуществляющие 16-разрядный захват содержимого таймера TMR1, 16-разрядное сравнение содержимого этого таймера с заданным числом, либо 10-разрядную широтную модуляцию импульсов, вырабатываемых таймером TMR2.
В схеме лабораторного макета к выходу широтно-импульсного модулятора CCP1 подключен стрелочный микроамперметр, показывающий постоянную составляющую ШИМ сигнала.
Управление режимами работы модулей CCP осуществляется с помощью регистров CCP1CON и CCP2CON, соответственно. Значения конкретных значений разрядов этих регистров приведены на рис 7.1.
Рис. 7.1. Регистр управления модуля CCP.
Режим захвата.
Структурная схема CCP в режиме захвата приведена на рис. 7.2. Она состоит из входа CCP1, предварительного делителя на 1, 4 или 16, детектора переднего, либо заднего фронта входного импульса, старшего (CCP1H) и младшего (CCP1L) регистров модуля CCP. Кроме того в схеме используются регистры TMR1H и TMR1L таймера TMR1. При этом таймер TMR1 должен быть настроен на синхронный режим работы, если он используется в качестве счетчика внешних импульсов (см. рис. 5.3).
Рис. 7.2. Структурная схема модуля CCP в режиме захвата.
Событием захвата в данной схеме может является: задний фронт импульса на входе ССР1, передний фронт импульса на входе ССР1, каждый четвертый передний фронт импульса на входе ССР1 или каждый шестнадцатый передний фронт импульса на входе ССР1. Выбор события, при котором происходит захват, осуществляется битами ССРхМ0...ССРхМ3 регистра CCPxCON.
Работает схема следующим образом. При возникновении события захвата информация из 16-разрядного регистра-счетчика TMR1 копируется одновременно в регистры CCPR1H и CCPR1L, при этом таймер TMR1 может продолжать свою работу. Таким образом исключается искажение информации, возникающее при последовательном считывании информации из регистров TMR1H и TMR1L. После этого в регистре PIR1 взводится флаг CCP1IF и вызывается прерывание, если оно разрешено.
Режим сравнения.
Структурная схема CCP в режиме сравнения приведена на рис. 7.3. Она состоит из старшего (CCP1H) и младшего (CCP1L) регистров модуля CCP, схемы сравнения, логической схемы управления триггером, RS триггера и вывода ССР1, а также регистров TMR1H и TMR1L таймера TMR1. При этом таймер TMR1 должен быть настроен на синхронный режим работы, если он используется в качестве счетчика внешних импульсов (см. рис. 5.3), а соответствующий разряд параллельного порта С – на вывод информации.
Рис. 7.3. Структурная схема модуля CCP в режиме сравнения.
В момент совпадения значения записанного в регистры CCPR1H и CCPR1L с числом счетных импульсов, накопленным в регистре TMR1, схема сравнения взводит флаг прерывания CCP1IF в регистре PIR1. В зависимости от настройки режима работы разрядами ССР1М0...ССР1М3 регистра CCP1CON логическая схема воздействует на RS триггер, опрокидывая его в «0» или в «1», либо не изменяя его состояния (только взводится флаг прерывания). Сигнал с выхода RS триггера поступает на вывод CCP1 микроконтроллера. В режиме микропотребления может взводиться триггер специального события, запускающий аналого-цифровое преобразование.
Режим широтно-импульсной модуляции.
Структурная схема модуля CCP в режиме ШИМ приведена на рис. 7.4. Она состоит из регистров длительности импульса CCPR1L (ведущий) и CCPR1H (ведомый), схемы сравнения, RS триггера, вывода микроконтроллера CCP1, а так же регистра-счетчика таймера TMR2, регистра периода таймера TMR2 и его схемы сравнения. Временная диаграмма работы модуля CCP в режиме ШИМ приведена на рис 7.5.
Работает схема следующим образом. Таймер TMR2 вырабатывает бесконечную последовательность импульсов, в соответствии с выбранным режимом работы и с периодом, заданным в регистре периода PR2 (настройку таймера TMR2 см. в лабораторной работе № 5).
При равенстве числа в счетчике TMR2 с числом записанным в регистре PR2 схема сравнения сбрасывает счетчик TNR2 и взводит RS триггер. На выходе CCP1 появляется логическая «1» (см. рис. 7.5.). В этот же момент времени осуществляется перезапись содержимого ведущего регистра CCPR1L в ведомый регистр CCPR1H. Логическая «1» на выходе CCP1 будет сохраняться до тех пор, пока значение в счетчике TMP2 не сравняется с содержимым регистра CCPR1H. При равенстве числа в счетчике TMR2 числу загруженному в регистр CCPR1H схема сравнения сбрасывает RS триггер, и на выходе CCP1 появляется логический «0».
Рис 7.4. Структурная схема модуля CCP в режиме ШИМ.
Рис 7.5. Временная диаграмма работы модуля CCP в режиме ШИМ.
Наличие ведущего регистра CCPR1L предотвращает искажение длительности импульса, формируемого в данном периоде работы счетчика TMR2. То есть изменение содержимого ведущего регистра длительности импульса CCPR1L может производиться программно и асинхронно с работой схемы ШИМ, изменение же значения в ведомом регистре CCPR1H всегда будет происходить в начале следующего периода.
В лабораторном макете к выводу CCP1 подключен микроамперметр, отклонение стрелки которого прямо пропорционально значению постоянной составляющей сигнала, формируемого схемой ШИМ.