\section{Разработка технического задания.}
\subsection{Предмет разработки}
    Информационно-управляющая система для микроволновой печи
\subsection{Представленные на рынке решения}
   Контроллер для микроволновой печи представляет собой устройство, которое:
   \begin{enumerate}
       \item обрабатывает сигналы, поступающие с панели управления;
       \item обеспечивает заданный режим работы в течение заданного времени;
       \item обеспечивает индикацию оставшегося времени работы печи и мощность.
    \end{enumerate}
    
    \subsubsection{Микроконтроллеры Toshiba.}
        Данные микроконтроллеры содержат контроллер БТИЗ для управления магнетронами и многоцелевые таймеры (таймер или счётчик + БТИЗ + ШИМ-управление). В них так же присутствует несколько АЦП с высокой скоростью преобразования. Представляются пятивольтовые микроконтроллеры архитектуры ARM (группа 380 серии TX03) для общего применения, предназначены для управления паровыми нагревателями, воздушными отопителями, воздушными вентиляторами обогрева и охлаждения. TMPM380 - один из микроконтролеров этого семейства на ядре ARM для общего применения, с частотой ядра 40 МГц. TMPM380 поставляется в корпусе со 100 контактами и управляет тремя каналами БТИЗ с помощью многоцелевого таймера. Кроме того в данных микроконтроллерах применена передовая технология флеш-памяти NANO FLASH\texttrademark, обеспечивающая высокую скорость и низкое энергопотрепление. TMP89FW20A и TMP89FW24A содержат один канал таймера БТИЗ для управления магнетронами. Они также содержат контроллеры ЖК-экрана для панелей управления и индикации. \\
        Цена на эти МК составляет порядка 400-500 рублей за штуку.
    \subsubsection{Контроллеры семейства MSC-51.}
        Микроконтроллеры семейства MSC-51 представлены следующими фирмами.
    \paragraph{Микроконтроллеры Dallas.}
        Данные микроконтроллеры, а в частности:  DS80C320-MCG, DS80C320-QCG, DS80C320-QNL, DS87C520-ENL, DS87C520-MCL, DS87C520-MNL, являются быстродействующими МК с большим объёмом RAM-памяти, с тактовой частотой 33 MГц, вполнены в корпусах DIP40 и PLCC44. \\
        Однако обладают высокой стоимостью (400 - 1800 руб.) за штуку, поэтому подробно рассматриваться не будут.
    \paragraph{Микроконтроллеры фирмы NXP Semiconductor.}
        Микроконтроллеры фирмы NXP Semiconductor представлены тремя моделями: P87C528EFBB/X SOT307-2, P87C51FA-5A OTP 8K, P87LPC764BN PDIP20 имея аналогичные характеристики с МК фирм Atmel, Intel обладают сходной с Toshiba ценой (250-470 руб. за штуку), в связи с чем рассматриваться дальше не будут.
    \paragraph{Микроконтроллеры Atmel.}
        Фирма Atmel Corporation – один из крупнейших мировых производителей микросхем энергонезависимой памяти. Фирма поставляет микросхемы энергонезависимой памяти практически всех видов: EEPROM с параллельным интерфейсом объемом до 4-х Мбит и несколькими типами последовательных интерфейсов объемом до 1-го Мбит, Flash EEPROM одноблочного и многоблочного типа с 8-ми и 16-ти разрядным параллельным интерфейсом объемом до 16-ми Мбит, многоблочные Flash EEPROM с последовательным интерфейсом объемом до 32-ти Мбит, 8-ми и 16-ти разрядные однократно программируемые EPROM cерии 27ххх до 8 Мбит, EEPROM для загрузки микросхем FPGA.
        Богатый опыт производства электрически перепрограммируемой памяти позволил фирме Atmel выйти на рынок с недорогими микроконтроллерами семейства MCS-51 (AT89Cxx), оснащенными Flash EEPROM для хранения программ. Будучи 100\% совместимыми как программно, так и аппаратно со стандартными микросхемами семейства MCS-51 и обладающими очень выгодной ценой, микроконтроллеры серии AT89Cхх становятся отличным выбором в условиях снижения или прекращения их производства такими традиционными производителями, как Intel. Кроме того, эти микроконтроллеры значительно более удобны и экономически выгодны на этапе разработки устройства, так как не требуют специальных отладочных вариантов микроконтроллеров и исключают процесс стирания с помощью источника ультрафиолетового излучения.

    \subsection{Описание разрабатываемой системы.}

    \subsubsection{Функциональность разрабатываемой ИУС.}
        \begin{itemize}
            \item Управление временем приготовления
            \item Управление мощностью магнетрона
            \item Индикация хода приготовления
                \begin{itemize}
                    \item Звуковая
                    \item На светодиодной панели
                \end{itemize}
        \end{itemize}
    \subsubsection{Ограничения на применение ИУС.}
        ИУС разрабатывалась строго для микроволновых печей и в область применения ограничивается только ими.

    \subsubsection{Ограничения на реализацию ИУС}
        \begin{itemize}
            \item Аппаратное обеспечение:
                \begin{itemize}
                    \item Микроконтроллер ADuC812BS
                    \item ЖКИ WH1602B-YGK-CP
                    \item Часы реального времени PCF8583
                    \item Матричная клавиатура AK1604A-WWB 
                    \item Звукоизлучатель
                    \item Панель светодиодов
                \end{itemize}
            \item Программные средства
                \begin{itemize}
                    \item Комилятор SDCC 
                    \item Инструментальная система M3P
                \end{itemize}
        \end{itemize}
    
    \subsubsection{Перспективные возможности ИУС.}
        \begin{itemize}
            \item Подача звукового сигнала при нажатии на клавиши
            \item Функция паузы приготовления
            \item Функция готовки по расписанию
            \item Сохранение режимов работы в E2PROM памяти
        \end{itemize}

    \subsubsection{Режимы работы.}
        \begin{itemize}
            \item Режим ожидания.
            \item Режим настройки.
            \item Режим готовки.
        \end{itemize}

    \begin{figure}[H]
        \center{\includegraphics[width=0.5\linewidth]{./images/IMS_UseCase_Course.png}}
        \label{ris:use_cases}
        \caption{Диаграмма прецедентов использования}
    \end{figure}

