Atmega16m1 8-битные микроконтроллеры avr со встроенной внутрисистемно-программируемой flash-памятью объемом 16 кбайт

Подключение AVR микроконтроллера к программатору

Выше было рассказано что для подключения микроконтроллера к программатору нужно соединить выводы ISP: VCC, GND, MISO, MOSI, SCK, RST. Выводы с данными названиями присутствуют у всех микроконтроллеров, так что даташит нам в помощь.

Рис. 2. Распиновка микроконтроллера ATmega8 и подключение его к ISP (USB ASP).

У программатора USB ASP на коннекторе ISP предусмотрено напряжение +5В (VCC), так что для программирования чипа можно воспользоваться питанием от программатора, а вернее от USB порта к которому он подключен.

В рассмотреных раньше программаторах, что используют COM и LPT порты, нет вывода VCC, а это значит что с использованием этих программаторов на выводы GND (-) и VCC (+) микроконтроллера нужно подать напряжение питания 5В от внешнего источника.

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

Рис. 3. Подключение к ISP коннектору программатора USB ASP на беспаечной макетной панели.

Рис. 4. Программатор USBASP подключен к микроконтроллеру ATmega8 (увеличение рисунка по клику).

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

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

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги…
Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно. В…

Даташиты на микроконтроллеры AVR ATMega, ATTiny и AT90…
Любому разработчику нужно знать специфику компонента, особенно если этот компонент -…

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

Програмирование в AVR Studio 5 с самого начала. Часть 2…
Пишем первую программу!Большинство начинают с мигания светодиодов, и мы не исключение. Если…

Несколько функций для програмной реализации протокола I2C на AVR…
Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы по протоколу…

Программная реализация протокола I2C на AVR в CodeVisionAVR…
Пару лет назад, изучая Atmega8, я захотел программно реализовать работу с устройствами на шине i2c,…

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

Программная реализация протокола SPI на AVR в CodeVisionAVR…
Всем коллегам и согражданам привет! Увлёкся я изучением протоколов. Про реализацию протокола I2C у…

Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL, Евстифеев А.В….
Издательство: Додэка XXI , 560 стр. 2005 г. Книга посвящена вопросам практического применения…

Програмирование в AVR Studio 5 с самого начала. Часть 8…
Перейдем к изучению встроенных таймеров. Изучение прерываний и особенно таймеров в…

Програмирование в AVR Studio 5 с самого начала. Часть 5…
Для того чтобы писать более сложные программы, нужно хорошо представлять структуру и взаимодействие…

Немного про шину 1-Wire и цифровой термометр DS18b20…
Здравствуйте, друзья. Хочу предложить вашему вниманию несколько простых функций для работы с шиной…

Работа схемы

Схема для передающей стороны приведена на следующем рисунке.

В схеме необходимо сделать следующие соединения:

  • Pin D7 of atmega8 -> Pin13 HT12E.
  • Pin D6 of atmega8 -> Pin12 HT12E.
  • Pin D5 of atmega8 -> Pin11 HT12E.
  • Pin D4 of atmega8 -> Pin10 HT12E.
  • Кнопка to Pin B0 of Atmega.
  • Резистор 1 МОм между pin15 и 16 of HT12E.
  • Pin17 of HT12E к контакту данных передающего модуля.
  • Pin 18 of HT12E to 5V.
  • GND pin 1-9 and Pin 14 of HT12E and Pin 8 of Atmega.

Схема для приемной стороны приведена на следующем рисунке.

В схеме необходимо сделать следующие соединения:

  • Pin D7 of atmega8 -> Pin13 HT12D.
  • Pin D6 of atmega8 -> Pin12 HT12D.
  • Pin D5 of atmega8 -> Pin11 HT12D.
  • Pin D4 of atmega8 -> Pin10 HT12d.
  • LED to Pin B0 of Atmega.
  • Pin14 of HT12D к контакту данных приемного модуля.
  • Резистор 47 кОм между pin15 и 16 of HT12D.
  • GND pin 1-9 of HT12D and Pin 8 of Atmega.
  • Светодиод к pin 17 of HT12D.
  • 5V to pin 7 of Atmega and pin 18 of HT12D.

Общий вид конструкции приведен на следующем рисунке:

Схема сброса микроконтроллера

После того как схема вклчючена, изначально конденсатор C12 разряжен и напряжение на RST почти равно нулю и в результате микроконтроллер не запускается. Получается что ему после запуска схемы постоянный сброс. С течением времени происходит заряд конденсатора через резистор, после того как он заряжится на выводе RST появится логическая единица МК запустится. Ну а скнопкой всю понятно она разряжает конденсатор и происходит перезапуск микроконтроллера.

 Задержку перед стартом МК легко посчитать по формуле как T=R*C при данных значения получается приблизительно одна секунда. Для чего эта задержка? — спросите вы. А для того чтобы МК не запускался раньше времени чем все устройства на плате запитаются в перейдут в установившийся режим работы. К примеру, в старых МК (AT89C51) если нет такой цепочки которая делает изначальный сброс, то МК мог вообще не запуститься.

