Часто во многих конструкциях, использующих микроконтроллеры AVR, используется аналогово-цифровой преобразователь (АЦП) данных микроконтроллеров. Он используется везде где необходимо преобразовать какое-нибудь аналоговое значение в цифровое. Обычно это конструкции с датчиками температуры, датчиками наклона, датчиками тока, гибкими датчиками и т.п.
На нашем сайте мы уже рассматривали использование АЦП в микроконтроллерах AVR в следующих проектах:
- измерение температуры с помощью микроконтроллера AVR и сенсора LM35;
- цифровой вольтметр 0-25В на микроконтроллере AVR ATmega32;
- подключение джойстика к микроконтроллеру AVR ATmega8;
- амперметр на 100 мА на микроконтроллере AVR ATmega8;
- измерение интенсивности света с помощью фоторезистора и микроконтроллера AVR ATmega8.
Но в данной статье мы более подробно рассмотрим использование АЦП в микроконтроллере AVR ATmega16. В этом проекте мы будем подсоединять ко входу АЦП микроконтроллера небольшой потенциометр и будем использовать 8 светодиодов чтобы показывать изменение напряжения на выходе АЦП в зависимости от изменения сигнала на его входе.
Что такое АЦП (аналого-цифровой преобразователь)
В электронике под АЦП (в переводе с англ. от ADC — analog-to-digital converter) понимают устройство которое конвертирует аналоговый сигнал (например, ток или напряжение) в цифровой код (двоичную форму). В реальном мире большинство сигналов являются аналоговыми, но все микроконтроллеры и микропроцессоры способны понимать только двоичные (бинарные) сигналы – 0 или 1. То есть чтобы заставить микроконтроллер понимать аналоговые сигналы необходимо конвертировать их в цифровую форму – это и делает АЦП. Существуют различные типы АЦП, каждый тип удобен для конкретных приложений. Наиболее популярные типы АЦП используют такие типы аппроксимаций как приближенная, последовательная и дельта-аппроксимацию.
Самые дешевые АЦП – с последовательной аппроксимацией, их мы и будем рассматривать в данной статье. В данном случае для каждого фиксированного аналогового уровня последовательно формируется серия соответствующих им цифровых кодов. Внутренний счетчик используется для их сравнения с аналоговым сигналом после конверсии. Генерация цифровых кодов останавливается когда соответствующий им аналоговый уровень становится чуть-чуть больше чем аналоговый сигнал на входе АЦП. Этот цифровой код и будет представлять собой конвертированное значение аналогового сигнала.
Мы в данной статье будем использовать встроенный в микроконтроллер AVR ATmega16 аналого-цифровой преобразователь – практически все микроконтроллеры семейства AVR оснащаются встроенным АЦП. Но вместе с тем следует помнить о том, что существуют и другие типы микроконтроллеров, у которых нет собственных АЦП – в этом случае необходимо использовать внешний АЦП. Как правило, внешние АЦП сейчас выпускаются в виде одной микросхемы.
АЦП в микроконтроллере AVR ATmega16
Микроконтроллер ATmega16 имеет встроенный 10-битный 8-канальный АЦП. Разрядность 10 бит означает, что каждый входной аналоговый сигнал (для ATmega16 он должен быть в диапазоне 0-5В) представляется 1024 уровнями дискретного сигнала (2 в степени 10 = 1024), то есть дискретизируется с точностью Uвх/1024. 8-канальный означает что АЦП может быть задействован на 8 контактах микроконтроллера одновременно. Фактически весь PortA (GPIO33-GPIO40) может быть использован для операций АЦП. По умолчанию выводы PORTA являются контактами ввода/вывода общего назначения. Чтобы задействовать на них функции АЦП необходимо сконфигурировать специальные регистры, ответственные за функции аналого-цифрового преобразования в микроконтроллере. Поэтому их и называют регистрами АЦП. В данной статье мы разберем как правильно их конфигрурировать.
На следующем рисунке показано расположение контактов АЦП на корпусе микроконтроллера ATmega16
Необходимые компоненты
- Микроконтроллер ATmega16
- Источник питания с напряжением 5 Вольт
- Программатор AVR-ISP, USBASP или другой подобный
- Кварцевый генератор 16 МГц
- Конденсатор 100 нФ (2 шт.)
- Конденсатор 22 пФ (2 шт.)
- Кнопка
- Соединительные провода
- Макетная плата
- Светодиод (любого цвета)
Работа схемы
Схема устройства приведена на следующем рисунке.
Внешний вид макетной платы с собранной на ней схемой устройства будет выглядеть следующим образом.
Установка регистров АЦП в микроконтроллере ATmega16
Регистр ADMUX (регистр выбора и мультиплексирования канала АЦП) — предназначен для выбора канала АЦП и опорного напряжения (reference voltage). Структура данного регистра представлена на следующем рисунке.
Биты 0-4 используются для выбора канала.
MUX4 | MUX3 | MUX2 | MUX1 | MUX0 |
ADC Channel Selected |
ADC0 | |||||
1 | ADC1 | ||||
1 | ADC2 | ||||
1 | 1 | ADC3 | |||
1 | ADC4 | ||||
1 | 1 | ADC5 | |||
1 | 1 | ADC6 | |||
1 | 1 | 1 | ADC7 |
Бит 5 используется для коррекции результата преобразования вправо или влево.
ADLAR | Description |
Right adjust the result | |
1 | Left adjust the result |
Биты 6-7 используются для выбора опорного напряжения АЦП.
REFS1 | REFS0 | Voltage Reference Selection |
AREF, Internal Vref turned off | ||
1 | AREF, Internal Vref turned off | |
1 | Reserved | |
1 | 1 | Internal 2.56 Voltage Reference with external capacitor at AREF Pin |
Теперь попробуем правильно сконфигурировать данный регистр в программе.
Исходный код программы на языке С (Си) с пояснениями
Полный текст программы приведен ниже. В этом разделе статьи объяснено значение некоторых элементов программы.
Для начала определим функцию для чтения конвертированного в результате АЦП значения. В качестве аргумента в данной функции будет выступать номер канала, на котором необходимо будет производить АЦП.
unsigned int ADC_read(unsigned char chnl)
Поскольку у нас всего 8 каналов АЦП, то номер канала может принимать значение от 0 до 7.
chnl= chnl & 0b00000111;
Записав число ‘40’ (в двоичном виде ‘01000000’) в регистр ADMUX мы выберем канал ADC0 для аналого-цифрового преобразования.
ADMUX = 0x40;
На этом шаге мы начнем процесс аналого-цифрового преобразования, записав «1» в бит ADSC регистра ADCSRA. После этого необходимо подождать до тех пор пока бит ADIF не сигнализирует нам о том что процесс преобразования завершен. Мы закончим процесс АЦП записав ‘1’ в бит ADIF регистра ADCSRA. Когда преобразование закончено, возвратим значение АЦП.
ADCSRA|=(1<<ADSC);
while(!(ADCSRA & (1<<ADIF)));
ADCSRA|=(1<<adif>/p>
return (ADC);
Выберем опорное напряжение АЦП установив бит REFS0. После этого разрешим АЦП и установим коэффициент деления предделителя равным 128.
ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
Теперь сохраним значение АЦП и передадим его на PORTC. В результате этого 8 светодиодов, подключенных к PORTC, покажут получившееся в результате аналого-цифрового преобразования значение в 8-битном формате. В рассматриваемом примере мы показываем изменение напряжения от 0 до 5В, которое регулируется на входе АЦП микроконтроллера с помощью потенциометра.
i = ADC_read(0);PORTC = i;
Величину подаваемого напряжения можно контролировать с помощью вольтметра. В представленном примере мы используем для этого цифровой мультиметр.
Полный текст программы
#include <avr> unsignt ADC_read(unsigned char chnl){chnl= chnl & 0b00000111; // выбор канала АЦП от 0 до 7 ADMUX = 0x40; //выбран канал A0ADCSRA|=(1<while>} int md){PORTC = 0xFF; //конфигурируем PORTC на выход поскольку к нему подключены светодиодыADMUX=(1<adcsra>int i = 0; // оеляем переменную типа integer чтобы хранить в ней значение АЦП while (1) { i = ADC_read(0); // сохраняем рассчитанное значение АЦП в переменной i PORTC = i; // передаем значение АЦП на контакты portc }}</avr>
Видео, демонстрирующее работу схемы
977 просмотров</adif>
</p> 16.04.19 radist80 4 912 0 Популярная среда разработки Arduino IDE привлекает большим количеством готовых библиотек и интересных проектов, которые можно найти на просторах Сети.Некоторое время назад оказались в моем распоряжении несколько микроконтроллеров ATMEL ATMega163 и ATMega163L. Микросхемы были взяты из отслуживших свой срок девайсов. Данный контроллер очень похож на ATMega16, и фактически является его ранней версией.
Содержание / Contents
↑ Характеристики ATMega163
• Высокопроизводительные, мало потребляющие AVR 8- битные микроконтроллеры• 130 исполняемых команд, большинство за один машинный такт• 32 рабочих регистра общего назначения• Полностью статический режим работы• Производительность до 8 MIPS при 8 МГц• Встроенный 2-х тактовый умножитель• Энергонезависимая память программ и данных• Внутрисистемно самопрограммируемая FLASH память• 16К байт с количеством циклов перепрограммирования до10 000.• Опционно загрузочная область памяти (256б-2Кб) с независимыми ключевыми битами, внутрисистемное программирование встроенной загрузочной программой, без внешнего программатора• 512 байт EEPROM с допустимым количеством циклов стирания записи до 100 000.• 1024 байт внутренней SRAM• Программируемый ключ защиты программ• Периферийные функции два 8-битных таймера/счётчика с программируемым предделителем и режимом сравнения один 16-битный таймер/счётчик с программируемым предделителем, режимом сравнения и захвата счётчик реального времени с программируемым генератором три ШИМ генератора 8-и канальный, 10-и битный АЦП байт-ориентированный, двухпроводный интерфейс программируемый USART• Master/Slave SPI последовательный интерфейс• Программируемыи Watchdog таймер с программируемым генератором• Встроенный аналоговый компаратор• Специальные функции Reset по включению питания и выключение при снижении напряжения питания Внутренний калиброванный RC генератор• Внешние и внутренние источники прерывания Четыре экономичных режима: Idle, подавления шумов АЦП, экономичный, режим Выкл.• Потребляемый ток при 4 МГц, 3.0 В, 25°С Активный — 5.0 мА Idle — 1.9 мА Выкл. — 1мА• 32 программируемых вывода вход-выход• 40 выводной корпус PDIP и 44 выводной корпус TQFP• Напряжение питания: 2.7 В до 5.5 В для ATMega163L 4.5 В до 5.5 В для Atmega163• Тактовая частота: 0-4 МГц Atmega163L 0-8 МГц Atmega163Объем флеш-памяти и частота вдвое меньше, чем у ATMega328P, применяемом в наиболее популярном Arduino NANO. Однако этого вполне достаточно для большинства несложных проектов.Поскольку данный МК является устаревшей моделью, современные средства разработки его как правило не поддерживают.Из поддерживаемых можно отметить следующие:• AVR CodeVision 3.12• AVR Studio 4.19• Программатор AVR DUDE PROG версии 1.0
↑ Проблемы с ATMega163 и их преодоление
Естественно возникло желание использовать ATMega163 в проектах, созданных в Arduino IDE.Поиск по Сети на данную тему ничего не дал, все закончилось тем, что никто не смог собрать загрузчик для данного МК. Все дело в том, что при использовании стороннего USB программатора, отпадает необходимость в загрузчике, что также сэкономит 2 КБ флеш-памяти.В любом случае необходимо скомпилировать HEX-файл, необходимый для программирования данного МК.Идем в папку установки Arduino IDE. Обычно это C:Program Files (x86)ArduinohardwareArduinoavr для 64 битных систем и C:Program FilesArduinohardwareArduinoavr для 32 битных соответственно. Предварительно сделав резервную копию файла boards.txt, добавляем в него следующие строки:
####################################################################### atmega16.name=ATMega16 atmega16.bootloader.low_fuses=0xFF atmega16.bootloader.high_fuses=0xCF atmega16.bootloader.unlock_bits=0×3 °F atmega16.bootloader.lock_bits=0×0 °F atmega16.upload.maximum_size=16384 atmega16.build.mcu=atmega16 atmega16.build.f_cpu=4000000L atmega16.build.core=Arduino:Arduino atmega16.build.variant=standard # Без загрузчика частота МК 4 МГц. ########################################################################### ########################################################################### atmega163.name=ATMega163L atmega163.bootloader.low_fuses=0xFF atmega163.bootloader.high_fuses=0xCF atmega163.bootloader.unlock_bits=0×3 °F atmega163.bootloader.lock_bits=0×0 °F atmega163.upload.maximum_size=16384 atmega163.build.mcu=atmega163 atmega163.build.f_cpu=4000000L atmega163.build.core=Arduino:Arduino atmega163.build.variant=standard # Без загрузчика частота МК 4 МГц. ###########################################################################
Важно! В случае возникновения ошибок файла boards.txt, его необходимо сохранить в кодировке UTF-8 без BOM.Теперь проверяем. Открываем проект blink, меняем порт на 0, выбираем плату ATMega16 компилируем.Теперь проверим что у нас получилось в Proteus. Тестовая схема имеет следующий вид:
↑ Проект для Proteus
Скачать проект для Proteus можно внизу статьи. Скомпилированный файл распологается в папке скетчей, обычно это C:Users[User_name]DocumentsArduinoBlink, загружаем полученный файл Blink.ino.standard.hex и убеждаемся, что все работает. Поскольку в Proteus нет модели для ATMega163, то для моделирования компилируем прошивку для ATMega16.Прошивка микроконтроллера производится из программы USBASP AVRDUDE_PROG с помощью программатора USBASP, причем для МК ATMega163 необходимо использование старой версии 1.0, т. к. в более новых поддержка данного МК отсутствует.Скачать USBASP AVRDUDE_PROG можно внизу статьи
↑ FUSE биты
FUSE биты для ATMega163L 4 MHz, установлены следующим образом:Arduino Pin Mapping для МК ATMega16/ATMega163 в корпусах PDIP и TQFP
↑ Важное примечание
При использовании библиотек avr-netino необходимо помнить, что они имеют совершенно иной Arduino pin mapping.При компиляции проектов под МК ATMega8, ATMega16, и аналогичных, в проектах, использующих таймер, ШИМ, UART, необходимо добавить в начало скетча следующий код:
#define TCCR2A TCCR2 #define TCCR2B TCCR2 #define TIFR2 TIFR #define COM2A1 COM21 #define COM2A0 COM20 #define OCR2A OCR2 #define TIMSK2 TIMSK #define OCIE2A OCIE2 #define TIMER2_COMPA_vect TIMER2_COMP_vect #define TIMSK1 TIMSK
↑ Файлы
▼atmega16_test.zip 🕗 14/04/19 ⚖️ 15,54 Kb ⇣ 6Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.Уже более 10 лет наш журнал существует только на мои средства. Хорош! Халява кончилась. Хочешь файлы и полезные статьи — помоги мне!Пожертвовать на журнал Датагор и др. способы получения доступа. — Спасибо за внимание! Игорь Котов, учредитель журнала «Датагор» ▼usbasp_avrdude_prog1.zip 🕗 14/04/19 ⚖️ 384,86 Kb ⇣ 7Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.Уже более 10 лет наш журнал существует только на мои средства. Хорош! Халява кончилась. Хочешь файлы и полезные статьи — помоги мне!Пожертвовать на журнал Датагор и др. способы получения доступа. — Спасибо за внимание! Игорь Котов, учредитель журнала «Датагор» Спасибо за внимание!В следующей статье планирую рассказать о создании паяльной станции на МК ATMega16/ATMega163.
Камрад, смотри полезняхи!
Александр (radist80)Украина, ДнепрСписок всех статейПрофиль radist80О себе автор ничего не сообщил.
Читательское голосование
Статью одобрили 25 читателей.
Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
Поделись с друзьями!
Связанные материалы
Программирование микроконтроллеров в 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… Здравствуйте, друзья. Хочу предложить вашему вниманию несколько простых функций для работы с шиной…
Общаемся по статье 💬
Использование МК ATMega163, ATMega163L, ATMega16 в Arduino IDE
Комментарии, вопросы, ответы, дополнения, отзывы
Что такое даташит
Даташит – это техническое описание на какой-либо радиокомпонент. Где его найти? Ну, конечно же, в интернете! Так так почти вся радиоэлектронная продукция выпускается “за бугром”, то и описание на них, соответственно, “забугорское”, а точнее, на английском языке. Те, кто хорошо дружит с разговорным английским, не факт, что сможет прочитать технические термины в даташитах.
Даташит на английском на Atmega8
Давайте попробуем пролить свет истины на основные характеристики МК ATmegа8. Для этого качаем даташит. В нашей статье мы будем рассматривать только основные сведения нашего подопечного.
Вот что мы видим на первой странице даташита:
Даташит на русском Atmega8
Запоминаем правило: в фирменном описании нет ни одного лишнего слова! (иногда информации не хватает, но это уже другой случай)
Features. Переводится как “функции”. В среде электронщиков просто “фичи”.
– High Performance, Low Power AVR® 8-Bit Microcontroller
Высокопроизводительный, потребляющий мало энергии, 8-битный микроконтроллер.
Понимаем как рекламу, единственно полезное то, что данный микроконтроллер — 8 битный.
– Advanced RISC Architecture
Расширенная RISC архитектура.
RISC и CISC — технологии построения процессорных систем. Но нам это не важно, по крайней мере, пока.
– 130 Powerful Instructions – Most Single Clock Cycle Execution
130 команд, большинство из них выполняются за один цикл.
А вот это уже интереснее! Во-первых, такое большое количество команд (например, у микроконтроллеров PIC всего 35 команд) уже подразумевает ориентацию этого МК под языки высокого уровня. Во-вторых, узнаем, что одна команда выполняется за один такт генератора. Т.е., при тактовой частоте 1 МГц одна команда будет выполняться 1 микросекунду (1 мкс, одну миллионную часть секунды — 10^-6). А при 10 МГц — в десять раз быстрее, т.е., 0,1 мкс.
– 32 x 8 General Purpose Working Registers
32 восьмибитных регистра общего пользования.
Про регистры поговорим позднее, просто запомним, что большое количество регистров — весьма неплохо, ведь регистр — это ячейка памяти в самом МК. А чем больше такой памяти – тем «шустрее» работает МК!
Объединив эти данные с количеством поддерживаемых микроконтроллером команд, в очередной раз убеждаемся в изначальной ориентации данного МК под высокоуровневые языки вроде Си, Паскаля и других.
– Fully Static Operation
Полностью статическая структура.
Вспоминаем о типах памяти: динамической и статической. Этот пункт заверяет нас, что МК сохранит свою работоспособность при тактовой частоте ниже сотен герц и даже при отсутствии тактовой частоты на его специальных выводах.
(Также нелишним будет напомнить о том, что потребляемая мощность большинства типов МК напрямую зависит от тактовой частоты: чем выше тактовая частота, тем больше он потребляет)
– Up to 16 MIPS Throughput at 16 MHz
До 16 миллионов выполняемых команд при тактовой частоте 16 МГц.
За одну секунду при тактовой частоте 16 МГц может быть выполнено до 16 000 000 команд! Следовательно, одна однобайтовая команда может быть выполнена за 0,07 мкс. Весьма недурно для маленькой микросхемы.
С учетом предыдущего пункта понимаем, как работает на частотах от 0 Гц до 16 МГц.
– On-chip 2-cycle Multiplier
В данном МК имеется встроенный умножитель, который умножает числа за два такта.
Ну, это хорошо. Даже очень. Но мы пока не будет вгрызаться в эти нюансы…
– High Endurance Non-volatile Memory segments
Надежная энергонезависимая память, построенная в виде нескольких сегментов.
Вспоминаем типы памяти: EEPROM и FLASH.
– 8KBytes of In-System Self-programmable Flash program memory
– 8 Кбайт встроенной в МК памяти. Память выполнена по технологии Flash. В самом МК имеется встроенный программатор.
Этот объем весьма хорош! Для обучения (да и не только) — с запасом. А наличие встроенного программатора этой памяти, позволяет загружать данные в память, используя простой внешний программатор (в простейшем случае это пять проводков, которыми микроконтроллер подключают к LPT порту компьютера).
– 256 Bytes EEPROM
В МК имеется 256 байт энергонезависимой памяти EEPROM.
Следовательно, можно сохранить еще дополнительную информацию, которую можно изменять программой МК, без внешнего программатора.
– 1024 Bytes Internal SRAM
В МК имеется 1024 байт оперативной памяти (ОЗУ/RAM).
Также весьма приятный объем
– Write/Erase cyles: 10,000 Flash/100,000 EEPROM
Память Flash выдерживает 10 000 циклов записи/стирания, а память EEPROM — до 100 000
Проще говоря, программу в МК можно изменять до 10 000 раз, а свои данные в 10 раз больше.
– Data retention: 20 years at 85°C/100 years at 25°C
Сохранность данных в памяти МК — до 20 лет при температуре хранения 85°C, и 100 лет — при температуре 20°C.
Если ваши внуки и правнуки включат вашу «мигалку» или музыкальную шкатулку, то они смогут насладиться их работой ))
– Optional Boot Code Section with Independent Lock Bits
– Programming Lock for Software Security
МК имеет несколько областей памяти (не уточняем каких), которые можно защитить от прочтения установкой специальных бит защиты.
Ну, тут всё понятно: свои труды вы можете защитить от вычитывания программы из памяти МК.
Далее идет описание имеющейся в данном микроконтроллере периферии (т.е., встроенных в него аппаратных устройств типа таймеров, источников прерываний и интерфейсов связи)
– Two 8-bit Timer/Counters
– One 16-bit Timer/Counter
В МК имеется два таймера/счетчика: 8 и 16 бит.
– Three PWM Channels
Три канала ШИМ
– 8-channel ADC in TQFP and QFN/MLF package
Eight Channels 10-bit Accuracy
– 6-channel ADC in PDIP package
Six Channels 10-bit Accuracy
В составе МК есть несколько каналов АЦП: 6 – для корпуса PDIP и 8 – для корпуса QFN/MLF. Разрядность АЦП — 10 бит.
– Byte-oriented Two-wire Serial Interface
– Programmable Serial USART
В данном МК реализован аппаратный двухпроводный интерфейс связи USART, байт ориентированный и программируемый — имеется возможность настройки параметров интерфейса.
– Master/Slave SPI Serial Interface
Реализован SPI интерфейс связи, режимы Мастер/Подчиненный.
– Programmable Watchdog Timer with Separate On-chip Oscillator
Сторожевой таймер с собственным автономным генератором.
– On-chip Analog Comparator
Аналоговый компаратор.
– Power-on Reset and Programmable Brown-out Detection
Реализованы режимы контроля напряжения питания и защита работы МК при плохом питании (гарантирует увеличение надёжности работы всей системы).
– Internal Calibrated RC Oscillator
Встроенный калиброванный RC-генератор (можно запустить МК без внешних элементов).
– External and Internal Interrupt Sources
Реализовано несколько типов внешних и внутренних прерываний.
– Five Sleep Modes
Пять режимов «сна» (уменьшение энергопотребления МК за счет отключения некоторых внутренних узлов или специальных методов замедления их работы)
Понимаем как возможность выбора такого режима, при котором соотношение «потребляемая энергия/возможности» будут оптимальны для решения наших задач. Весьма полезная возможность при необходимости экономить энергию: питании от батарей, аккумуляторов и других источников.
– 28-pin PDIP, 32-lead TQFP, 28-pad QFN/MLF and 32-pad QFN/MLF
Указаны типы корпусов, в которых выпускается данный микроконтроллер. Видим «28 DIP» — это хорошо! Не надо покупать специализированные дорогостоящие панели и мучиться с тоненькими и часто расположенными выводами на корпусе МК.
Temperature Range:
-40°C to 85°C
Рабочая температура: -40°C … +85°C
Очень важный параметр! Бывают модели микроконтроллеров, которые работоспособны только при положительных температурах окружающего воздуха.
(Был у меня горький опыт, когда в устройстве был применен именно такой «теплолюбивый» микроконтроллер. А устройство поместили на улицу… И каждую зиму «благодарные» пользователи моего устройства «хвалили» меня за «замерзание» микроконтроллера, которое проявлялось в виде полного его зависания)
Напряжение питания и тактовая частота
– 2.7 – 5.5V for ATmega8L
– 4.5 – 5.5V for ATmega8
Имеется две модификации данного МК: одна работоспособна при широком диапазоне питающих напряжение, вторая — в узком.
– ATmega8L: 0 – 8 MHz @ 2.7 – 5.5V
– ATmega8: 0 – 16 MHz @ 4.5 – 5.5V
Максимальная тактовая частота:
– Atmega8L: 0 – 8 МГц при напряжении питания 2,7 – 5,5 вольт
– Atmega8: 0 – 16 МГц при напряжении питания 4,5 – 5,5 вольт.
И что мы видим? А то, что модификация МК, работоспособная в широком диапазоне питающих напряжений, не может быть тактируема частотами выше 8 МГц. Следовательно, и ее вычислительные возможности будут ниже.
Power Consumption at 4 Mhz, 3V, 25°C
– Active: 3.6 mA
– Idle Mode: 1.0 mA
– Power-down Mode: 0.5 µA
Потребляемая мощность:
– при работе на частоте 4 МГц и напряжении питания 3 вольта потребляемый ток: 3,6 миллиампер,
– в различных режимах энергосбережения потребляемый ток: от 1 миллиампер до 0,5 микроампера
Распиновка Atmega8
На следующей странице публикуется расположение выводов данного микроконтроллера при использовании разных типов корпусов:
Советую этот листок из даташита распечатать и иметь под рукой. В процессе разработки и сборки схемы очень полезно иметь эти данные перед глазами.
Внимание!
Обратите внимание на такой факт: микросхема микроконтроллера может иметь (и имеет в данной модели) несколько выводов для подключения источника питания. То есть имеется несколько выводов для подключения «земли» — «общего провода», и несколько выводов для подачи положительного напряжения.
Изготовители микроконтроллеров рекомендуют подключать соответствующие выводы вместе, т.е., минус подавать на все выводы, помеченные как Gnd (Ground — Земля), плюс — на все выводы помеченные как Vcc.
При этом через одинаковые выводы МК не должны протекать токи, так как внутри корпуса МК они соединены тонкими проводниками! То есть при подключении нагрузки эти выводы не должны рассматриваться как «перемычки».
Блочная диаграмма
Листаем описание далее, видим главу «Overview» (Обзор).
В ней имеется раздел «Block Diagram» (Устройство). На рисунке показаны устройства, входящие в состав данного микроконтроллера.
Генератор тактовой частоты
Но самым важным для нас в настоящее время является блок «Oscillator Circuits/Clock Generation» (Схема генератора/Генератор тактовой частоты).
В программе часто возникает необходимость сделать временную задержку в ее выполнении — паузу. А точную паузу можно организовать только методом подсчета времени. Время считаем исходя из количества тактов генератора микроконтроллера.
Да и не лишним будет заранее просчитать: успеет ли МК выполнить тот или иной фрагмент программы за отведенное для этого время.
В даташите ищем соответствующую главу: «System Clock and Clock Options» (Тактовый генератор и его параметры). В ней видим раздел «Clock Sources» (Источники тактового сигнала), в котором имеется таблица с перечнем видов тактовых сигналов. В этом разделе указано, что данный МК имеет встроенный тактовый RC-генератор. В разделе «Default Clock Source» имеется указание о том, что МК продается уже настроенным для использования встроенного RC-генератора. При этом тактовая частота МК — 1 МГц.
Из раздела «Calibrated Internal RC Oscillator» (Калиброванный RC-генератор) узнаем, что встроенный RC-генератор имеет температурный дрейф в пределах 7,3 — 8,1 МГц. Может возникнуть вопрос: если частота встроенного тактового генератора 7,3 — 8,1 МГц, то как была получена частота 1 МГц? Дело в том, что тактовый сигнал попадает в схемы микроконтроллера через программируемый делитель частоты (Об это рассказано в разделе «System Clock Prescaler»).
В данном микроконтроллере он имеет несколько коэффициентов деления: 1, 2, 4 и 8. При выборе первого мы получим частоту самого тактового генератора, при включении последнего — в 8 раз меньше, т.е., 8/8=1 МГц. С учетом вышесказанного получаем, что тактовая частота данного МК при включенном делителе с коэффициентом 8 будет в пределах от 7,3/8 = 0,9125 МГц (9125 КГц) до 8,1/8 = 1,0125 МГц.
Обратите внимание на один ну очень важный факт: стабильность частоты дана при температуре МК 25 градусов по шкале Цельсия. Вспомним, что внутренний генератор выполнен по RC схеме. А емкость конденсатора очень зависит от температуры!
Конденсаторы по питанию
Перед тем, как подать на микроконтроллер питающее напряжение, выполним правило, которое обязательно для всех цифровых микросхем: в непосредственной близости от выводов питания микросхемы должен быть керамический конденсатор емкостью 0,06 — 0,22 мкф. Обычно устанавливают конденсатор 0,1 мкф. Его часто называют блокировочным конденсатором.
В схему необходимо установить и электролитический конденсатор емкостью 4-10 мкф. Он также является блокировочным фильтром, но на менее высоких частотах. Такой конденсатор можно устанавливать один для нескольких микросхем. Обычно на 2-3 корпуса микросхем.
Дело в том, что микроконтроллер (как и другие цифровые микросхемы) состоит из транзисторных ячеек, которые в процессе работы постоянно переключаются из открытого состояния в закрытое, и наоборот. При этом изменяется потребляемая транзисторными ячейками энергия. В линии питания возникают кратковременные «провалы» напряжения. Этих ячеек в микроконтроллере сотни тысяч (думаю, что сейчас уже миллионы!), поэтому по питающим проводам начинают гулять импульсные помехи с частотами от единиц до десятков тысяч Герц.
Для предотвращения распространения этих помех по цепям схемы, да и самой микросхемы микроконтроллера, параллельно его выводам питания устанавливают такой блокировочный конденсатор. При этом на каждую микросхему необходимо устанавливать индивидуальный конденсатор.
Конденсатор для постоянного тока является изолятором. Но при установке конденсатора в цепи с непостоянным током он делается сопротивлением. Чем выше частота, тем меньшее сопротивление оказывает конденсатор. Следовательно, блокировочный конденсатор с малой емкостью пропускает через себя (шунтирует) высокочастотные сигналы (десятки и сотни Герц), а конденсатор с бОльшей емкостью — низкочастотные. Об этом я писал еще в статье Конденсатор в цепи постоянного и переменного тока
Выводы
– микроконтроллер AVR ATmega-8 при поставке с завода работает на тактовой частоте 0,91—1,1 МГц;
– напряжение питания должно быть в пределах 4,5 — 5,5 Вольт. Мы будем использовать микросхемы с питающим напряжением 5 Вольт, поэтому и МК будет питаться этим же напряжением. (Хотя работоспособность сохранится при напряжении питания 2,7 Вольт для обычных, не низковольтных моделей МК)
Используемые источники:
- https://microkontroller.ru/avr-microcontroller-projects/kak-ispolzovat-adc-v-avr-atmega16/
- https://datagor.ru/microcontrollers/arduino/3097-atmega163-atmega163l-atmega16-arduino-ide.html
- https://www.ruselectronic.com/chitaem-datashit-na-primere-atmega8/