Практическая работа
Тема: Программирование микроконтроллеров: первые шаги
Оборудование
Hardware: микроконтроллер ATMega8, макетная плата, светодиоды, резисторы, монтажные провода, программатор USBASP.
Software: Proteus Isis, CodeVisionAVR, Khazama AVR, USBASP WinDriver.
Ход работы
1. Создание программного кода в CodeVisionAVR
Создаём проект без мастера. Открываем Project → Configure → C Compiler.
Выбираем наш chip ATMega8A, Clock: 8 MHz, остальное оставляем дефолтное.
Рис. 0 - Конфигурация проекта в CodeVisionAVR
Напишите в начале программы комментарий // Управление портом С
Подключаем заголовочные файлы директивой #include <io.h> (ввод/вывод) и <delay.h> (задержка).
Пишем главную функцию
void main(void)
{
DDRC=0b11111111; // Data Direction Registr - регистр-переключатель направления данных порта С.
К DDR подключены пины порта, он определяет их направление выдачи сигнала.
1 – пин настроен на вывод сигнала.
0 (по умолчанию) – на вход (считывание состояние).
0b – в двоичной системе.
Все единицы – значит, все пины порта настроены на вывод сигнала.
Выбор направления данных можно задать и 16-ричными цифрами, тогда получим равносильный оператор DDRC = 0xFF (вспомним тетрады: 1111(=F) 1111(=F)).
Итак, пишем инструкции в программе.
Для начала научимся подавать напряжение:
PORTC=0b00000001; // подаём на нулевой (младший) пин логическую единицу (5 В), а на остальных оставляем логический 0.
Пока все, закрываем программу }
Компилируем программу (F9). Если всё хорошо, увидим диалог с информацией о программе, если нет – список ошибок.
Исправим ошибки и построим hex-файл прошивки (попутно создаются и отладочные файлы в других форматах, напр. cof - для отладки программ CVAVR).
Бинарный файл .hex (который исполняется МК) будет в папке \Debug\Exe, а .cof – в \Debug.
При наличии неясных моментов смотрите это видео.
2. Создание схемы в Proteus.Isis.
(Предполагается, что технология работы в программе с микроконтроллерами в Proteus Isis читателю уже знакома)
Схема для эксперимента приведена на рис.1.
Наш светодиод рассчитан примерно на силу тока примерно в 20 мА. При этом на светодиоде падает примерно 2 В. Остаётся: 5 В (напряжение VCC) – 2 = 3 В.
По закону Ома I = U/R. Тогда R= XОм.
Вычисленное значение R и вводим в качестве параметра Resistance свойств R1.
Рис. 1 - Принципиальная схема в Proteus
В свойствах МК ATMega8 изменяем только CKSEL Fuses – выставляем в 0100, что задаёт тактирование МК от внутреннего RC-генератора на частоте 8MHz, и указываем в качестве ProgramFile созданный в CodeVisionAVR .cof–файл (выбор .cof -файла вместо .hexпозволит вести отладку по исходному коду).
3. Создание реальной электрической схемы на беспаечной макетной плате.
Нам понадобятся макетная плата, МК ATMega8 (см. рис.2), два резистора, светодиод и 13 соединительных проводков (6 из них – под программатор, соответственно, если используем общий, то они будут подсоединены к нему).
Рис. 2 - Распиновка ATMega8
Выглядеть схема должна примерно, как на рис.3.
Рис. 3 - Электрическая схема на макетной плате типа MB-102
Если ваша макетная плата (например, SYB-120) конструктивно отличается от приведённой на рисунке, используйте одну внешнюю контактную линию под VCC, а вторую (логичнее нижнюю) – под GND. Подключать пины 20 и 22 (AVCC и GND) для ATMega8 особой надобности нет (в виду конструктивной ошибки данной серии МК).
Для первого резистора, который подсоединяется к входу МК Reset (подтягивающего к плюсу, Pull Up), сопротивление резистора возьмём в 1 КОм. Сопротивление второго вы рассчитали на предыдущем этапе. Если резистора рассчитанного номинала нет в наличии, можно взять чуть меньше, а лучше – чуть больше. При этом, возможно, придётся поставить несколько резисторов меньшего номинала последовательно.
Выбрать требуемый резистор по цветовой маркировке можно с помощью онлайн-калькулятора.
Резистор при определении его номинала нужно держать так, чтобы его внешняя серебряная или золотая линия была справа.
4. Прошивка микроконтроллера созданной программой
Теперь можно прошивать МК. Для этого нужен программатор. CVAVR поддерживает (т.е может сама и прошить - отравить файл на МК) разные, но не все. Для работы с нашим программатором USBASP запускаем программу Khazama AVR. Выбираем в выпадающих списках наш МК.
Убедимся, что программатор правильно подключён и МК доступен командой Command - Read Chip Signature. Должен появиться (возможно, после окна с ошибкой) диалог с сигнатурой МК.
Далее File → Load Flash File to Buffer - ищем наш hex-файл в проводнике и загружаем его сперва в буфер, и после этого командой Command → Write Flash Buffer to Chip заливаем прошивку в МК.
Рис. 4 - Khazama AVR Programmer - заливаем прошивку в ATMega8
5. Дальнейшие эксперименты
5.1. После того, как мы научились зажигать светодиод, сможем его и потушить.
Для этого в исходном коде добавьте команду задержки после включения
delay_ms(1000); // пауза в 1 сек.
После неё отключите светодиод сбросом в 0 младшего разряда порта С.
Проверьте в Протеусе и после этого – на реальной схеме.
5.2. Мигание светодиода можно организовать в бесконечном цикле
while (1)
{
}
Перенесите в него команды установки напряжения и задержки (конфигурирование направления данных оставьте перед циклом), добавьте задержку после гашения светодиода и проверьте результат сперва в Протеусе и после – на реальной схеме.
5.3. Добавьте в схему (на пин DC.1, что соответствует разряду 1 порта С) ещё один светодиод и помигайте ими поочерёдно (один – зажигается, другой – гаснет, через секунду – наоборот). Соответственно отредактируйте схему в Протеусе, проведите в нём эмуляцию, и после проведите физический эксперимент на макетной плате.
5.4. Добавьте в схему третий светодиод и создайте программу "Светофор" - мигания по схеме, близкой к реальному светофору (см. пример на рис. 5 и в приведённом ниже видео)
Рис. 5 - Электрическая
схема светофора (без некритично нужных соединений и элементов) на макетной плате
(c) herozero.do.am
Количество просмотров: 8332. Комментариев: 1 | |