В МК AVR такую задержку перед стартом можно сделать программно чтобы он подожда секунду и потом только запускался. Поэтому можно обойтись и без конденсатора. А кнопку можно оставить — на свое усмотрение. 

Подключение двух светодиодов по схема PORT-PORT

В это схеме ничего сложного нет — меняя состояние выводов то в 1 то в 0 мы меняем напрявление тока включает то идин то другой диод. Для того чтобы погасить оба светодиода то нам нужно подать сразу на оба вывода либо высокое состояние 11 либо низкое это 00. Для того чтобы зажечь сразу два светодиода нам нужно сделать динамическую индикацию, быстро меняя состония обеих ножек с высокого на низкий. Если взять 3 вывода и использовать тот же принцип смены состояния ножек то можно подключить шесть светодиодов.

В данной схеме кнопки опрашиваются поочередно. Один вывод подтягивает внутренее сопротивление а другая дает 0. Нажатие кнопки дает 0 на подтянутом выводе а это фиксирует программа, таким образом,меняя роли выводов опрашивается каждая кнопка. Если у нас используется 6 выводов, то действуем по следующей схеме: одну ножку подтягиваем, другую делаем нулем а из третьей делаем состояние Hi-Z. Но тут тоже есть один минус. Допустим мы хотим опросить кнопку «В». Для этого верхнюю линию подтягиваем, среднюю делаем нулем, а нижнюю не задействуем в процессе или выставляем ее в стостоянии Hi-Z. Далее если мы нажмем на копку «B» то верхняя линия подтянится к нулю и программа поймет что нажата именно кнопка «B». В том случае если одновременно будут нажаты кнопки «E» и кнопка «Б» то верхняя линия такжн подтяница к 0 и программа поймет что была нажата кнопка «В», хотя мы ее не нажимали. 

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

Документация по языку Си и AVR Си

Герберт Шилдт — Полный справочник по C: gerbert-shildt-c-complete-guide.zip (912Кб, HTML).

Это оцифрованные электронные версии книг с очень удобной навигацией, которые были найдены в сети. Все права на содержимое этих книг принадлежат их авторам.

По возможности купите себе хороший и свежий справочник по Си в бумажном виде для удобного обучения и работы.

Библиотека Си для AVR микроконтроллеров (AVR C Runtime Library) — https://savannah.nongnu.org/projects/avr-libc/

По приведенной выше ссылке можно почитать документацию (на английском языке) прямо на сайте или же скачать ее одним файлом в форматах HTML и PDF, там есть вся необходимая информация по использованию библиотеки avr-libc для программирования AVR микроконтроллеров.

Программирование ШИМ сигнала в микроконтроллере ATmega16 на языке С (Си)

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

Начать программирование ШИМ ATmega16 необходимо с установки нужного значения регистра Таймера 2 – его биты приведены на следующем рисунке. Изменяя данные биты, мы можем настраивать нужные нам параметры ШИМ.

В регистре Таймера 2 три группы битов:

  1. FOC2 (Force Output Compare for Timer2) – устанавливается когда WGM биты определяют не режим ШИМ.
  2. WGM2(Wave Generation Mode for Timer2 – режим генерации волны) – эти биты контролируют последовательность счета, максимальное значение счета (TOP counter value) и какой тип формы сигналов будет использован.
  3. COM2 (Compare Output Mode for Timer2 – режим сравнения для Таймера 2) – можно выбрать режим с инвертированием и без инвертирования.

Установим биты WGM20 и WGM21 чтобы активировать режим быстрой ШИМ.

Для полной информации относительно возможных режимов ШИМ, устанавливаемых битами WGM20 и WGM21, посмотрите официальный даташит на ATmega16.

Поскольку мы не будем использовать предделитель, запишем в необходимые биты ‘001’:

Настройки режима сравнения (Compare Output Mode) для режима быстрой ШИМ приведены в следующей таблице.

COM21 COM20 Описание
Normal port operation, OC2 disconnected
1 Зарезервировано
1 Clear OC2 on Compare match, Set OC2 at TOP
1 1 Set OC2 on compare match, clear OC2 at TOP

Увеличиваем коэффициент заполнения ШИМ от 0 до 100% — таким образом яркость свечения светодиода будет изменяться с течением времени. Будем использовать значения в диапазоне 0-255, которые будем передавать в OCR2 – это как раз тот байт, который отвечает за установку того самого значения, которое задает различные продолжительности включения (отношение длительности импульса к периоду повторения) импульсов ШИМ.

Аналогичным образом уменьшаем коэффициент заполнения со 100% до 0% чтобы постепенно уменьшать яркость свечения светодиода.

