» » Анатомия микроконтроллеров ATmega

 
 
 

Анатомия микроконтроллеров ATmega

Разместил alx32 18 июля 2008. Просмотров: 86 735

5 Здравствуйте, датагорцы!

После публикации моей первой статьи, меня завалили вопросами о микроконтроллерах, как, что, куда, почему…

Чтобы вы смогли разобраться, как этот чёрный ящик работает, я расскажу вам, о микроконтроллере (далее МК) ATmega8. В принципе фирма Atmel выпускает целую серию МК семейства AVR – это подсемейства Tiny и Mega. Я не буду расписывать достоинства тех или иных МК, это уж вам решать, что вам больше всего подходит.
Некоторые представители большой семьи:



Итак, ATmega8, самый простой МК из всех ATmega:



Начнем изучать внутренности по упрощенной структурной схеме:



Это обобщённая схема всех ATmega.

Все микроконтроллеры AVR построены по так называемой Гарвардской архитектуре, то есть использована раздельная адресация памяти программ и памяти данных. Преимущества этой архитектуры заключаются в повышенном быстродействии, например ATmega выполняет одну инструкцию за один тактовый импульс, то есть при частоте 16МГц МК выполняет 16 миллионов операций в секунду.

А теперь о требухе по порядку.
1. Тактовый генератор выполняет синхронизацию всех внутренних устройств.
2. ПЗУ – постоянное запоминающее устройство, используется для хранения программы и неизменяемых данных (констант).
3. Дешифратор команд – он тут самый главный, управляет всем, что ему под руку попадётся.
4. АЛУ – арифметико-логическое устройство, выполняет арифметические (сложение, вычитание и т.д.) и логические (И, ИЛИ, НЕ, Исключающее ИЛИ) операции над числами.
5. РОН – регистры общего назначения, ими АЛУ оперирует, а так же используются для временного хранения данных. Регистры РОН могут объединяться в регистровые пары:
r26 : r27 – X;
r28 : r29 – Y;
r30 : r31 – Z.

Регистровые пары используются для косвенной адресации данных в ОЗУ.
6. ОЗУ – оперативное запоминающее устройство, используется для хранения данных, массивов и стека.
7. PORTA-PORTn – связь с внешним миром, порты ввода/вывода, ну енто понятно для чего…
8. Спец. УВВ – специальные устройства ввода/вывода, контроллеры разной периферии, например USART (по другому СОМ-порт), иногда USB, АЦП, ЦАП, I2C, короче, чего только там нет…

Ну да это всё теория, а вам не терпится что-то склеить, попробовать, и чтобы енто дело работало! Тогда перечислим что нам нужно:

1. Программатор с соответствующим софтом, об этом я писал в прошлой статье;
2. Компилятор языка Си, Code Vision AVR, имеет неплохой инструментарий для разработки программ для МК;

Перед тем как начать программирование на Си, неплохо бы ознакомиться с какой-нибудь литературой по этому языку, например есть замечательная книга Кернигана и Ритчи «Язык С».

Ну да ладно, начнём…

Тестовая схема.

Давайте соберём такую схему:



Это будет базовая модель. Кстати схему лучше собрать на макетной плате, а МК сунуть в панельку. Но такая схема бессмысленна. Добавим, например, светодиод, и не забудем про токоограничивающий резистор. Подключим его к нулевому выводу порта В.
Схема будет иметь следующий вид:



Включим питание… НОЛЬ!!! А что вы хотели без программы?
Значит…

Пишем программу!



Итак, вы запустили CVAVR, что нужно сделать первым делом? Запускаем мастер Code Wizard AVR, нажав на кнопочку с шестерёнкой в панели инструментов, появится окно мастера:



Здесь выбираем тип МК и тактовую частоту. Далее переходим на вкладку Ports:



И настраиваем, какой бит какого порта у нас будет настроен на ввод или вывод, порт В бит 0 у нас будет выдавать сигнал, а остальные принимать.
Чтобы сохранить настройки выбираем меню File / Generate Save and Exit, вводим имена файлов на все последующие запросы, желательно чтобы они были одинаковые, ну например «prj». Всё, мы сгенерировали исходный текст программы с установками заданными в мастере.



Давайте посмотрим что у нас вышло. Первые 22 строки это комментарий, то есть на действия программы он не имеет никакого влияния, таким образом, всё, что находится между «/*» и «*/» является комментарием, и компилятор всё это дело игнорирует. В 24 сроке у нас подключается заголовочный файл, в нём описано как какие регистры называются и по какому адресу находятся. Для программирования на Си подробности здесь излишни.
С 28 строки у нас начинается основная программа определением функции main(),

Прокрутим ниже. Обратите внимание на строки 36 и 37, здесь присваивается значение порту В и выбирается направление передачи. Вообще наглядно это выглядит так:



