РSМАХ = РSИС + РSЭРЭ , (1)
где РSИС – суммарная мощность, потребляемая интегральными микросхемами; РSЭРЭ – суммарная мощность, рассеиваемая электрорадиоэлементами.
Мощность, потребляемая интегральными микросхемами:
РSИС = РSИСстат + РSИСдин , (2)
где РSИСстат – статическая мощность;
РSИСдин – динамическая мощность.
Для проектируемого устройства составляющие суммарной потребляемой мощности будут считаться по следующим образом:
Мощность, рассеиваемая ЭРЭ (резисторы имеют фиксированную рассеиваемую мощность):
РSR= 20 шт * 0,125 Вт = 2,5 Вт
Мощность, потребляемая МС является суммой потребляемых мощностей в статическом и динамических режимах.
Согласно документации ток потребляемый в активном динамическом режиме (при частоте 4 МГц) составляет около 12 мА. При напряжении 5 В потребляемая мощность = 60 мВт.
В статическом режиме каждый порт выдаёт ток около 3 мА. Т.о. суммарная рассеиваемая мощность составляет 150 мВт.
Рåимс = РL7805 + РMAX233 + РАТ90S8535
Рåимс = 30 + 890 + 210 = 1,130 Вт;
Данный расчёт является приблизительным, поскольку работа схемы осуществляется в асинхронном режиме, и в каждый момент времени существует большое количество неактивных цепей.
Суммарная максимальная мощность, потребляемая микроконтроллерной системой:
Рмах = Рåимс + РR = 3,63 Вт
Общая схема алгоритма приведена на рисунке 4.
Программа для разрабатываемой системы состоит из нескольких основных частей:
· Блок начальной инициализации системы;
· Блок обработчиков прерываний;
· Блок обработки режимов микроконтроллера;
· Блок служебных подпрограмм.
Рассмотрим эти алгоритмы более подробно.
Блок начальной инициализации системы содержит операции для программирования таймера, UART-интерфейса и других различных настроек.
Инициализация UART заключается в установке скорости его работы в значение 9600 бит/с путём загрузки в регистр UBRR значения 25, а также в настройке его на чтение (а не на запись), что осуществляется записью в UCR значения 144.
Инициализация таймера заключается в задании режима его работы от внешнего резонатора (а не от внутреннего генератора частоты), разрешении прерываний таймера (по переполнению). Далее осуществляется запуск таймера.
Блок обработчиков прерываний обслуживает возникающие в системе прерывания в соответствии с заложенным алгоритмом. Выделено два обработчика прерываний: от таймера и от UART-интерфейса.
Обработчик прерывания UART осуществляет запоминание введённой пользователем по последовательному интерфейсу команды в одном из внутренних регистров процессора, что позволяет произвести её обработку в подходящий момент времени, не нарушая работы канала передачи.
Обработчик прерывания таймера осуществляет корректировку текущего времени, увеличивая счётчик секунд, минут, часов, дней и месяцев. Одна секунда отсчитывается таймером (частота работы которого задаётся от внешнего резонатора частотой 32768 Гц) за 32768 цикла. Использовать делители частоты при работе от внешнего резонатора, в отличие от работы от внутреннего генератора, нельзя, а частота кварца 32768 Гц рекомендована производителем МК для реализации часов реального времени.
Так как таймер 8-ми разрядный, то у нас есть возможность досчитать только до 256, таким образом, необходимо организовать ещё дополнительный множитель 128, что и организовано в регистре R28.
По прошествии одной секунды увеличивается значение секунд в регистре R27, а затем полученное значение сравнивается с 60-ю. При получении равенства, счётчик секунд обнуляется, а счётчик минут инкрементируется, с последующим сравнением количества минут с 60-ю и возможной инкрементацией счётчика часов. И так продолжается до тех пор, пока все значения (месяца, дня, часа, минуты, секунды) не будут посчитаны.
Блок обработки режимов микроконтроллера содержит три основные подпрограммы для каждого из возможных режимов работы микроконтроллера: режима корректировки времени, режима установки времени и режима установки расписания.
Режим корректировки времени осуществляет увеличение счётчика дней на 1, с последующей проверкой на достижение 32-х с возможной корректировкой месяца. Это может использоваться пользователем, когда прошлый месяц содержал только 30 дней, и первого числа следующего месяца часы показывают 31-е (так нет разграничения на 30-ти и 31-но дневные месяцы). Тогда выбором этого режима пользователь легко корректирует дату.
Режим установки времени позволяет установить текущие значения даты и времени, без проверки их правильности. После выбора этого режима программа ожидает от пользователя ввода текущего месяца, затем дня, часа и минуты. После выполнения всех действий и вступления изменений в силу, программа возвращается в нормальный режим работы.
Режим установки расписания позволяет пользователю задать дату и время включения и выключения выбранного им прибора. После выбора этого режима микроконтроллер ожидает ввода номера прибора, для которого будет задаваться расписание. После выбора прибора пользователь должен ввести дату и время включения выбранного прибора в формате ММ-ДД-ЧЧ-мм, а затем дату и время выключения данного прибора в том же формате. После ввода система переходит в обычный режим работы.
Блок служебных подпрограмм представляет собой остальные подпрограммы, необходимые для работы. К ним относятся подпрограмма предварительной очистки EEPROM (хотя её можно было отнести к блоку инициализации), подпрограмма ожидания (основной режим), а также подпрограмма, осуществляющая включение или выключение приборов при совпадении текущего времени с каким-либо расписанием.
После запуска прибора выполняется блок инициализации программы, осуществляющий загрузку начальных значений и установку режимов работы устройств микроконтроллера. Также производится запуск таймера.
Далее программа переходит в основной режим своей работы, в течение которого вызывается подпрограмма проверки расписания, осуществляющая сравнение текущей даты-времени со всеми значениями расписания в памяти и вызов при необходимости подпрограммы активации/деактивации подключенных устройств. Также основная программа постоянно опрашивает значение регистра, работающего с UART для обнаружения факта задания одного из режимов работы МК. При обнаружении этого факта управление передаётся подпрограмме выявления номера режима, и далее на обработчик выбранного режима.
Если режим не задан, то основная программа вновь осуществляет проверку расписания. Это необходимо делать довольно часто в связи с достаточно большим объемом программного кода, осуществляющего эту проверку, а также в связи с достаточно большим значением самих проверяемы значений (80 байт).
При подаче пользователем через последовательный интерфейс сигнала о выборе режима, генерируется прерывание от UART, что впоследствии быстро выявляется в основной программе.
Успешная трансляция ещё не означает, что код не содержит ошибок. Она означает, что нет ошибок синтаксического плана, но сам алгоритм может работать совершенно неверно. Для его отладки необходимо проверить все его ветви и возможные переходы. Программа была отлажена с помощью Win32 AVRStudio 4. Листинг программы представлен в приложении 1.
Изначально проектировалась секция инициализации, и основная часть – режим ожидания. Запуск на выполнение позволял полностью отладить программу.
При проектировании обработчика прерывания таймера, как собственно и остальных участков программы отладка производилась в пошаговом режиме с постоянным контролем содержимого регистров портов и т.п. Иногда было необходимо вставлять дополнительные операторы, для выявления некоторых ситуаций (чаще всего это операторы присвоения). Такой подход позволял полностью выявить ошибки в коде.
При разработке подпрограммы работы с UART и обработки режимов микроконтроллера, возникла необходимость моделирования внешнего устройства (COM-порта), по которому пользователь будет посылать управляющие сигналы на МК. В этом случае производилась отладка кода до момента непосредственно ввода пользовательских данных (в пошаговом режиме или режиме «запуск до курсора), затем вручную менялось содержимое какого-либо порта или регистра и затем выполнение продолжалось далее в пошаговом режиме. Такой способ позволил довольно легко отладить участки кода, где требовалось непосредственное вмешательство пользователя в содержимое регистров и портов микроконтроллера.
МК AT90S8535 предоставляет 8 Кб перепрограммируемой FLASH – памяти. Для программирования может использоваться высоковольтный параллельный или низковольтный последовательный режимы программирования. Первый способ используется для программирования памяти с невозможностью её последующего изменения пользователем. Второй же предоставляет возможность загружать программу пользователем. Каждый метод предусматривает свой алгоритм загрузки программы, каждый из которых подробно рассмотрен в документации на микроконтроллер.
Параллельное программирование.