Ошибка базы данных WordPress: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

Создаем «бегущие огни» на микроконтроллере Atmega8 с помощью CodeVisionAVR. Урок для начинающих — Меандр — занимательная электроника
Site icon Меандр — занимательная электроника

Создаем «бегущие огни» на микроконтроллере Atmega8 с помощью CodeVisionAVR. Урок для начинающих

Автор: Сергей КИРИЧИК

В современной электронной технике все чаще встречаются микроконтроллеры. Использование таких микросхем значительно упрощает схемотехнику приборов и позволяет легко изменять функциональные возможности путем изменения программы работы микроконтроллера. Они применяются в системах управления двигателями, бытовой технике, медицинских приборах, электроинструментах, игрушках и т.п.

Микроконтроллер – это целая микропроцессорная система в одной микросхеме (на одном кристале). Одна микросхема содержит в себе процессор, память, порты ввода/вывода и некоторые дополнительные устройства: таймеры, устройства прерывания, компараторы и др.

По отношению к естественному, человеческому, различают такие уровни языков программирования микроконтроллеров:

— низкий уровень — машинные языки;

— языки Ассемблера — близки к машинному;

— языки высокого уровня — приближены к человеческому.

Пользование машинным языком, единственно понятным микроконтроллеру, вызывает трудности, связанные с необходимостью записи громоздких, трудно запоминаемых двоичных кодовых комбинаций, со сложностью поиска ошибок в составленой программе, представляющую собой последовательность цифровых кодов, с трудностью внесения изменений в составляющую программу.

Наряду с указанными недостатками язык кодовых комбинаций имеет и достоинства. Программа на этом языке оказывается наиболее эффективной, она занимает минимальный объем памяти и быстрее исполняется.

Трудности программирования уменьшаются при использовании языка Ассемблера. В этом языке вместо кодовых комбинаций применяется мнемоническая форма записи операций (мнемоники), выполняемых в микропроцессоре. Такой мнемонической записью ( в виде сочетания букв, взятых из соответствующих английских слов: MOV — перемещение, ADD — сложение, SUBB — вычитание) представляют вид выполняемой операции, операнды и адреса. Каждой команде на языке Ассемблера соответсвует команда на языке кодовых комбинаций.

Язык Ассемблера упрощает запись команд, облегчает поиск в ней ошибок, обеспечивает лучший обзор программы и простоту внесения исправлений в программу.

Перед исполнением программа должна быть переведена с языка Ассемблера на язык кодовых комбинаций и в таком виде помещена в память микропроцессорной системы. Этот перевод осуществляется на компьютере с помощью программы трансляции, называемой Ассемблером.

Язык Ассемблера (так же, как и язык кодовых комбинаций) индивидуален для каждого типа микропроцессора и микроконтроллера.

Языки высокого уровня близки к обычному математическому языку, описывающему процес решения задачи, поэтому они легко усваиваются. Кроме того, они обеспечивают большую компактность программы (сложные вычислительные процессы представляются короткими записями), что улучшает обзор программы и выявление в ней ошибок.

Для программирования в машинных кодах и кодах Ассемблера необходимо знать архитектуру процессора (микроконтроллера), набор команд, владеть хотя бы основами программирования, т. е. быть «специалистом». Для написания программ на языке высокого уровня достаточно знать основы программирования. Поэтому языки Ассемблера среди радиолюбителей занимающимися микроконтроллерами, постепенно вытесняются языками высокого уровня: например Ассемблер заменяется языком Си.

Рассмотрим, как можно быстро написать программу с помощью языка Си для работы микроконтроллера на примере бегущих огней (подачи сигнала на определенных выводах микроконтроллера на определенное время).

Для опыта возьмем, широко распространенный  микроконтроллер  Atmega8 (Рис. 1.) из семейства восьмибитных микроконтроллеров AVR, фирмы Atmel.

Рис.1. Внешний вид микроконтроллера Atmega8 в корпусе PDIP

Отличительные особенности Atmega8 :

Блок-схема:

 

Рис.2. Блок-схема микроконтроллера Atmega8

Расположение выводов Atmega8:

Рис.3. Расположение выводов микроконтроллера Atmega8 в корпусе DIP

Рис.4. Расположение выводов микроконтроллера Atmega8 в корпусе MLF

Рис.5. Расположение выводов микроконтроллера Atmega8 в корпусе TQFP

Для начала установим программу CodeVisionAVR,  которая представляет собой простую в использовании интегрированную среду разработки программного обеспечения для микроконтроллеров семейства Atmel AVR. Она обеспечивает расширенную поддержку устройств AVR и создает компактный и эффективный код.

Также для этого удобно использовать  программу-симулятор микроконтроллерных устройств — Proteus VSM

Сначала в Proteus рисуем схему (Рис.6.). Ее делаем максимально простой, не нагружая дополнительными элементами. Хотя потом, для подавления помех, тактирования от внешних источников, и т.п.  надо будет немного изменить. Сейчас главное разобраться с возможностью выдавать сигнал на выводах микроконтроллера. Все задействованные порты у нас — выходы. Кроме VCC (+) и GND (-), к ним подаем питание.

Рис.6. Схема в Proteus

Затем запускаем CodeVisionAVR, выбираем — Создать новый проект (Рис.7.)

Рис.7.

Выбираем — Project:

Рис.8.

Потом — Yes

Рис.9.

Далее так:

Рис.10.

Выбираем наш микроконтроллер, частоту не меняем:

Рис. 11.

Все порты B,C,D делаем выходами (Out):

Рис. 12.

Сохраняем в отведенную для нашего проекта специальную папку в трех разных расширениях проекта, кликая по соответствующей кнопке (Рис.13.):

Рис.13.

У нас появляется поле для ввода текста программы, с множеством  лишней информации (Рис.14). Мжно все выделить и удалить. Напишем все свое, заново.

Рис.14.

В первых строчках прописываем какой микроконтроллер используется, и команды в программе (у нас задействована только команда для задержки времени — delay).

Затем пишем что порты у нас Выходы. Значит команд на их не будет поступать, это означает:

PORTB=0x00;
DDRB=0xFF;

PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0xFF;

См. Рис. 15.:

Рис.15.

Далее можно фантазировать))) На Рис.16. показана команда одного такта. То есть  сначала у нас только на PORTB.6 есть сигнал, как видно из схемы это первый с лева светодиод. Там логическая единица. На всех остальных — нули.

Рис.16.

Далее добавляем на следующий такт к порту PORTB.7 еденицу (Рис.17.) По картинке заметно что  во втором такте у нас уже светится 2 крайних левых светодиода. Далее с каждым тактом добавляем еще по единице на порт. Таким образом у нас загорится последовательно вся светодиодная линейка.

Рис. 17.

Когда пропишем единицы до последнего задействованного порта — компилируем. Нажимая соответственные клавиши (см. Рис. 18). Тогда мы не только сохраняем в нашей папки файлы проекта. но и можно там найти файл с расширением — .hex (в папке Exe). Именно этот файл и заливаем в микроконтроллер через программатор. Для начала можно эту прошивку проверить в Proteus.

Рис.18.

Понятно, что используя такой алгоритм можно создавать разные световые эффекты, на любых других  микроконтроллерах.

Дополнительные файлы:

[hidepost] Архив к проекту [/hidepost]

Спасибо за внимание, экспериментируйте!

Дальше будет…

Exit mobile version