- •2.1.1 Память микроконтроллера
- •3.2 Разработка схемы электрической принципиальной цифрового табло
- •3.3 Разработка схемы электрической принципиальной блока звуковой сигнализации
- •3.4 Разработка схемы электрической принципиальной блока выбора времени выдержки
- •4 Разработка программы
- •5 Описание работы устройства
- •6.2 Расчет цифрового табло
4 Разработка программы
В таблице 4.1 перечислены переменные, используемые в программе.
Таблица 4.1 – Переменные, используемые в программе
Имя переменной |
Адрес регистра |
Назначение переменной |
MINE |
R16 |
Регистр единиц минут |
MIND |
R17 |
Регистр десятков минут |
V |
R18 |
Регистр знакоместа |
temp |
R19 |
Временный регистр |
SEK |
R20 |
Счетчик секунд |
INE |
R21 |
Регистр индикации единиц |
IND |
R22 |
Регистр индикации десятков |
kdel |
константа |
62500 |
После подачи напряжения питания к микроконтроллеру, происходит первичная инициализация микроконтроллера. В регистры ввода-вывода SPH и SPL загружается значение верхнего адреса внутреннего ОЗУ, для того чтобы проинициализировать стек, который в свою очередь будет обеспечивать корректный переход на подпрограмму и возврат из неё.
Затем линии РА0 - РА5 порта А настраиваются на ввод, линия RA7 на вывод загрузкой кода $80 в регистр DDRА. Для обеспечения высокого уровня напряжения на входах PA0 - PA5 при не нажатом состоянии кнопок SB1-SB6 подключаются подтягивающие резисторы PORTA загрузкой кода $3F6.
Линии РС0 – РС1 и РВ0 – РВ6 настраиваются на вывод, установкой в 1 разрядов регистров DDRC и DDR. Обнуляются РОНы ind и ine.
Настройка таймера Т0 начинается с загрузки в OCR0 количества тактов, после которого микроконтроллер вызовет прерывание. Затем загружаем 1 в биты TOIE0 и OCIE0 регистра TIMSK для разрешения прерываний от таймера Т0.
Для того, что бы реализовать динамическую индикацию, необходим таймер для определения времени свечения одного знакоместа.
Рассчитывается такт микроконтроллера
,
(4.1)
где
– длительность такта микроконтроллера,
мкс;
– частота микроконтроллера, МГц.
.
Рассчитывается коэффициент деления для формирования длительности сигнала 4мс:
,
(4.2)
где
– коэффициент деления;
– время задержки, мкс;
– длительность такта микроконтроллера, мкс.
Восьмиразрядный таймер T0 имеет максимальный коэффициент деления 256, необходимо использовать предварительный делитель. Выбирается коэффициент деления предделителя 64.
Рассчитывается коэффициент деления таймера Т0.
(4.3)
где
– коэффициент деления таймера, т;
– коэффициент деления, т;
– коэффициент деления предделителя.
Так как таймер Т0 будет работать в режиме сравнения, необходимо загрузить число 250 в регистр сравнения OCR0.
Разрешается прерывание таймера Т0 в режиме совпадения CTC, установкой бита OCIE0 в регистр TIMSK. Структура регистра TIMSK приведена в таблице 4.2
Таблица 4.2 – структура регистра TIMSK
Номер бита |
Имя |
Назначение |
Пояснение |
0 |
TOIE0 |
Прерывание по переполнению |
1-разрешено 0-запрешено |
1 |
OCIE0 |
Прерывание по событию «Совпадение» |
1-разрешено 0-запрешено |
2 |
TOIE1 |
Прерывание по переполнению |
1-разрешено 0-запрешено |
3 |
OCIE1B |
Прерывание по событию «Совпадение В» |
1-разрешено 0-запрешено |
4 |
OCIE1A |
Прерывание по событию «Совпадение А» |
1-разрешено 0-запрешено |
5 |
TICIE1 |
Прерывание по событию «Захват» |
1-разрешено 0-запрешено |
6 |
TOIE2 |
Прерывание по переполнению |
1-разрешено 0-запрешено |
7 |
OCIE2 |
Прерывание по событию «Совпадение» |
1-разрешено 0-запрешено |
После разрешения прерываний от таймера Т0, меняется режим работы на CTC(режим по совпадению), загрузкой в TCCR0 код 00001011. Структура регистра TCCR0 приведена на рисунке 4.1
Рисунок 4.1 – Структура регистра TCCR0
Биты CS02, CS01, CS00 (Clock Select) - определяют источник тактовой частоты для таймера Т0 и задают коэффициент предделителя. Все возможные состояния описаны на рисунке 4.2.
Рисунок 4.2 – Состояния битов CS02 - CS00
Биты WGM10, WGM00 (Wave Generator Mode) - определяют режим работы таймера-счетчика Т0. Их состояния приведены на рисунке 4.3.
Рисунок 4.3 – Состояния битов WGM10, WGM00
Настройка таймера завершена и остается только установить флаг I в регистре SREG.
После инициализации микроконтроллера начинается опрос кнопок если на линии РA1 появится низкий потенциал, т.е. кнопка SB1 нажата, то в регистры MINE и MIND загрузится количество минут, которое нужно отсчитать(выбирается в зависимости от нажатой кнопки). Загружаем в регистры OCR1AH и OCR1AL количество тактов. Выбираем режим в TCCR1B номер режима и коэффициент деления. После чего таймер начинает работу. Выводим значение MINE и MIND на индикатор. Ждем прерывания от таймера и вычитаем единицу из MINE, выводим новое значение на индикатор. После того, как MINE и MIND станут равными 0, подается звуковой сигнал. И микроконтроллер возвращается к опросу кнопок.
Для формирования таймером Т1 1 секунды будет использоваться режим сброса по совпадению. Расчет значения загружаемого в регистр сравнения OCR1.
Рассчитывается длительность такта микроконтроллера:
, (4.4)
где – длительность такта микроконтроллера, мкс;
– частота микроконтроллера, МГц.
.
Рассчитывается количество тактов микроконтроллера для формирования длительности сигнала 1 секунда:
,
(4.5)
где N – количество тактов микроконтроллера;
– время задержки, мкс;
– длительность такта микроконтроллера, мкс;
.
Шестнадцатиразрядный таймер T1 имеет максимальный коэффициент деления 65536, необходимо использовать предварительный делитель. Выбираем коэффициент деления 64. Рассчитывается частота сигнала на выходе предварительного делителя.
,
(4.6)
где
– частота сигнала на выходе предделителя,
Гц;
– частота микроконтроллера, МГц;
– коэффициент деления предделителя;
.
Рассчитывается период сигнала на выходе предделителя.
,
(4.7)
где
– длительность такта на выходе
предделителя, мкс.
,
Рассчитывается коэффициент деления таймера Т1.
,
(4.8)
.