\section{Разработка архитектуры ИУС.}
    
    \subsection{Переферийные устройства использованные при разработке ИУС}
    В работе ИУС задействованы следующие устройства:
    \begin{itemize}
        \item Часы реального времени - используются для отображения текущего времени в режиме ожидания.
        \item Звукоизлучатель - используется для подачи звуковых сигналов, например при окончании приготовления
        \item Клавиатура - для задания параметров приготовления
        \item Панель светодиодов - для отображения процесса приготовления
        \item ЖКИ - индикация времени и оставшегося до конца приготовления времени.
    \end{itemize}

    \subsection{Описание особенностей разрабатываемой ИУС с точки зрения пользователя.}
    Интерфейс ИУС интуитивно понятен и прост, что позволяет использовать систему любой группе людей. Все выполняемые пользоватем действия вызывают изменение индикации, так, что пользователь всегда осведомлён о текущем состоянии системы. Предусмотрена так же возможность возврата к состоянию ожидания из любого другого состояния. 
    Пользователем могут выполняться следующие действия:
    \begin{itemize}
        \item Установка мощности
        \item Установка времени приготовления и запуск процесса приготовления
    \end{itemize}

    \subsection{Описание особенностей разрабатываемой ИУС с точки зрения разработчика.}
    Разработка велась на языке С с использованием парадигмы процедурного программирования. Для псеводопаралльной обработки заданий использовались прерывания по таймеру, такие возможности были необходимы, например, для обработки клавиатурных нажатий отдельно от основной логики программы. При разработке интерфейса и логики работы ИУС был построен конечный автомат (Рисунок \ref{ris:ui_fa}). 

    \begin{figure}[H]
        \center{\includegraphics[width=0.5\linewidth]{./images/ui_fa.png}}
        \label{ris:ui_fa}
        \caption{Описание работы ИУС с помощью конечного автомата}
    \end{figure}

    При этом программное обеспечение было разбито на модули, использование которых возможно и в других проектах на данной платформе с минимальными доработками или вовсе без них. В итоге были получены следующие модули:
    \begin{itemize}
        \item Драйвер часов реального времени.
        \item Драйвер клавиатуры.
        \item Драйвер светодиодной панели.
        \item Драйвер звукоизлучателя.
        \item Драйвер ЖКИ.
        \item Модуль, реализующий основную логику работы ИУС.
    \end{itemize}
    
    Для предложенных ранее расширений функциональности ИУС необходимы следующие доработки:
    \begin{itemize}
        \item Для подачи звукового сигнала при нажатии клавиш требуется пересмотр архитектуры драйвера клавиатуры 
        \item Для функции паузы и готовки по расписанию необходима доработка конечного автомата описывающего логику работы программы и реализация этих доработок
        \item Для сохранения режимов работы в E2PROM памяти необходимо разработать драйвер E2PROM, а так же выбрать формат хранения режимов и режим доступа к памяти для обеспечения целостности данных в ситуации если доступ в эту память потребуется и другим модулям
    \end{itemize}

