
- •1.Программирование типовых функций управления: опрос двоичного датчика, ожидание события, дребезг, формирование временной задержки, вывод управляющих сигналов
- •Борьба с дребезгом контактов
- •2. Формирование временных задержек с помощью таймеров
- •3.Виды клавиатур
- •Кодирующие клавиатуры.
- •Табличный метод.
- •Метод сдвигов унитарного кода.
- •4.Подключение светодиодов и светод. Семисегментных индикаторов
- •5. Статический метод управления линейным дисплеем.
- •1. С использованием дешифраторов семисегментного кода.
- •2. С использованием программной перекодировки:
- •6. ДинамичесКий метод управления линейным дисплеем.
- •7. Виды ацп, схемы подключения и программы опроса ацп
- •Интерфейс быстрых ацп с мпс
- •Интерфейс медленных ацп с мпс
- •8) Микроконтроллеры pic18: общая характеристика, особенности архитектуры и системы команд.
- •9. Язык с18 для pic-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
- •10. Представление информации в языке Си
- •11. Операции и выражения в Си
- •12.Операторы управления вычислительным процессом
- •13. Функции в языке с18: определение функции, прототип, библиотечные функции.
- •14. Функции формирования временных задержек в языке с18
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •2.2. Библиотека функций управления жк-дисплеем
- •17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
- •19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
- •24) Интегрированная среда CodeVisionAvr: состав и назначение, структура программы на языке Си в cvavr, управление портами и отдельными битами.
- •25) Программирование в CodeVisionAvr типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя, реализация временных задержек.
- •26. Интерфейс can: общее описание и основные параметры, виды и форматы сообщений в can.
- •27. Интерфейс can: арбитраж, обнаружение и обработка ошибок, скорость передачи и длина сети.
- •28. Понятия: микроконтроллерная система (мкс) и микроконтроллерное устройство (мку). Основные этапы разработки мкс.
- •29. Разработка и автономная отладка аппаратных и программных средств микроконтроллерных систем.
- •30. Методы и средства совместной отладки аппаратных и программных средств микроконтроллерных систем.
24) Интегрированная среда CodeVisionAvr: состав и назначение, структура программы на языке Си в cvavr, управление портами и отдельными битами.
CodeVisionAVR – это интегрированная среда разработки (IDE – Integrated Development Environment), включающая кросс-компилятор Си, автоматический генератор программ (CodeWizardAVR) и встроенный программатор. CodeVisionAVR (или для краткости CVAVR) предназначен для разработки программ микроконтроллеров семейства AVR фирмы Atmel.
CodeVisionAVR обеспечивает выполнение почти всех элементов языка Си, которые разрешены архитектурой микроконтроллеров AVR, с некоторыми добавленными элементами, которые реализуют преимущество специфики архитектуры AVR.
Запустить CVAVR можно нажатием на кнопку мыши, поместив курсор на ярлык CVAVR на рабочем столе компьютера. После запуска программы вы увидите на экране рабочий стол среды, который имеет следующие компоненты:
1) Главное текстовое меню.
2) Графическое меню.
3) Рабочая область, в которой размещаются открытые окна с файлами, диалогами или другой информацией.
4) Линейка состояния, отображающая текущую настройку системы.
Наберите текст программы с именем count.c в окне редактора. В качестве микроконтроллера выбран ATmega16 с четырьмя портами ввода/вывода, которые обозначаются: PORTA, PORTB, PORTC, PORTD. Программа будет просто увеличивать в бесконечном цикле число на 1 и выводить его в порт В.
count.c – программа вывода содержимого счетчика в порт В
#include<mega16.h> // заголовочный файл для МК ATmega16
unsigned char count; // переменная count – беззнаковое однобайтное
// целое число
void main(void)
{
DDRB = 0xFF; // настроить порт В на вывод
PORTB = 0; // вывести нули в порт В
count = 1;
while(1) // бесконечный цикл вывода в порт В
{
PORTB = count; // вывести значение count в порт В
count++; // инкремент содержимого count
}
Для выполнения программы выберите меню Debug. В раскрывшемся списке будут отображены виды команд, которые можно использовать при отладке. Для последовательного пошагового выполнения операторов программы удобно использовать команду Step Into или «горячую» клавишу F11. Щелкните по строке Step Into. Желтая стрелка в окне программы count.c переместится на следующий оператор, и будет выполнении оператор
DDRB = 0xFF;
25) Программирование в CodeVisionAvr типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя, реализация временных задержек.
Для облегчения разработчику написания программ устройств с микроконтроллерами семейства AVR в интегрированной среде CodeVisionAVR имеется специальное средство, называемое Автоматическим генератором программ - CodeWizardAVR.
CodeWizardAVR позволяет по заданию разработчика сгенерировать весь необходимый код для выполнения таких функций, как:
сброс и исходная идентификация микроконтроллера;
инициализация портов ввода/вывода;
инициализация внешних прерываний;
инициализация таймеров/счетчиков;
инициализация сторожевого таймера Watchdog;
инициализация UART (USART);
инициализация аналогового компаратора;
инициализация АЦП;
инициализация интерфейсов SPI, I2C, 1-Wire;
инициализация LCD- модуля.
При запуске Автоматического программного генератора на экране появится окно CodeWizardAVR с новым проектом, который по умолчанию будет назван untitled.cwp.
В верхней части окна находится строка меню, а под ней строка панели инструментов. Строка меню позволяет выбрать команды из различных меню.
В левой части окна CodeWizardAVR находится набор различных закладок. Закладки позволяют выбрать и задать соответствующие опции того или иного периферийного устройства. В соответствии с этими настройками CodeWizardAVR сгенерирует соответствующий код.
В правой части экрана располагается окно Program Preview (предварительного просмотра программы), которое позволяет просмотреть код, сгенерированный CodeWizardAVR.
3.1.3. В окне CodeWizardAVR на закладке Chip (Чип) выберите микроконтроллер ATmega16 и установите тактовую частоту 8,000000 МГц. Остальные настройки на этой закладке оставьте без изменения.
Далее перейдите на закладку Ports (Порты). На закладке Port B (Порт В) сконфигурируйте 1-й бит порта (Bit 1) как вход (In). Установите подтягивающий резистор на этом входе, что обозначается буквой P для этого бита. Остальные биты порта В оставьте без изменения, так как они не используются в данном примере.
На закладке Port D (Порт D) сконфигурируйте 1-й бит порта (Bit 1) как выход (Out). Установите на его выходе начальное значение 1. Это необходимо, чтобы после запуска программы на 1-й линии порта D был высокий уровень, поэтому диод VD1 светиться не будет. Остальные биты порта D можно оставить без изменения.
Остальные периферийные устройства в данном проекте не участвуют, поэтому оставьте их установленными по умолчанию.
3.1.4. Теперь все готово для генерации кода. С этой целью выберите пункт меню Program. В раскрывшемся списке уберите «галочку» со строки “Generate Code for Disabled Peripherals” (Генерировать код для неиспользованной периферии). Это сделает программу более компактной и удобной для анализа. Затем выберите из списка команду Generate, Save and Exit (Генерировать, сохранить и выйти) и щелкните мышью.
После выбора этой команды появится окно Save C Compiler Source File (сохранить исходный файл компилятора Си), в котором нужно будет выбрать папку для сохранения проекта. С этой целью выберите папку AVR и раскройте ее. Затем щелкните в окне правой кнопкой мыши, из выпадающего списка выберите пункт меню Создать > Папку и щелкните левой кнопкой. Вместо текста «Новая папка» введите имя Led_sb (Светодиод_кнопка) папки, где будут храниться все файлы разрабатываемого проекта. Далее щелкните два раза левой кнопкой мыши, чтобы раскрыть новую папку Led_sb.
В поле Имя файла введите имя исходного файла с расширением .c, например, led_sb.c и щелкните по кнопке Сохранить.
Затем на экране появится окно Save C Compiler Project File (Сохранить файл проекта компилятора Си). В поле Имя файла введите имя файла проекта с расширением .prj (led_sb.prj) и щелкните по кнопке Сохранить.
И, наконец, на экране появится окно Save untitled.cwp As (Сохранить … Как). В поле Имя файла введите имя файла проекта CodeWizardAVR с расширением .cwp (led_sb.cwp) и щелкните по кнопке Сохранить.
После этого CodeWizardAVR откроет окно исходного файла со сгенерированным кодом.
3.1.5. Просмотрите весь текст кода в окне. Анализ текста показывает, что CodeWizardAVR сгенерировал своеобразную заготовку программы, в которой выполнено подключение заголовочного файла выбранного микроконтроллера, а периферийные устройства используемого микроконтроллера сконфигурированы в соответствии с настройками пользователя на соответствующих закладках в окне CodeWizardAVR.
CodeWizardAVR обильно снабжает сгенерированный код соответствующими комментариями, подробно описывая, как сконфигурировано то или иное периферийное устройство. Кроме того, CodeWizardAVR подсказывает разработчику, где следует поместить объявление глобальных и локальных переменных, код, который должен выполняться программой обработки прерывания, код основной программы и т. д.
В рассматриваемом примере МКУ требуется, чтобы при разомкнутом контакте кнопки SB1 диод VD1 не горел, а при замкнутом – горел. Диод будет гореть, если на 1-м выводе порта D будет низкий уровень (логический 0). Если на этом выводе будет высокий уровень (логическая 1), то диод не горит. При разомкнутом контакте кнопки SB1 на 1-м входе порта В будет высокий уровень (логическая 1), а при замкнутом – низкий уровень (логический 0). Поэтому можно для вывода в 1-й разряд порта D использовать сигнал на 1-м входе порта В, и записать это на языке Си следующим образом:
PORTD.1 = PINB.1;
Эту строку необходимо вставить в бесконечный цикл while(1), расположенный в конце программы, в то место, куда CodeWizardAVR указывает с помощью строки комментария “// Place your code here “ (Поместите свой код сюда).
3.1.6. Наберите в окне редактора строку требуемого кода в цикле while(1):
………………………….
while(1)
{
// Place your code here
PORTD.1 = PINB.1;
}
…………………………..