- •Встраиваемые системы Проектирование приложений на микроконтроллерах семейства 68hc12/hcs12 с применением языка с с. Ф. Баррет
- •Предисловие
- •Структура книги
- •Учебные системы
- •Целевая аудитория
- •Благодарности
- •Глава 1 первое знакомство со встраиваемыми системами
- •1.1. Что такое встраиваемая система?
- •1.2. Особенности встраиваемых систем
- •1.2.1. Работа в реальном времени
- •1.2.2. Миниатюризация размеров и процесс тестирования
- •1.2.3. Минимизация энергии потребления
- •1.2.4. Интерфейс пользователя и интерфейс сопряжения с объектом
- •1.2.5. Многозадачность
- •1.2.6. Минимизация стоимости
- •1.2.7. Ограничение объема памяти
- •1.2.8. Программно–аппаратный дуализм
- •1.3. Введение в микроконтроллеры семейства 68hc12 и hcs12
- •1.4 Микроконтроллеры hcs12
- •1.4.1. Семейство hcs12
- •1.4.2. Обозначения мк
- •1.4.3. Модельный ряд hcs12
- •1.5. Заключение по главе 1
- •1.6. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 2 программирование встраиваемых систем и структурное проектирование
- •2.1. Почему мы программируем микроконтроллеры на Си?
- •2.2. Преимущества программирования на языке ассемблер
- •2.3. Преимущества языков высокого уровня
- •2.3.1. Выбираем язык высокого уровня для программирования встраиваемых систем
- •2.3.2. Краткая история языка Си
- •2.4. Оптимальная стратегия — программирование на Си и на ассемблере
- •2.5. Структурное проектирование
- •2.5.1. Основные положения метода структурного проектирования
- •2.5.2. Документирование программ
- •2.5.3. Как язык Си соотносится со структурным проектированием
- •2.6. Рабочие тетради
- •2.6.1. Порядок ведения записей
- •2.6.2. Содержание записей
- •2.7. Блок схемы алгоритмов
- •2.8. Пример применения
- •2.9. Заключение по главе 2
- •2.10 Что еще почитать?
- •2.11 Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 3 основы программирования микроконтроллеров на си
- •3.1. Введение в программирование на Си
- •3.1.1. Глобальные и локальные переменные
- •3.2. Типы данных в Си
- •3.3. Операторы языка Си
- •3.4. Функции
- •3.4.1. Что такое функция?
- •3.4.2. Основная программа
- •3.4.3. Прототипы функций
- •3.4.4. Описание функций
- •3.4.5. Вызов функций, передача параметров, возврат полученных значений
- •3.5. Файлы заголовков
- •3.6. Директивы компилятора
- •3.6.1. Директивы условной компиляции
- •3.7. Конструкции программирования
- •3.8. Операторы для организации программных циклов
- •3.8.1. Оператор for
- •3.8.2. Оператор while
- •3.8.3. Оператор do-while
- •3.9. Операторы принятия решения
- •3.9.1. Оператор if
- •3.9.2. Оператор if-else
- •3.9.3. Оператор if-else if-else
- •3.9.4. Оператор switch
- •3.10. Массивы
- •3.11. Указатели
- •3.12. Структуры
- •3.13. Процесс программирования и отладки микропроцессорной системы
- •3.13.1. Технология создания программного кода
- •3.13.2. Режим отладки bdm
- •3.13.3. Аппаратные и программные средства отладчика p&e от компании pemicro
- •3.13.4. Эмуляторы
- •3.13.5. Логические анализаторы
- •3.14. Особенности компилятора и ассемблера
- •3.15. Заключение по главе 3
- •3.16. Что еще почитать?
- •3.17. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 4 микроконтроллеры 68hc12 и hcs12: архитектура и программирование
- •4.1. Аппаратные средства микроконтроллеров семейства 68hc12
- •4.2. Аппаратные средства мк семейства hcs12
- •4.3. Режимы работы мк семейства 68hc12/hcs12
- •4.3.1. Рабочие режимы
- •4.3.2. Режимы работы отладочной платы m68evb912b32
- •4.4. Назначение выводов мк
- •4.5. Регистры специальных функций мк
- •4.5.1. Виртуальный адрес блока регистров
- •4.6. Порты ввода/вывода
- •4.6.1. Спецификация портов ввода/вывода
- •Регистры управления портами
- •Вопросы для самопроверки
- •Пример применения
- •4.7. Подсистема памяти мк b32
- •Пример применения
- •4.7.1. Карта памяти мк b32
- •4.7.2. Изменение адресов в карте памяти мк
- •4.8. Подсистема памяти мк dp256
- •Вопросы для самопроверки
- •4.9. Состояния сброса и прерывания мк
- •4.9.1. Реакция мк на внешние события
- •4.10. Состояния сброса и прерывания в мк 68hc12
- •4.10.1. Состояние сброса мк
- •Регистры сторожевого таймера и монитора тактирования
- •4.10.2. Прерывания
- •Немаскируемые прерывания
- •Маскируемые прерывания
- •Вопросы для самопроверки
- •3. Каково различие между прерываниями по входам
- •4. Как организовать подсистему прерывания с несколькими внешними запросами для мк семейства 68hc12/hcs12, используя лишь один вход внешнего прерывания
- •4.10.3. Вектора исключений
- •4.10.4. Система приоритетов для исключений
- •1. Внешний сброс по входу
- •5. Немаскируемое прерывание по входу
- •Вопросы для самопроверки
- •4. Какие действия должен предпринять программист, чтобы после начального запуска мк присвоить входу
- •4.10.5. Регистры подсистемы прерывания
- •4.11. Процесс перехода к подпрограмме прерывания
- •Вопросы для самопроверки
- •4.12. Оформление подпрограммы прерывания на Си
- •4.13. Система тактирования
- •4.13.1.Система тактирования отладочной платы mc68hc912b32evb
- •4.14. Подсистема реального времени — модуль таймера
- •4.14.1. Структура модуля таймера
- •4.14.2. Счетчик временной базы
- •Особенности счетчика временной базы
- •Флаг переполнения счетчика
- •Определение длительности временных интервалов
- •Сброс счетчика временной базы
- •Вопросы для самопроверки
- •4.14.3. Регистры для управления счетчиком временной базы
- •Регистр управления модулем таймера
- •Регистр счетчика временной базы
- •Регистр масок таймера 2
- •4.14.4. Каналы захвата/сравнения
- •Режим входного захвата
- •Вопросы для самопроверки
- •Режим выходного сравнения
- •Канал 7 в режиме выходного сравнения
- •Регистры для управления каналами захвата/сравнения
- •Регистры управления таймером 3 и 4
- •Регистр масок таймера 1
- •Регистр масок таймера 2
- •Регистр флагов таймера 1
- •Регистр флагов таймера 2
- •Регистры данных каналов захвата/сравнения
- •Вопросы для самопроверки
- •Примеры работы с таймером
- •Измерение частоты и периода логического сигнала
- •Генерация импульсной последовательности
- •Генерация импульсной последовательности с использованием прерывания
- •4.14.5. Счетчик событий
- •Режимы работы счетчика
- •Регистры управления счетчиком событий
- •Регистр управления счетчиком событий
- •Регистр флагов счетчика событий
- •Регистр текущего состояния счетчика событий
- •Пример использования счетчика событий
- •4.15. Модуль меток реального времени
- •Пример использования модуля меток реального времени
- •4.16. Модуль таймера ect в составе мк мc68hc12be32 и hcs12
- •4.16.1. Небуферированные каналы входного захвата
- •4.16.2. Буферированные каналы входного захвата
- •4.16.3. Особенности счетчиков событий
- •4.16.4. Регистры управления модуля est
- •Регистр управления порядком перезаписи
- •Регистр управления режимом входного захвата
- •Регистр управления счетчиком задержки
- •Регистр управления 16-разрядным вычитающим счетчиком
- •Регистр коэффициента счета вычитающего счетчика
- •Регистр флагов вычитающего счетчика
- •4.17. Обмен информацией в последовательном коде: многофункциональный последовательный интерфейс
- •4.17.1. Термины последовательного обмена
- •Вопросы для самопроверки
- •4.18. Контроллер асинхронного обмена sci
- •Вопросы для самопроверки
- •4.18.1. Передатчик контроллера sci
- •4.18.2. Приемник контроллера sci
- •4.18.3. Регистры контроллера sci
- •Регистры скорости обмена sCxBdh и sCxBdl
- •Регистры управления sCxCr1 и sCxCr2
- •Регистры состояния sCxSr1 и sCxSr2
- •Регистры данных sCxDrh и sCxDrl
- •Вопросы для самопроверки
- •4.18.4. Алгоритмы программного обслуживания контроллера sci
- •4.18.5. Пример программирования контроллера sci
- •4.19. Синхронный последовательный интерфейс spi
- •4.19.1 Концепция интерфейса spiФункциональная схема обмена между двумя контроллерами spi
- •4.19.2. Алгоритмы работы контроллера spi
- •Вопросы для самопроверки
- •4.19.3. Регистры контроллера spi
- •Регистр скорости обмена sPxBr
- •Регистры управления sPxCr1 и sPxCr2
- •Регистр данных spCxDr
- •Регистр данных порта s
- •Регистр направления передачи порта s
- •Вопросы для самопроверки
- •4.19.4. Алгоритмы программного обслуживания контроллера spi
- •4.19.5 Периферийные ис с интерфейсом spi
- •4.20. Введение в теорию аналого-цифрового преобразования
- •4.20.1. Частота дискретизации сигнала
- •4.20.2. Представление аналоговой величины в цифровом коде
- •4.20.3.Квантование по уровню и разрешающая способность
- •4.20.4 Скорость потока данных оцифровки
- •Вопросы для самопроверки
- •4.21. Принцип действия ацп
- •4.21.1. Ацп последовательного приближения
- •Вопросы для самопроверки
- •4.22. Подсистема аналого-цифрового преобразования мк 68hc12
- •4.22.1 Структура и порядок функционирования
- •4.22.2. Регистры управления модуля atd
- •Группа регистров управления
- •Регистры управления atdctl0 и atdctl1
- •Регистр управления atdctl2
- •Регистр управления atdctl3
- •Регистр управления atdctl4Формат регистра atdctl4
- •Регистр управления atdctl5
- •Вопросы для самопроверки
- •Регистр состояния atdstat
- •Регистр данных порта portad
- •Регистры результата adr0h…adr7h
- •Вопросы для самопроверки
- •Тестовый регистр atdtest
- •4.22.3. Пример программирования модуля atd
- •Цифровой вольтметр
- •4.22.4. Обслуживание прерываний от модуля atd
- •4.23. Особенности модуля atd в составе мк семейства hcs12
- •4.23.1. Выбор разрядности ацп
- •4.23.2. Представление результата измерения
- •4.23.3. Запуск измерительной последовательности от внешнего сигнала
- •4.23.4. Программируемое число преобразований в измерительной последовательности
- •4.23.5. Увеличение числа аналоговых входов
- •4.23.6. Регистры модуля atd hcs12
- •Регистр состояния atdstat0
- •Регистр состояния atdstat1
- •Регистр разрешения цифрового входа порта atddien
- •4.24. Подсистема широтно-импульсной модуляции
- •4.24.1. Структура модуля pwm
- •4.24.2. Режимы центрированной и фронтовой шим
- •4.24.3. Система тактирования
- •4.24.4. Регистры модуля pwm
- •Регистр конфигурации pwclk
- •Регистр конфигурации pwpol
- •Регистр разрешения работы каналов pwen
- •Регистр дополнительного делителя pwpres
- •Регистры делителей pwscnt0/pwscnt1 и pwscal0/pwscal0
- •Регистры счетчика каналов pwcnTx
- •Регистры периода каналов pwpeRx
- •Регистры коэффициента заполнения каналов pwdtYxФормат регистров коэффициента заполнения pwdtYx
- •Регистры коэффициента заполнения каналов pwdtYx
- •Регистр управления pwctl
- •Регистр специальных режимов pwtst
- •Регистры работы с портом p
- •4.24.5. Примеры программирования модуля pwm
- •Инициализация модуля pwm, пример 1
- •Инициализация модуля pwm, пример 2
- •4.25. Ограничение энергии потребления
- •4.25.1. Как остановить мк 68hc12
- •4.25.2. Как вывести мк 68hc12 из состояния пониженного энергопотребления
- •4.26. Советы по использованию платы отладки mc68evb912b32
- •4.27. Заключение по главе 4
- •4.28. Что еще почитать?
- •4.29. Вопросы и задания Основные
- •Исследовательские
- •Глава 5 основы сопряжения мк с устройствами ввода/вывода
- •5.1. Электрические характеристики мк 68hc12
- •5.1.1. Нагрузочные характеристики
- •5.1.2. Что произойдет, если Вы должным образом не учтете электрические характеристики периферийных ис?
- •5.1.3. Входные и выходные характеристики логических элементов
- •5.2. Устройства дискретного ввода: кнопки, переключатели, клавиатуры
- •5.2.1. Кнопки и переключатели
- •5.2.2. Dip переключатели
- •5.2.3. Клавиатуры
- •5.3. Устройства индикации: светодиоды, семисегментные индикаторы, индикаторы логического выхода с тремя состояниями
- •5.3.1. Светодиоды
- •5.3.2. Семисегментные индикаторы
- •5.3.3. Индикаторы для логического выхода с тремя состояниями
- •5.4. Программное обслуживание дискретных входов и выходов
- •5.5. Подавление механического дребезга контактов переключателей
- •5.5.1. Аппаратная защита от механического дребезга контактов
- •5.5.2. Программная защита от механического дребезга контактов
- •5.5.3. Пример программной защиты
- •5.6. Жидкокристаллические индикаторы
- •5.6.1. Краткие сведения о жидкокристаллических индикаторах
- •5.6.2. Сопряжение мк с символьным жк индикатором
- •5.6.3 Сопряжение мк с графическим жк дисплеем
- •5.7. Управление электрическим двигателем
- •5.7.1. Силовые полупроводниковые ключи
- •5.7.2. Оптоэлектронная потенциальная развязка
- •5.7.3. Инвертор напряжения
- •5.8. Кодовый замок
- •5.8.1. Схема подключения периферийных устройств
- •5.8.2. Программа управления
- •5.9. Интерфейс мк с аналоговыми датчиками
- •5.10. Интерфейс rs-232
- •5.11. Заключение по главе 5
- •5.12. Что еще почитать?
- •5.13. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 6 добро пожаловать в реальный мир!
- •6.1. Ужасные истории об ошибках проектирования
- •6.1.1. Случай квадратичного генератора
- •6.1.2. Случай таймера для лазерного излучения
- •6.2. Правила обращения с микросхемой 68нс12 и рекомендации по проектированию
- •6.2.1. Рекомендации по обращению со cmos
- •6.2.2. Рекомендации по проектированию на cmos
- •6.3. Исследование помех
- •6.3.1. Что такое помехи
- •6.3.2. Электромагнитная совместимость
- •6.3.3. Спецификации системы помех — не будем крепки задним умом!
- •6.3.4. Методы снижения помех
- •6.4. Защитное программирование
- •6.5. Методики испытаний на наличие помех
- •6.5.1. Обнаружение помех
- •6.5.2. Испытание на чувствительность к помехам
- •6.5.3. Испытания на электромагнитную совместимость
- •6.6. Управление энергопотреблением
- •6.6.1. Параметры потребляемой мощности для микроконтроллера 68hc12
- •6.6.2. Типы батарей
- •6.6.3. Емкость батарей
- •6.6.4. Стабилизация напряжения
- •6.6.5. Схемы супервизора для микропроцессора
- •6.6.6. Меры энергосбережения
- •6.7. Заключение по главе 6
- •6.8. Что еще прочитать?
- •6.9. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 7 примеры встроенных систем управления
- •7.1. Система привода робота, движущегося вдоль стенок лабиринта
- •7.1.1. Описание проекта
- •7.1.2. Подсистемы 68hc12, используемые в проекте
- •7.1.3. Компоненты системы
- •7.1.4. Структура программы и блок-схема алгоритма
- •7.1.5. Программный код
- •7.2. Лазерный проектор
- •7.2.1. Описание проекта
- •7.2.2. Подсистемы 68hc12 используемые в проекте
- •7.2.3. Описание некоторых компонентов системы
- •7.2.4. Аппаратные средства
- •7.2.5. Структура программы и блок-схема алгоритма
- •7.2.6. Программный код
- •7.2.7. Испытания устройства
- •7.2.8. Заключительные испытания системы управления
- •7.3. Цифровой вольтметр
- •7.3.1. Описание проекта
- •7.3.2. Системы 68hc12 используемые в проекте
- •7.3.3. Расчет интерфейса модуля atd
- •7.3.4. Структура программы и блок-схема алгоритма
- •7.3.5. Программа управления
- •7.3.6. Измерение неэлектрических величин
- •7.4. Стабилизация скорости вращения двигателя с использованием оптического тахометра
- •7.4.1. Описание проекта
- •7.4.2. Немного теории
- •7.4.3. Анализ
- •7.4.4. Структура программы и блок-схема алгоритма
- •7.4.5. Программный код
- •7.4.6. Испытания
- •7.5. Парящий робот
- •7.5.1. Описание проекта
- •7.5.2. Системы hcs12 используемые в проекте
- •7.5.3. Теоретическое обсуждение
- •7.5.4. Структура программы и блок-схема алгоритма
- •7.5.5. Программный код
- •7.5.6. Некоторые комментарии
- •7.6. Система защиты компьютера, основанная на нечеткой логике
- •7.6.1. Описание проекта
- •7.6.2. Использование системы hcs12
- •7.6.3. Основы теории
- •7.6.4. Структура программы и блок-схема алгоритма
- •7.6.5. Описание системы
- •7.6.6. Обсуждение проекта
- •7.6.7. Программный код
- •7.6.8. Некоторые комментарии
- •7.7. Электронная версия игры в «15»
- •7.7.1. Описание проекта
- •7.7.2. Системы hcs12 используемые в проекте
- •7.7.3. Основы теории
- •7.7.4. Схемное решение, структура программы и блок-схема алгоритма
- •7.7.5. О компонентах системы
- •7.7.6. Программный код
- •7.7.7. Некоторые комментарии
- •7.8. Программирование резидентного Flash пзу микроконтроллера b32 в составе платы отладки mc68hc912b32evb
- •7.9. Заключение по главе 7
- •7.10. Что еще прочитать?
- •7.11. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 8 операционные системы реального времени
- •8.1. Рассказ: официант — «живая» операционная система реального времени
- •8.2. Что является целью осрв?
- •Вопросы для самопроверки
- •8.3. Обзор концепций
- •8.3.1. Требования к динамическому распределению ram
- •Вопросы для самопроверки
- •8.3.2. Динамическое распределение памяти
- •8.3.3. Структуры данных
- •8.4. Основные понятия
- •8.4.1. Что такое задача?
- •8.4.2. Управление задачами
- •8.4.3. Компоненты многозадачных систем
- •8.5. Типы операционных систем реального времени
- •8.5.1. Системы с циклическим опросом
- •8.5.2. Циклический опрос с прерываниями
- •8.5.3. Карусельные системы
- •8.5.4. Смешанные системы
- •8.5.5. Системы с управлением по прерыванию
- •8.5.6. Кооперативная многозадачность
- •8.5.7. Многозадачные системы с преимущественным приоритетом
- •8.6. Проблемы осрв
- •8.6.1. Конкуренция Другой рассказ
- •8.6.2. Повторная входимость
- •8.6.3. Межзадачные связи
- •8.6.4. Безопасность, проверка и безотказная работа
- •8.6.5. Главный вопрос
- •8.7. Выполнение операционной системы реального времени
- •8.8. Пример применения: осрв циклического опроса
- •8.8.1. Краткий обзор проекта
- •8.8.2. Пример кода
- •8.8.3. Испытание контроллера усилителя
- •8.9. Другая прикладная программа: цикл опроса с прерываниями
- •8.10. Сложное прикладное устройство: имитатор осрв
- •8.10.1. Краткий обзор проекта
- •8.10.2. Типовой код
- •8.11.Заключение по главе 8
- •8.12. Что еще почитать?
- •8.13. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
- •Глава 9 распределенные сети с интерфейсом msCan
- •9.1. Компьютерные сети
- •9.2. Промышленные сети
- •9.3. Сети с протоколом can
- •9.3.1. Протокол can
- •9.3.2. Модуль контроллера последовательного обмена msCan12
- •Подсистема прерывания контроллера msCan12.
- •9.3.3. Проблемы синхронизации
- •9.3.4. Конфигурирование модуля msCan12 для работы в сети
- •9.4. Различия между контроллерами msCan в составе 68hc12 и hcs12
- •9.5. Пример программирования контроллера msCan Схема включения аппаратных средств для двух отладочных плат Axiom
- •9.6. Контроллер последовательного обмена bdlc
- •9.7. Заключение по главе 9
- •9.8. Что еще почитать?
- •9.9. Вопросы и задания Основные
- •Более сложные
- •Исследовательские
7.2.7. Испытания устройства
До подсоединения компонентов системы к МК 68HC12, мы должны полностью проверить схему. В главе 5 мы рассматривали методики проверки, позволяющие моделировать входы системы переключателями, а выходы светодиодами. Наше устройство уже содержит переключатели и светодиоды для такой проверки. Однако, как мы проверим аналоговые сигналы? Имеется два метода, позволяющих легко проверить связь друг с другом сигналов на каналах X и Y:
1) использование перьевого X-Y графопостроителя,
2) использование классической контрольно-измерительной методики, связанной с получением так называемых фигур Лиссажу.
При первой методике, выходной аналоговый сигнал, формируемый X-каналом ЦАП, переключается с X-канала гальванометра на X-канал перьевого X-Y графопостроителя, а сигнал с Y-канала гальванометра на Y-канал на графопостроителя. Сигнал управления затвором может быть подан на драйвер пера графопостроителя, смещающийся вверх и вниз. Необходим плоттер со специальными характеристиками, чтобы определить, требуется ли схема интерфейса между ТТЛ совместимым сигналом для управления затвором от 68HC12 и управления движением пера вверх и вниз. После подключения микроконтроллера 68HC12 к графопостроителю, каждое из изображений может быть полностью проверено.
Вторая методика испытаний использует классический метод фигур Лиссажу. Чтобы получить фигуры Лиссажу, выходные сигналы с X-канала и Y-канала ЦАП подаются на соответствующие каналы осциллографа.
После подключения 68HC12 к осциллографу, каждое из изображений также может быть полностью проверено. Дополнительную информация о фигурах Лиссажу можно найти в [2].
7.2.8. Заключительные испытания системы управления
После полной проверки программного обеспечения, оно может быть испытано совместно с устройством управления лазером. Реальные устройства описываются в литературе, выпускаемой изготовителями оптических устройств и в учебниках, посвященных оптическим блокам [3, 8].
7.3. Цифровой вольтметр
7.3.1. Описание проекта
Для этого проекта мы должны разработать цифровой вольтметр (ЦВ), способный измерять входной аналоговый сигнал в диапазоне от +10 до –10 В. Измеряемое напряжение, отображается на ЖК дисплее, число знакомест которого позволяет отображать числа от 0 до 100.
Диапазон входных измеряемых напряжений для модуля аналого-цифрового преобразования ATD МК 68HC12 составляет 0…5 В. Чтобы измерить входное напряжение в более широком диапазоне, необходим внешний интерфейс. Поэтому мы преобразуем входной сигнал ±10 В в сигнал, лежащий в диапазоне от 0 до 5 В.
7.3.2. Системы 68hc12 используемые в проекте
Для реализации проекта мы должны будем использовать следующие модули в составе МК 68HC12, внешние устройства и программы управления:
• Модуль ATD в составе МК 68HC12;
• Символьный ЖК индикатор;
• Интерфейс преобразователя диапазона входного сигнала;
• Алгоритм преобразования измеряемого напряжения в ASCII код для отображения на ЖК индикаторе.
Прежде чем разрабатывать программное обеспечение, рассмотрим некоторые аппаратные решения.