\section{Разработка программного обеспечения.}
    
    \subsection{Драйвер часов реального времени.}
        Драйвер часов реального времени содержит в себе две функции: установки и получения времени. Взаимодействие осуществляется по протоколу I2C, за работу с I2C отвечает реализованная в ADuC812 логика.
    \subsection{Драйвер клавиатуры.}
        В драйвере клавиатуры по прерыванию от таймера вызывается процедура, считывающая состояние выходов клавиатуры, при этом запоминается текущая нажатая клавиша, если по прошествию определённого интервала времени данная клавиша всё ещё нажата, то соотвествующий ей ASCII-код заносится в кольцевой буффер, откуда может быть прочитан другим модулем, так же реализована поддержка повторов нажатия, т.е. при долгом нажатии одной клавиши, соответствующие ей коды будут заносится в буффер с определённым интервалом, что улучшает удобство пользовательского интерфейса.   
    \subsection{Драйвер светодиодной панели.}
        В драйвере светодиодной панели реализованы функции зажигания светодиодов по определённой маске и их сброса, путём установки соответсвующих значений в нужные регистры расширителя портов. 
    \subsection{Драйвер звукоизлучателя.}
        Драйвер звукоизлучателя предоставляет синхронный интерфейс для проигрывания определённых нот с определённой длительностью. Для этого используется один из таймеров ADuC812, по прерыванию от которого производится запись значений в АЦП, значения счётных регистров таймера вычиляются перед началом проигрывания звука, для обспечения задержки на время проигрывания используется алгоритм активного ожидания и временные метки предоставляемые другим модулем. 
    \subsection{Драйвер ЖКИ.}
        Драйвер ЖКИ использует расширитель портов для организации взаимодействия с ЖКИ, а так же встроенный в ЖКИ знакогенератор. Драйвер так же предоставяет синхронный интерфейс и функции для очистки экрана, вывода символов и уставновки курсора.    
    \subsection{Модуль, реализующий основную логику работы ИУС.}
        Отвечает за обработку пользовательского ввода и взаимодействие с остальными модулями представлен в виде конечного автомата (рисунок \ref{ris:ui_fa}). Кроме этого дополнительно был реализован модуль для парсинга введённых строк и форматированного вывода.  

\section{Отладка и тестирование встраиваемого программного обеспечения.}
    \subsection{Отладка.}
        В целях отладки была использована утилита M3P. M3P является кросплатформенной инструментальной системой со встроенным интерпретатором языка FORTH и предназначена для решения следующих задач:
        \begin{itemize}
            \item Отладки, тестирования и внутрисистемного программирования встроенных систем
            \item Интеграции инструментальных средств в единую систему
            \item Связывания разнородных инструментальных средств посредством языка сценариев. 
        \end{itemize}
        
        В целях отладки была использована возможность терминального доступа через утилиту M3P по UART на передавалась необходимая отладочная информация о состоянии системы.

    \subsection{Статическое тестирование.}
        \subsubsection{Code Review.}
            Так как данная работа выполнялась тремя студентами была возможность использовать методику code review, в результате было найдено и устранено несколько ошибок, а так же повышено качество кода.
    \newpage
    \subsection{Функциональное тестирование.}
        \subsubsection{Тестовое покрытие.}
        Тестовое покрытие составлялось на основе прецедентов использования (рисунок \ref{ris:use_cases}). 

        \begin{adjustbox}{max width=0.3\textwidth} 
        \begin{tabular}[H]{| l | l |} 
           \hline
           Имя прецедента & Установка мощности \\
           \hline
           Описание & Ввод нового значения мощности \\
           \hline
           Предусловия & Система находится в состоянии ожидания \\
           \hline
           Основной поток & \begin{minipage}[t]{0.4\linewidth}
                                \begin{enumerate}
                                    \item Пользователь вводит новое значение мощности с помощью клавиатуры
                                    \item Пользователь нажимает кнопку 'B'
                                    \item Система валидирует новое значение
                                    \item В случае успешной валидации устанавливается новое значение мощности
                                    \item Система переходит в состояние ожидания
                                \end{enumerate}
                            \end{minipage} \\
            \hline
            Постусловие & Установлено новое значение мощности \\
          \hline
        \end{tabular}
        \end{adjustbox}

        \begin{adjustbox}{max width=0.3\textwidth} 
        \begin{tabular}[H]{| l | l |} 
           \hline
           Имя прецедента & Готовка \\
           \hline
           Описание &  \\
           \hline
           Предусловия & Система находится в состоянии ожидания \\
           \hline
           Основной поток & \begin{minipage}[t]{0.4\linewidth}
                                \begin{enumerate}
                                    \item Пользователь вводит значение продолжительности готовки с помощью клавиатуры
                                    \item Пользователь нажимает кнопку 'A'
                                    \item Система проверяет значение продолжительности
                                    \item В случае успешной валидации запускается процесс готовки
                                    \item В процессе происходит индикация на панели светодиодов и вывод оставшегося времени на LCD
                                    \item По окончании процесса производится звуковая индикация
                                \end{enumerate}
                            \end{minipage} \\
          \hline
        \end{tabular}
        \end{adjustbox}

        В результате тестирования были выявлены и устранены дефекты ПО. 

\section{Вывод}
    В результате были разработаны требования к информационно-управляющей системе и проведён анализ существующих на рынке решений. Проведена разработка архитектуры ПО и самого програмного обеспечения, проведено тестирование.  