То есть, если в какой-нибудь бит регистра DDRB записать единичку, то соответствующий бит порта В будет работать на вывод. В нашем случае это бит 0.
Кстати, у портов в ATmega есть одна приятная особенность, даже если порт настроен на ввод, а в регистр PORTx записать единички, то подключатся внутренние подтягивающие резисторы к плюсу питания, что исключает использование внешних навесных резисторов. Это удобно при подключении всяких датчиков и кнопок.

Скомпилируем программу, для этого нажмём кнопочку Make the Project, или через меню Project / Make. Ошибок быть не должно, если вы что-нибудь не подправили.



Откроем папку C:\cvavr\bin\, найдём там файл prj.hex. Это и есть скомпилированная нами программа для МК. Подключим программатор к ПК и МК. Запустим программу Pony Prog и перетащим в её окно файл prj.hex. Включите питание МК и залейте в него нашу программу… Опять ничего? А проблема в том что мы ничего на нулевой разряд порта В не вывели, вернее вывели, только это ноль. А чтобы наш светодиод загорелся, надо вывести единицу. Так и сделаем, заменим в 36 строке «PORTB=0x00;» на «PORTB=0x01;». Скомпилируем заново программу. А в программе Pony Prog перезагрузим файл при помощи сочетания клавиш Ctrl+L или меню File / Reload Files. Сотрём МК и снова зальём «прошивку» в него. УРА!!! ОНО РАБОТАЕТ!!!

Кстати, Pony Prog поддерживает скрипты, и чтобы не мучаться с перезагрузкой, стиранием и записью, можно просто написать скрипт с расширением .e2s, и обозвать его, например, prog.e2s. Сделать это можно с помощью блокнота. Содержимое у него будет такое:

SELECTDEVICE ATMEGA8
CLEARBUFFER
LOAD-ALL prj.hex
ERASE-ALL
WRITE-ALL

Поместить скрипт следует в одну папку с .hex-файлом, и запускать его двойным щелчком мыши. Можно поместить ярлык на рабочий стол, это уж кому как удобно…

Продолжение следует…
Александр (alx32)
Ульяновск
Профиль alx32
Я простой электрик
 

Понравилось? Палец вверх!

  • всего лайков: 46

Поделись с друзьями!

Связанные материалы:


Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно....

Микроконтроллер ATmega 8 управляет шаговым двигателем

Подключение шагового двигателя к микроконтроллеру ATmega 8 Недавно пришлось подключать шаговый...

Даташиты на микроконтроллеры AVR ATMega, ATTiny и AT90

Любому разработчику нужно знать специфику компонента, особенно если этот компонент -...

Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL, Евстифеев А.В.

Издательство: Додэка XXI [М.], 560 стр. 2005 г. Книга посвящена вопросам практического применения...

PIC микроконтроллеры. Все, что вам необходимо знать. Сид Катцен

PIC микроконтроллеры. Все, что вам необходимо знать. Сид Катцен пер. с англ. Евстифеева А. В. — М.:...

Анатомия микроконтроллеров ATmega - 3. Прерывания.

Итак, наши светодиоды мигают, но мы не можем никак повлиять на программу, давайте добавим в схему...

Анатомия микроконтроллеров ATmega - 2

Итак, продолжим издевательство над МК. Что же нам ещё такого сделать? Давайте заставим мигать...

Микроконтроллеры AVR в радиолюбительской практике. А. В. Белов

А. В. Белов Микроконтроллеры AVR в радиолюбительской практике Данная книга представляет собой...

Программирование микроконтроллеров ATmega

Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится...

TDA7442D+ATmega8. Микропроцессорный регулятор громкости

Привет ВСЕМ!!! Интересно, кому бы не хотелось, чтобы его усь обладал сервисом промышленных...

Микроконтроллеры AVR семейства Classic фирмы ATMEL. Евстифеев А. В.

Книга представляет собой справочное издание по применению микроконтроллеров AVR семейства Classic...

Радиолюбительские конструкции на PIC микроконтроллерах, Кн.3, Н.И. Заец

Радиолюбительские конструкции на PIC микроконтроллерах, Кн.3 Автор: Н.И. Заец Третья книга...
<
  • Главный редактор
18 июля 2008 03:16

Игорь Петрович Котов / Datagor

  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 604 комментария
  • 257 публикаций
 
  • 0
Александр, РЕСПЕКТИЩЩЕ!
bully

<
  • Гражданин
18 июля 2008 11:17

Александр / alx32

  • С нами с 26.06.2008
  • Ушёл в реал Пользователь offline
  • 35 комментариев
  • 8 публикаций
 
  • 0
Ой, спасибочки... feel

<
  • Прохожий
7 ноября 2008 15:36

/ extress

  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
А это язык бейсик вроде да?

<
  • Главный редактор
7 ноября 2008 15:39

Игорь Петрович Котов / Datagor

  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 604 комментария
  • 257 публикаций
 
  • 0
Нет, брат. Это язык, на котором написан Basic.
Это C - "си".

<
  • Прохожий
21 декабря 2012 19:59

/ Петр

  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
А мне ближе Ассемблер!

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.