Описание архитектуры

Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединённых в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны:

  • Некоторые команды работают только с регистрами r16…r31. К ним относятся команды, работающие с непосредственным операндом: ANDI/CBR, ORI/SBR, CPI, LDI, LDS (16-бит), STS (16-бит), SUBI, SBCI, а также SER и MULS;
  • Команды, увеличивающие и уменьшающие 16-битное значение (в тех моделях, где они доступны) с непосредственным операндом (ADIW, SBIW), работают только с одной из пар r25:r24, r27:r26 (X), r29:r28 (Y), или r31:r30 (Z);
  • Команда копирования пары регистров (в тех моделях, где доступна) работает только с соседними регистрами, начинающимися с нечётного (r1:r0, r3:r2, …, r31:r30);
  • Результат умножения (в тех моделях, в которых есть модуль умножения) всегда помещается в r1:r0. Также только эта пара используется в качестве операндов для команды самопрограммирования (где доступна);
  • Некоторые варианты команд умножения принимают в качестве аргументов только регистры из диапазона r16…r23 (FMUL, FMULS, FMULSU, MULSU).

Семейства микроконтроллеров

Стандартные семейства:

  • tinyAVR (ATtinyxxx):
    • Флеш-память до 16 Кб; SRAM до 512 б; EEPROM до 512 б;
    • Число линий ввода-вывода 4-18 (общее количество выводов 6-32);
    • Ограниченный набор периферийных устройств.
  • megaAVR (ATmegaxxx):
    • Флеш-память до 256 Кб; SRAM до 16 Кб; EEPROM до 4 Кб;
    • Число линий ввода-вывода 23-86 (общее количество выводов 28-100);
    • Аппаратный умножитель;
    • Расширенная система команд и периферийных устройств.
  • XMEGA AVR (ATxmegaxxx):
    • Флеш-память до 384 Кб; SRAM до 32 Кб; EEPROM до 4 Кб;
    • Четырёхканальный DMA-контроллер;
    • Инновационная система обработки событий.

Как правило, цифры после префикса обозначают объём встроенной flash-памяти (в КБ) и модификацию контроллера. А именно — максимальная степень двойки, следующая за префиксом, обозначает объём памяти, а оставшиеся цифры определяют модификацию (напр., ATmega128 — объём памяти 128 КБ; ATmega168 — объём памяти 16 КБ, модификация 8; ATtiny44 и ATtiny45 — память 4 КБ, модификации 4 и 5 соответственно).[источник не указан 2906 дней]

На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные задачи:

  • со встроенными интерфейсами USB, CAN, контроллером LCD;
  • со встроенным радиоприёмопередатчиком — серии ATAxxxx, ATAMxxx;
  • для управления электродвигателями — серия AT90PWMxxxx;
  • для автомобильной электроники;
  • для осветительной техники.

Кроме указанных выше семейств, ATMEL выпускает 32-разрядные микроконтроллеры семейства AVR32, которое включает в себя подсемейства AT32UC3 (тактовая частота до 66 МГц) и AT32AP7000 (тактовая частота до 150 МГц).

Версии контроллеров

AT (mega/tiny)xxx — базовая версия.
ATxxxL — версии контроллеров, работающих на пониженном (Low) напряжении питания (2,7 В).
ATxxxV — версии контроллеров, работающих на низком напряжении питания (1,8 В).
ATxxxP — малопотребляющие версии (до 100 нА в режиме Power-down), применена технология picoPower (анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.
ATxxxA — уменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями). Микроконтроллеры «А» и «не-А» обычно имеют одинаковую сигнатуру, что вызывает некоторые трудности, так как Fuse-bit’ы отличаются.

Номер модели дополняется индексом, указывающим вариант исполнения. Цифры (8,10,16,20) перед индексом означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания).

Первая буква индекса означает вариант корпуса:

АТxxx-P — корпус DIP
АТxxx-A — корпус TQFP
АТxxx-J — корпус PLCC
АТxxx-M — корпус MLF
АТxxx-MA — корпус UDFN/USON
АТxxx-C — корпус CBGA
АТxxx-CK — корпус LGA
АТxxx-S — корпус EIAJ SOIC
АТxxx-SS — узкий корпус JEDEC SOIC
АТxxx-T — корпус TSOP
АТxxx-TS — корпус (ATtiny4/5/9/10)
АТxxx-X — корпус TSSOP

Следующая буква означает температурный диапазон и особенности изготовления:

АТxxx-xC — коммерческий температурный диапазон (0 °C — 70 °C)
АТxxx-xA — температурный диапазон −20 °C — +85 °C, с использованием бессвинцового припоя
АТxxx-xI — индустриальный температурный диапазон (-40 °C — +85 °C)
АТxxx-xU — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припоя
АТxxx-xH — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAu
АТxxx-xN — расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припоя
АТxxx-xF — расширенный температурный диапазон (-40 °C — +125 °C)
АТxxx-xZ — автомобильный температурный диапазон (-40 °C — +125 °C)
АТxxx-xD — расширенный автомобильный температурный диапазон (-40 °C — +150 °C)

последняя буква R означает упаковку в ленты (Tape & Reel) для автоматизированных систем сборки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector