Bt-teh.ru

БТ Тех
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Arduino Uno: распиновка, схема подключения и программирование

Arduino Uno: распиновка, схема подключения и программирование

Arduino Uno — флагманская платформа для разработки на языке программирования С++.

Uno выполнена на микроконтроллере ATmega328P с тактовой частотой 16 МГц. На плате предусмотрены 20 портов входа-выхода для подключения внешних устройств, например плат расширения или датчиков.

Видеообзор

Подключение и настройка

Шаг 1

Подключите плату к компьютеру по USB. Для коммуникации используйте кабель USB (A — B).

Шаг 2

Установите и настройте интегрированную среду разработки Arduino IDE.

Что-то пошло не так?

Пример работы

В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. На плате уже есть встроенный пользовательский светодиод L , подключенный к 13 пину микроконтроллера.

После загрузки программы встроенный светодиод L начнёт мигать раз в секунду.

Это значит, всё получилось, и можно смело переходить к другим экспериментам на Ардуино.

Элементы платы

Микроконтроллер ATmega328P

Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц. Контроллер обладает тремя видами памяти:

Микроконтроллер ATmega16U2

Микроконтроллер ATmega328P не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.

Микроконтроллер ATmega328P общается с ПК через сопроцессор ATmega16U2 по интерфейсу UART используя сигналы RX и TX , которые параллельно выведены на контакты 0 и 1 платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.

Светодиодная индикация

Имя светодиодаНазначение
ONИндикатор питания платформы.
LПользовательский светодиод на 13 пине микроконтроллера. Используйте определение LED_BUILTIN для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается.
RX и TXМигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов 0 и 1 .

Порт USB Type-B

Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).

Разъём питания DC

Коннектор DC Barrel Jack для подключения внешнего источника напряжения в диапазоне от 7 до 12 вольт.

Понижающий регулятор 5V

Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через разъём питания DC или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.

Понижающий регулятор 3V3

Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине 3V3 . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.

Кнопка сброса

Кнопка предназначена для ручного сброса прошивки — аналог кнопки RESET обычного компьютера.

ICSP-разъём ATmega328P

ICSP-разъём выполняет две полезные функции:

ICSP-разъём ATmega16U2

ICSP-разъём предназначен для программирования микроконтроллера ATmega16U2. А подробности распиновки читайте в соответствующем разделе.

Микроконтроллер

Микроконтро́ллер (англ.  Micro Controller Unit, MCU ) — микросхема, предназначенная для управления электронными устройствами.

Типичный микроконтроллер сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ и (или) ПЗУ. По сути, это однокристальный компьютер, способный выполнять относительно простые задачи.

Отличается от микропроцессора интегрированными в микросхему устройствами ввода-вывода, таймерами и другими периферийными устройствами.

Содержание

История [ править | править код ]

С появлением однокристальных микроЭВМ связывают начало эры массового применения компьютерной автоматизации в области управления. По-видимому [ источник не указан 640 дней ] , это обстоятельство и определило термин «контроллер» (англ.  controller  — регулятор, управляющее устройство).

В связи со спадом отечественного производства и возросшим импортом техники, в том числе вычислительной, термин «микроконтроллер» (МК) вытеснил из употребления ранее использовавшийся термин «однокристальная микроЭВМ».

Первый патент на однокристальную микроЭВМ был выдан в 1971 году инженерам М. Кочрену и Г. Буну, сотрудникам американской Texas Instruments. Именно они предложили на одном кристалле разместить не только процессор, но и память с устройствами ввода-вывода.

В 1976 году [1] американская фирма Intel выпускает микроконтроллер i8048. В 1978 году фирма Motorola выпустила свой первый микроконтроллер MC6801, совместимый по системе команд с выпущенным ранее микропроцессором MC6800. В 1980 году Intel выпускает следующий микроконтроллер: i8051. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке. С точки зрения технологии микроконтроллер i8051 являлся для своего времени очень сложным изделием — в кристалле было использовано 128 тыс. транзисторов, что в 4 раза превышало количество транзисторов в 16-разрядном микропроцессоре i8086.

В СССР велись разработки оригинальных микроконтроллеров, также осваивался выпуск клонов наиболее удачных зарубежных образцов [2] [3] [4] [5] . В 1979 году в СССР НИИ ТТ разработали однокристальную 16-разрядную ЭВМ К1801ВЕ1, микроархитектура которой получила название «Электроника НЦ».

На 2013 год существовало более 200 модификаций микроконтроллеров, совместимых с i8051, выпускавшихся двумя десятками компаний, и большое количество микроконтроллеров других типов. Популярностью у разработчиков пользуются 8-битные, 16-битные и 32-битные микроконтроллеры PIC фирмы Microchip Technology, микроконтроллеры AVR фирмы Atmel (с 2016 года производятся фирмой Microchip [6] ), 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры архитектуры ARM, которую разрабатывает фирма ARM Limited и продаёт лицензии другим фирмам для их производства. Несмотря на популярность в России микроконтроллеров, упомянутых выше, на 2009 год мировой рейтинг по объёму продаж, по данным Gartner Group, выглядел иначе: первое место с большим отрывом занимала Renesas Electronics, на втором — Freescale, на третьем — Samsung, затем шли Microchip и TI, далее — все остальные [7] .

Описание [ править | править код ]

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

В отличие от обычных компьютерных микропроцессоров, в микроконтроллерах часто используется гарвардская архитектура памяти, то есть раздельное хранение данных в ОЗУ, а команд — в ПЗУ.

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

Наиболее дешёвые типы памяти допускают лишь однократную запись, либо хранимая программа записывается в кристалл на этапе изготовления (конфигурацией набора технологических масок). Такие устройства подходят для массового производства в тех случаях, когда программа контроллера не будет обновляться. Другие модификации контроллеров обладают возможностью многократной перезаписи программы в энергонезависимой памяти.

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

  • универсальные цифровые порты, которые можно настраивать как на ввод, так и на вывод;
  • различные интерфейсы ввода-вывода, такие, как UART, I²C, SPI, CAN, USB, IEEE 1394, Ethernet; и цифро-аналоговые преобразователи; ; модуляторы (ШИМ-контроллер); ;
  • контроллеры бесколлекторных двигателей, в том числе шаговых;
  • контроллеры дисплеев и клавиатур;
  • радиочастотные приемники и передатчики;
  • массивы встроенной флеш-памяти;
  • встроенные тактовый генератор и сторожевой таймер;

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

Известные семейства [ править | править код ]

    (Intel)
    и ESP32 (Espressif)
    (TI)
    (ARM Limited)

    • ST Microelectronics STM32 ARM-based MCUs
    • ARM Cortex, ARM7 и ARM9-based MCUs
    • Texas Instruments Stellaris MCUs ARM-based LPC MCUs ARM-based MCUs
    • Analog Devices ARM7-based MCUs ARM7-based MCUs
    • Freescale Semiconductor ARM9-based MCUs EFM32 ARM-based MCUs

    Применение [ править | править код ]

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

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

    • в вычислительной технике: материнские платы, контроллеры дисководов жестких и гибких дисков, CD и DVD, калькуляторах;
    • электронике и разнообразных устройствах бытовой техники, в которой используется электронные системы управления — стиральных машинах, микроволновых печах, посудомоечных машинах, телефонах и современных приборах, различных роботах, системах «умный дом», и др..
    • устройства промышленной автоматики — от программируемого реле и встраиваемых систем до ПЛК, станками

    В то время как 8-разрядные микропроцессоры общего назначения полностью вытеснены более производительными моделями, 8-разрядные микроконтроллеры продолжают широко использоваться. Это объясняется тем, что существует большое количество применений, в которых не требуется высокая производительность, но важна низкая стоимость. В то же время, есть микроконтроллеры, обладающие больши́ми вычислительными возможностями, например, цифровые сигнальные процессоры, применяющиеся для обработки большого потока данных в реальном времени (например, аудио-, видеопотоков).

    Программирование [ править | править код ]

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

    Известные компиляторы Си для МК:

       — поддерживает ARM, AVR, MSP430 и многие другие архитектуры  — поддерживает множество архитектур (для AVR) [1] (для любых МК) (для AVR и AVR32)
    • Keil (для архитектуры 8051 и ARM)
    • HiTECH (для архитектуры 8051 и PIC от Microchip)

    Известные компиляторы бейсика для МК:

      (архитектуры PIC, AVR, 8051 и ARM) (архитектуры AVR и 8051) (для архитектуры AVR) (для архитектуры PIC) (для архитектуры PIC)

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

    Аналоговые пины

    В прошлом уроке мы разобрали измерение и вывод цифрового сигнала с микроконтроллера, а в этом разберём аналоговый сигнал. Как мы уже не раз говорили ранее, у микроконтроллера есть аналоговые входы, т.е. входы, подключенные к АЦП – аналогово-цифровому преобразователю (ADC). На платах Ардуино это пины, маркированные буквой А. Я не просто так написал название в кавычках, потому что не все пины являются только аналоговыми: например на плате Nano пины A0-A5 являются также обычными цифровыми, и у них есть возможность измерять аналоговый сигнал как доп. функция. Пины A6 и A7 являются чисто аналоговыми.

    Зачем нужно читать аналоговый сигнал? Микроконтроллер может выступать в роли вольтметра, измерять собственное напряжение питания, например от аккумулятора, может измерять ток через шунт (если вы знаете закон Ома), можно измерять сопротивление, а также работать с потенциометрами (крутильными, линейными, джойстиками), которые являются очень удобными органами управления.

    Чтение сигнала

    “Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП у нас имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023. Функция, которая оцифровывает напряжение, называется analogRead(pin) , данная функция принимает в качестве аргумента номер аналогового пина и возвращает полученное значение. Сам пин должен быть сконфигурирован как INPUT (вход), напомню, что по умолчанию все пины так и настроены. Пин кстати указывается “аналоговый”:

    • Просто номером А-пина (например, )
    • Номером с буквой А (например, А0)
    • Порядковым номером GPIO: А0 – 14 пин, A1 – 15 пин… А7 – 21

    Вот пример, опрашивающий пин А0.

    Хранить полученное значение разумно в переменной типа int, потому что значение варьируется от 0 до 1023.

    Потенциометры

    Аналоговые пины и АЦП в целом очень часто используются при работе с потенциометрами (он же переменный резистор или реостат). 10 бит АЦП позволяют дать возможность задавать в программу значения от 0 до 1023 (или кратные им), то есть влиять на ход работы программы, менять какие-то настройки и тому подобное. У потенциометра всегда три ноги: две крайние и одна центральная. Всё вместе это представляет собой делитель напряжения, который и позволяет менять напряжение в диапазоне 0-VCC: К Arduino потенциометр подключается вот так, средний вывод на любые A-пины, крайние – на GND и питание. От порядка подключения GND и питания зависит направление изменения значения. Что касается сопротивления, то читай заметку по делителям напряжения ниже в этом уроке. Чаще всего для микроконтроллеров ставят потенциометры с сопротивлением 10 кОм, но диапазон в принципе очень широк: от 1 кОм до 100 кОм. Чем больше, тем более шумным будет приходить сигнал, а если брать меньше – пойдут потери тока в нагрев потенциометра, а это никому не нужно. blank

    Опорное напряжение

    Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию – analogReference(mode) , где mode:

    • DEFAULT : опорное напряжение равно напряжению питания МК. Активно по умолчанию
    • INTERNAL : встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
    • INTERNAL1V1 : встроенный источник опорного на 1.1V ( только для Arduino Mega )
    • INTERNAL2V56 : встроенный источник опорного на 2.56V ( только для Arduino Mega )
    • EXTERNAL : опорным будет считаться напряжение, поданное на пин AREF

    После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными (шумными). Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V (может повредить плату).

    При режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение, читайте ниже.

    Что касается точности: при питании от 5V и режиме DEFAULT мы получим точность измерения напряжения (5 / 1024)

    4.9 милливольт. Поставив INTERNAL мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024)

    0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения. Что касается внешнего источника опорного напряжения.

    Нельзя использовать напряжение меньше 0V (отрицательное) или выше 5.5V в качестве внешнего опорного в пин AREF. Также при подключении внешнего опорного напряжения нужно вызвать analogReference(EXTERNAL) до первого вызова функции analogRead() (начиная с запуска программы), иначе можно повредить микроконтроллер! Чтобы “на лету” переключаться между внутренними и внешним опорными, можно подключить его на AREF через резистор на

    5 кОм. Вход AREF имеет собственное сопротивление в 32 кОм, поэтому реальное опорное будет вычисляться по формуле REF = V * R * 32 / (R + 32), где R – сопротивление резистора (кОм), через которое подключено опорное напряжение V (Вольт). Например для 2.5V получим 2.5 * 32 / (32 + 5) =

    2.2V реальное опорное.

    Измерение напряжения

    0-5 Вольт

    Простой пример, как измерить напряжение на аналоговом пине и перевести его в Вольты. Плата питается от 5V.

    Таким образом переменная voltage получает значение в Вольтах, от 0 до 5. Чуть позже мы поговорим о более точных измерениях при помощи некоторых хаков. Почему мы делим на 1024, а не на 1023 , ведь максимальное значение измерения с АЦП составляет 1023? Ответ можно найти в даташите: АЦП при преобразовании отнимает один бит, т.е. 5.0 Вольт он в принципе может измерить только как 4.995, что и получится по формуле выше: 1023 * 5 / 1024 == 4.995.. . Таким образом делить нужно на 1024, если кто-то у вас спросит почему – отправьте его читать даташит.

    Сильно больше 5 Вольт

    Для измерения постоянного напряжения больше 5 Вольт нужно использовать делитель напряжения на резисторах (Википедия). Схема подключения, при которой плата питается от 12V в пин Vin и может измерять напряжение источника (например, аккумулятора): Код для перевода значения с analogRead в вольты с учётом делителя напряжения:

    Как выбрать/рассчитать делитель напряжения?

    • Согласно даташиту на ATmega, сумма R1 + R2 не рекомендуется больше 10 кОм для достижения наибольшей точности измерения. В то же время через делитель на 10 кОм будет течь ощутимый ток, что критично для автономных устройств (читай ниже). Если девайс работает от сети или от аккумулятора, но МК не используется в режиме сна – ставим делитель 10 кОм и не задумываемся. Также рекомендуется поставить конденсатор между GND и аналоговым пином для уменьшения помех.
    • Если девайс работает от аккумулятора и микроконтроллер “спит”: пусть аккумулятор 12V, тогда через 10 кОм делитель пойдёт ток 1.2 мА, согласно закону Ома. Сам микроконтроллер в режиме сна потребляет

    1 мкА, что в тысячу раз меньше! На самом деле можно взять делитель с гораздо бОльшим суммарным сопротивлением (но не больше 20 МОм, внутреннего сопротивления самого АЦП), но обязательно поставить конденсатор на

    3.13 . Я хочу измерять литиевый аккумулятор с максимальным напряжением 12.8 Вольт. 12.8 / 3.13

    Сильно меньше 5 Вольт

    Для более точных измерений маленького напряжения можно подключить пин AREF к источнику низкого опорного напряжения (об этом было выше), чтобы “сузить” диапазон работы АЦП. Источник может быть как внешний, так и внутренний, например изменив опорное на внутреннее 1.1V ( analogReference(INTERNAL) ) можно измерять напряжение от 0 до 1.1 Вольта с точностью 1.1/1024

    Видео

    Регулятор силы свечения светодиода на микроконтроллере AVR ATmega32

    В этом проекте мы будем управлять яркостью свечения одноваттного светодиода с помощью микроконтроллера ATmega32 (семейство AVR). Мы будем делать это, используя ШИМ (широтно-импульсную модуляцию).

    Регулятор силы свечения светодиода на микроконтроллере AVR ATmega32: внешний вид устройства

    Общий принцип управления яркостью свечения

    Управляя скоростью модуляции ШИМ (Pulse Width Modulation, PWM) можно регулировать силу свечения светодиода – данный принцип пояснен на следующем рисунке.

    Если на представленном рисунке выключатель будет замкнут на протяжении некоторого времени, то на протяжении этого же времени лампочка будет гореть. Если переключатель будет замкнут в течение 8ms и будет разомкнут 2ms в течение интервала 10ms, тогда лампочка будет гореть только в течение интервала 8ms. В рассмотренном примере можно сказать, что среднее выходное напряжение (на лампочке) будет составлять 80% от напряжения батареи.

    В другом случае выключатель замыкается на 5ms и размыкается на эти же самые 5ms в течение интервала 10ms, таким образом среднее напряжение на лампочке будет составлять 50% от напряжения батареи. Принято говорить, что если напряжение батареи 5В и цикл занятости составляет 50%, то среднее напряжение на оконечном устройстве (лампочке) будет составлять 2.5В.

    В третьем рассмотренном на рисунке случае цикл занятости составляет 20% и поэтому среднее напряжение на оконечном устройстве (лампочке) будет составлять 20% от напряжения батареи.

    В микроконтроллере ATmega32 мы имеем четыре ШИМ канала (PWM channels), которые обозначаются как OC0, OC1A, OC1B и OC2. В нашей схеме мы будем использовать канал OC0 для изменения яркости свечения светодиода.

    Необходимые компоненты

    Аппаратное обеспечение

    1. Микроконтроллер ATmega32 (купить на AliExpress).
    2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
    3. Конденсатор 100 мкФ (подключенный по питанию) (купить на AliExpress).
    4. Светодиод на 1 Ватт (купить на AliExpress).
    5. Транзистор TIP127 (купить на AliExpress).
    6. Кнопки (2 шт.).
    7. Конденсатор на 100 нФ (2 шт.) (купить на AliExpress).
    8. Резистор 100 Ом (купить на AliExpress).
    9. Резистор 1 кОм (2 шт.) (купить на AliExpress).
    10. Источник питания с напряжением 5 Вольт.

    Программное обеспечение

    1. Atmel Studio версии 6.1 (или выше).
    2. Progisp или flash magic (необязательно).

    Принцип работы схемы

    Рассматриваемая схема устройства регулирования силы свечения светодиода на микроконтроллере AVR ATmega32 приведена на следующем рисунке.

    В микроконтроллере ATmega32 четыре ШИМ (PWM) канала используются на четырех контактах. Мы можем использовать только выход ШИМ на этих контактах. Поскольку мы решили использовать PWM0 (8-битный канал) мы должны использовать ШИМ сигнал с контакта OC0 (PORTB 3-й контакт). Как можно видеть из схемы, мы соединяем базу транзистора к контакту OC0 микроконтроллера чтобы управлять мощным светодиодом.

    Параллельно кнопкам увеличения/уменьшения яркости свечения подсоединены конденсаторы для предотвращения биений (нежелательных колебаний, шумов). Всегда, когда нажата кнопка, на контакте, к которому она подсоединена, присутствует определенный шум. Этот шум стабилизируется в течение нескольких миллисекунд. Но для микроконтроллера пики этого шума (до того как он стабилизируется) действуют как триггеры. Этот эффект можно исключить как программным, так и аппаратным способом, программным – проще. Но мы в данной схеме используем аппаратный способ путем добавления конденсаторов, которые сводят к нулю эффект биения от кнопок.

    В микроконтроллерах ATmega есть два способа генерации ШИМ:

    1. Фазовая (правильная) ШИМ.
    2. Быстрая ШИМ.

    Мы будем использовать более простой способ – быстрый метод формирования ШИМ.

    Сначала необходимо выбрать частоту ШИМ, которая будет зависеть от используемого приложения (применения). Для светодиода эта частота должна быть не менее 50 Гц. Мы выберем частоту счетчика времени 1 МГц. Теперь чтобы получить быструю ШИМ 50 Гц на микроконтроллере ATmega, мы должны задействовать соответствующие биты в регистре TCCR0 – это единственный регистр, который нам будет нужен для получения 8 битной быстрой ШИМ.

    На представленном рисунке:

    1. CS00, CS01, CS02 (выделены желтым цветом) – выбирают prescalar (предварительное масштабирование) для выбора частоты временного интервала. Таблица для соответствующих prescalar показана на рисунке ниже. Таким образом, для предварительного масштабирования, равного 1, oscillator clock=counter clock (шкала осциллятора равна шкале счетчика). То есть установим CS00=1, остальным двум битам установим нулевые значения.

    2. Биты WGM01 и WGM00 изменяют чтобы выбрать нужный режим генерации формы сигнала. Исходя из необходимых нам параметров (быстрая ШИМ – Fast PWM) по таблице, представленной на следующем рисунке, выбираем WGM00=1 и WGM01=1.

    3. Теперь мы знаем, что ШИМ – это сигнал с различными интервалами ON и OFF сигнала (различными продолжительностями включения). Для получения различных продолжительностей включения (отношение длительности импульса к периоду повторения) нам необходимо выбрать значение между 0 и 255 (от 0 до 2^8 поскольку мы используем 8 битную ШИМ). Допустим мы выбрали значение 180, это значит что счетчик начинает счет от 0 и когда он достигает значения 180, то отклик на выходе может быть приведен в действие (запустится триггер). Этот триггер может быть инвертирующим и неинвертирующим. То есть выход можно сконфигурировать так, чтобы по достижении счетчиком заданного значения он либо опускал фронт импульса, либо поднимал его. Этот выбор производится с помощью установки битов CM00 и CM01 (выделены зеленым цветом на рисунке выше).

    Как показано в следующей таблице, с помощью установки этих битов можно выбрать режим как с инвертированием, так и без инвертирования. Мы выберем режим с инвертированием, таким образом установим эти биты в COM00=1 и COM01=1.

    За установку того самого значения, которое задает различные продолжительности включения (отношение длительности импульса к периоду повторения), в микроконтроллере ATmega32 отвечает байт OCR0 (Output Compare Register 0) – в нем сохраняется нужное нам значение от 0 до 255. Пример выбранного нами режима инвертирования показан на рисунке ниже. Таким образом, если мы запишем в OCR0=180, то контроллер будет изменять уровень сигнала на выходе когда счетчик досчитает до 180 (начиная с 0).

    Если необходимо будет изменить яркость свечения светодиода, то тогда в байт OCR0 следует записать другое число (вместо 180). В представленной схеме присутствуют 2 кнопки. Одна кнопка служит для увеличения числа в байте OCR0 (увеличение яркости свечения), а другая – для уменьшения числа в байте OCR0 (уменьшение яркости свечения).

    Исходный код программы на языке C (Си)

    Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке C (Си).

    голоса
    Рейтинг статьи
    Читать еще:  Пылесосы самсунг с регулировкой на ручке
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector