ПЗ (1230212), страница 5
Текст из файла (страница 5)
Микроконтроллер ATmega8, на базе которого сконструирован мили-секундомер, представляет прерывания в таблице 3.3, каждый из которых можно индивидуально разрешить или запретить.
Таблица 3.3 – Векторы прерываний ATmega8
№ вектора | Источник | Условие возникновения прерывания |
1 | 2 | 3 |
1 | INT0 | Запрос на внешнее прерывание 0 |
2 | INT1 | Запрос на внешнее прерывание 1 |
3 | TIMER1 OVF | Переполнение таймера-счетчика 1 |
4 | TIMER2 OVF | Переполнение таймера-счетчика 2 |
5 | TIMER0 OVF | Переполнение таймера-счетчика 0 |
6 | TIMER1 CAPT | Захват фронта таймером-счетчиком 1 |
7 | EE_RDY | Завершение записи в EEPROM. |
Среди многообразия прерываний, есть такое особенное – прерывание захвата. При появлении сигнала на определенной ножке микроконтроллера происходит запись счетного регистра таймера/счетчика 0 в специальные регистры захвата. Данное прерывание можно использовать как еще одно внешнее прерывание.
Чтобы управлять внешними прерываниями существует три специальных регистра:
- MCUСR – регистр управления внешними прерываниями;
- GICR – регистр масок внешних прерываний;
- GIFR – регистр флагов внешних прерываний.
Регистр MCUCR определяет режим работы прерывания. По какому уровню будет происходить прерывание по высокому (1) или по низкому (0) уровню приведён на рисунке 3.14.
Рисунок 3.14 – Регистр MCUCR микроконтроллера ATmega8
Разряды регистра MCUCR означают следующее:
- бит 7 SE – этот бит говорит о необходимости ожидать прерывания от внешнего источника, и программа ничего при этом не выполняет. Этот бит используется в режиме SLEEP (энергосберегающий режим – «режим сна»);
- бит 6–4 SM2, SM1, SM0 – выбирают режим ожидания;
- бит 3–2 ISC11, ISC10 – определяют уровень срабатывания внешнего прерывания INT1. Так здесь два бита, то можно получить 4 комбинации вариантов уровня срабатывания прерывания;
- бит 1–0 ISC01, ISC00 – определяют уровень срабатывания внешнего прерывания INT0.
Теперь рассмотрим следующий регистр управления прерываниями – регистр GICR, который выставляет маски на внешние прерывания представлен на рисунке 3.15.
Рисунок 3.15 – Регистр GICR микроконтроллера ATmega8
Биты регистра GICR означают следующее:
- бит 7 – INT1 – внешний запрос прерывания 1 включение;
Если в этом разряде записана лог. 1 и флаг I регистра SREG также установлен в «1», то разрешается внешнее прерывание с вывода INT1. Условие генерации прерывания определяется содержимым разрядов ISC01 и ISC00 регистра MCUCR.
- бит 6 – INT0 – внешний запрос прерывания 0 включение.
Если в этом разряде записана лог. 1 и флаг I регистра SREG также установлен в «1», то разрешается внешнее прерывание с вывода INT1. Условие генерации прерывания определяется содержимым разрядов ISC01и ISC00 регистра MCUCR.
Регистр GIFR, предназначен для индикации наступления внешних прерываний в этих моделях. Регистр показан на рисунке 3.16. Здесь флаг, соответствующий данному прерыванию, устанавливается в 1, если произошло прерывание именно этого прерывания. И пока это прерывание не будет обработано, новое прерывание не произойдет.
Рисунок 3.16 – Регистр GIFR микроконтроллера ATmega8
Биты регистра GIFR означают следующее:
- бит 7 – INTF1 – внешний флаг прерывания. Если в результате события на выводе INT1 сформировался запрос на внешнее прерывание, этот разряд устанавливается в «1». Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF1 сброшен постоянно, если генерация прерывания должна происходить по низкому уровню на выводе INT1;
- бит 6 – INTF0 – внешний флаг прерывания. Если в результате события на выводе INT0 сформировался запрос на внешнее прерывание, этот разряд устанавливается в «1». Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF0 сброшен постоянно, если генерация прерывания должна происходить по низкому уровню на выводе INT0.
Для любого процессора прерывание должно заканчиваться специальной командой "возврат из прерывания". В семействе AVR это будет команда “RETI”. В разрабатываемом миллисекундомере прерывания будут использоваться для выполнения программы отображения количества миллисекунд на ЖКИ индикаторе. Прерывания будут возникать спустя 5 миллисекунд. Центральный процессор обнаруживает наступление прерывания и выполняет специальную секцию программы, называемую программой обработки прерывания.
3.5.1 Модуль таймера 0 в ATmega8
Таймер/счетчик T0 имеет минимальный набор функций, зависящий тем не менее от модели микроконтроллера. В одних моделях он может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. В других моделях к этим функциям добавляется возможность генерации сигналов с широтно-импульсной модуляцией (ШИМ) фиксированной разрядности, а также возможность работать в асинхронном режиме в качестве часов реального времени.
В составе всех микроконтроллеров семейства имеется также сторожевой таймер, являющийся непременным атрибутом всех современных микроконтроллеров. Этот таймер позволяет избежать несанкционированного зацикливания программы, возникающего по тем или иным причинам. Блок схемы приведена на рисунке 3.17.
Рисунок 3.17 – Модуль таймера 0 в ATmega8
В состав таймеров/счетчиков T0 входят два регистра ввода/вывода: счетный регистр TCNT0 и регистр управления TCCR0. Этих регистры приведен на рисунке 3.18, 3.19.
Рисунок 3.18 – РегистрTCCR0 микроконтроллера ATmega8
Рисунок 3.19 – РегистрTCNT0 микроконтроллера ATmega8
С помощью трех настроечных бит имеется возможность выбрать различные тактовые частоты, кратные исходной частоте синхронизации представленные в таблице 3.4.
Таблица 3.4 – Выбор частоты синхронизации таймера 0
CS02 | CS01 | CS00 | Описание |
0 | 0 | 0 | Нет синхронизации. Таймер – счетчик 0 остановлен. |
0 | 0 | 1 | clkT0S/1 |
0 | 1 | 0 | clkT0S/8 |
0 | 1 | 1 | clkT0S/32 |
1 | 0 | 0 | clkT0S/64 |
1 | 0 | 1 | clkT0S/128 |
1 | 1 | 0 | clkT0S/256 |
1 | 1 | 1 | clkT0S/1024 |
Регистр таймера/счетчика обеспечивает прямой доступ, и для чтения, и для операций записи, к 8–разрядному модулю таймера/счетчика.
Направление счета – всегда приращение, и никакая очистка по внешним событиям не выполняется. Счетчик просто выходит за границы счета, когда он переходит свою максимальную 8–битовую величину (MAX = 0xFF) затем перезапускается с низа (0x00). В нормальном действии флаг переполнения таймер/счетчика (TOV0), будет установлен в том же цикле таймера синхронизации, как только TCNT0 становится нулем. Флаг TOV0 в этом случае ведется себя подобно девятому биту, за исключением того, что только устанавливается, но не очищается. Тем не менее, объединенное прерыванием переполнения таймера, которое автоматически очищает флаг TOV0, разрешение таймера может быть повышено программным путем. Новое значение таймера может быть записано в любое время. Внешний сигнал, поступающий на вход T0 микроконтроллера, прежде чем поступить на вход селектора тактового сигнала проходит через специальный узел, включающий схему синхронизации и детектор фронта.
Синхронизация внешнего сигнала осуществляется с частотой тактового генератора микроконтроллера (состояние вывода T1 считывается по нарастающему фронту тактового сигнала clkI/O). Поэтому частота внешнего сигнала должна быть в 2 раза меньше частоты тактового сигнала микроконтроллера (fext < fclk_I/O/2). Однако, чтобы гарантировать обнаружение фронтов внешнего сигнала во всем диапазоне возможных изменений частоты и скважности тактового сигнала микроконтроллера (из-за разброса параметров элементов тактового генератора), частота внешнего сигнала должна быть еще меньше – fclk_I/O/2.5.
Также следует понимать, что входной каскад вносит задержку между изменением состояния вывода и обновлением счетного регистра таймера/счетчика. Величина задержки составляет 2,5–3,5 машинных цикла.
3.6 Алгоритм и программа управления жидкокристаллическим
индикатором.
Для отображения посчитанного количества миллисекунд в проектируемом миллисекундомере предусмотрен жидкокристаллический индикатор (ЖКИ или LCD в иностранном обозначении) типа WH1602А.
Жидкокристаллический индикатор представляют собой печатную плату, на которой смонтирован дисплей, контроллер и необходимые дополнительные электронные компоненты представлен на рисунке 3.20.
Рисунок 3.20 – знакосинтезирующий индикатор.
В схеме необходима индикация с несколькими цифровыми разрядами, поэтому нужно использовать динамическое управление, предполагающее быструю коммутацию индицируемых разрядов. Динамическое управление экономит порты микроконтроллера. На рисунке 3.21 показан принцип работы такой схемы.
Контроллер синхронизируется внутренним RC-генератором G1, имеющим частоту 250±50 кГц. Напряжение подсветки подается через выводы А и К на светодиоды, которые освещают ЖК-панель с торца или обратной стороны корпуса. Светодиоды включены матрицей и соединены параллельно-последовательно. В связи с этим напряжение подсветки довольно высокое от 4,0 до 4,2 В.