Курс AVR123.nm.ru |
|
||
- стр. 2 - Краткий курс - Самоучитель - AVR - быстрый старт с нуля.
Почему AVR ? Главное по устройству МК. Внешние сигналы. Как МК решает, что на ножке: "1" или "0" Ножки - выводы МК - какие они бывают.
- возможностями заложенными производителем - электроникой подключенной к МК - программой которую в него загрузите ВЫ
!
Что такое
AVR
?
Вот
ознакомительная статья: Знакомьтесь,
господа: AVR !
Там перечень AVR'ов и ДатаШиты
Почему
AVR
? AVR имеют развитую периферию, т.е. набор аппаратуры окружающей процессор-вычислитель в одном корпусе МК или набор встроенных в МК электронных устройств, блоков, модулей.
Вот
основные параметры AVR - тактовая частота до
20 МГц ; Существуют AVR-ы
со встроенными интерфейсами USB, CAN Есть специализированные МК AVR для управления электроприводом электродвигателями - серия AT90PWMxxxx - пример на стр. 1
Очень важный, Добрый совет вам : Вы начинающий и наверно благоразумно не планируете делать сразу серийное коммерческое устройство, а хотите использовать МК для любительских штучных изделий, тогда : Используйте в ваших устройствах какой-то один и тот же "многоногий" МК AVR серии ATmega
Желательно
один из этих: - они
позволяют выполнить любую задачу
любительского уровня (и многие - они поддерживаются симуляторами электронных устройств на AVR - VMLAB (о нем чуть позже и подробней) и супер-пупер симулятором PTOTEUS (он кстати позволяет симулировать и другие МК семейств PIC, 8051, ARM7, Motorola). - они имеют достаточно оперативной памяти и памяти для вашей программы - они имеют много выводов (ножек) - это очень удобно ! - они имеют
встроенный RC генератор и могут работать
без внешнего кварца - достаточно подать
питание на новый МК и он "затикает" !
Используйте
один и тот же МК Вы сможете: - хорошо изучить его устройство и особенности - распечатать важные страницы ДатаШита - не тратить
каждый раз время на изучение особенностей другого
МК, - у вас будут
накапливаться куски программ уже
проверенных вами - вам будет
ВСЕГДА хватать ножек (выводов) МК и памяти
для программы Вам будет
ОЧЕНЬ удобно работать ! Это важно для уверенного старта.
Вы будете знать всего один МК , Но будете знать его очень хорошо !
Описание AVR ATmega на русском языке смотрите на GAW.ru
Спрашивают
:
А вот зачем: Примените МК в простом устройстве ! - функции которого достаточно просты для алгоритмизации ( наглядного, формального описания действия устройства) и у Вас наверняка все получится! Вам будет легче пробовать
свои силы на чем то легком, понятном а
затем переходить к более сложным
задачам.
Микроконтроллер (МК)
Напомню:
Самая подробная и полная информация Он доступен в оригинале и на русском языке. Подробнее об основах и тонкостях устройства МК AVR и работе с ними читайте в книгах : - Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel - Микроконтроллеры AVR от простого к сложному - Микроконтроллеры это же просто и еще:
об основах и тонкостях электроники и
схемотехники П.Хоровиц,
У.Хилл. Искусство схемотехники - общепризнанная
Я уже предупреждал вас выше: МК является микросхемой которая в ответ на внешние электрические сигналы действует в соответствии с возможностями заложенными производителем, электроникой подключенной к МК, программой которую в него загружена, например вами.
Разберем по пунктам:
Внешние электрические сигналы Это напряжения и токи поступающие к МК
от подключенных к Важнейший из них - это напряжение питания МК. МК AVR серии ATmega могут работать, т.е. исполнять заложенную в них программу уже при подаче одного напряжения питания, а узнать о том что он работает мы можем по изменению тока потребляемого МК по проводу питания.
Диапазон
допустимых напряжений питания указан
на первой странице ДШ Хотя в
настоящее время есть отчетливая
тенденция на переход в целях Для МК ATmaga с
буквой L в названии диапазон питания
2.7 - 5.5 вольт - он шире (достаточно
литиевой батарейки или двух пальчиковых)
но зато максимальная частота
тактирования МК в 2 раза ниже и обычно
составляет 8 МГц.
Электрические
сигналы это токи
и вызываемые их протеканием напряжения. Но говоря о сигналах поступающих в МК мы рассматриваем их как некоторые напряжения измеряемые относительно ножек GND МК. Любой электрический сигнал
является аналоговым т.е.
имеет
определенное значение в каждый момент
времени и если он был 2 вольта а стал
ВАЖНО ! В цифровой технике приняты
некоторые правила по которым можно
представить аналоговый сигнал
допустимый для подачи на ножку МК (он
должен быть выше -0.3 вольт и ниже чем
напряжение питания МК увеличенное на 0.3
вольта) как 1-битный цифровой сигнал или как "1" - высокий логический уровень (ВЛУ) - логическая единица или "0" - низкий логический уровень (НЛУ) - логический ноль
Эти правила для ножек МК
которые могут быть входами (и кроме XTAL1 и
RESET)
График 181 из ДШ на МК ATmega16 Показывает зависимость порогового (Threshold) напряжения переключения из "0" в "1" от напряжения питания МК.
Очень важно правильно понять этот график ! Он означает следующее: Если МК считал напряжение на ножке (левая вертикальная шкала графика) логическим нулем и это напряжение было ниже линии графика, то при достижения напряжением на ножке этой линии графика - МК начинает считать что теперь на ножке присутствует логическая единица - "1" Значит теперь в регистре PINX порта_Х которому принадлежит эта ножка соответствующий ей бит стал "1" - единицей (а был "0" - нулем) Это типовое
значение ! т.е. наиболее вероятное
для вашего МК. Но есть еще и гарантированное значение напряжения при превышении которого МК будет считать, что на ножке появилось напряжение соответствующее логической единице. Оно равно 60% от напряжения питания МК - для 5 вольт это будет 3 вольта. Запомните ! (на носу зарубать не обязательно !) Что бы быть уверенным что МК AVR (питающийся от 5 вольт) воспримет входной сигнал (входное напряжение) как "1" вы должны позаботится о том что бы это напряжение было не ниже чем 3 вольта !
График 182 из ДШ на МК ATmega16 Показывает зависимость порогового (Threshold) напряжения переключения из "1" в "0" от напряжения питания МК.
Он означает следующее: Если МК считал напряжение на ножке логической единицей и оно было выше линии графика, то при снижении напряжения на ножке МК до линии графика - МК начинает считать что теперь на ножке присутствует логический ноль - "0" Значит теперь в регистре PINX порта_Х которому принадлежит эта ножка соответствующий ей бит стал "0" - нулем - НЛУ (а был "1" - ВЛУ) Это типовое
значение ! т.е. наиболее вероятное
для вашего МК. Но опять существует гарантированное значение напряжения ниже которого МК будет считать, что на ножке появилось напряжение соответствующее логическому нулю. Оно равно 20% от напряжения питания МК - для 5 вольт это будет 1 вольт. Запоминайте
! Что бы быть уверенным что МК AVR (питающийся от 5 вольт) воспримет входной сигнал (входное напряжение) как "0" вы должны позаботится о том что бы это напряжение было не выше 1 вольта !
Возникает вопрос - а чем будет считать МК сигнал 1.7 или скажем 1.46 вольта ? т.е. как МК интерпретирует напряжение на ножке между рассмотренными выше пороговыми уровнями ? Это зависит от того чему был равен соответствующий этой ножке бит в регистре PIN_X (т.е. от того каким ЛУ считал МК напряжение на ножке) до появления напряжения попадающего между двумя порогами переключения - и по приведенным выше двум правилам - этот бит не может изменится !
Важный вывод - любое изменение напряжения на ножке МК лежащее между двумя пороговыми напряжениями не ведет к изменению того каким логическим уровнем считает МК напряжение на этой ножке в данный момент ! Внимательно прочитайте и поймите, запомните - все входные сигналы с ножек МК поступают на встроенные триггеры Шмитта (аналогичные двум последовательно включенным элементам микросхемы 74HC14) - это устройства имеющие гистерезис (иначе - разность напряжений) по входному напряжению переключения их выходов из "1" в "0" и наоборот. По графику 183 в AVR гистерезис составляет примерно 0.57 вольта при VCC 5 вольт
Гистерезис по входному напряжению позволяет отсечь помеху (существующую во входном сигнале и/или наводку - напряжение создаваемое внешними электромагнитными полями в проводнике подводящем сигнал ко входу приемника - в нашем случае к ножке МК) с размахом до величины гистерезиса и четко распознать преобразовать в логические единицы и нули зашумленный цифровой сигнал.
размах сигнала, напряжения, тока, другой величины - это разность максимального и минимального значений.
Подробнее
об основах и тонкостях электроники и
схемотехники П.Хоровиц,
У.Хилл. Искусство схемотехники - общепризнаная
Теперь вы знаете как AVR преобразует напряжения на его ножках в "1" или "0"
МК AVR ATmega имеет встроенный 8-ми канальный (АЦП)
Другие
важные для работы 1) сигнал сброса RESET - при "0" на этой ножке МК останавливает выполнение программы, содержимое регистров МК становится начальным (см. таблицу регистров в конце ДШ - в основном все биты нули) а все выводы становятся высокоомными входами (говорят: Z - состояние). После появления на этой ножке "1" и наличии питания МК - выполнение программы начнется с начала, как после включения питания МК Подробней см. в разделе "Resetting the AVR" ДШ. Эту ножку можно ни куда не подключать благодаря внутреннему резистору "подтягивающему" ( подающему ток от источника более высокого напряжения) ее к питанию МК, но я бы посоветовал не оставлять reset в воздухе а "заземлить" конденсатором 0.1 мкФ - а еще лучше и подключить к reset диод типа 4148 черточкой к + питания МК и параллельно диоду резистор 5-12 КОм.
2) питание аналоговой части МК, АЦП (входы ADC_x ) ножка AVCC - ее нужно соединить с выводом VCC питания МК даже если вы не предполагаете использовать АЦП. 3) опорное напряжение для АЦП (входы ADC_x ) ножка AREF - напряжение на ней должно быть от 2 вольт до напряжения питания МК. Напряжение на входах АЦП равное или превышающее AREF будет оцифровываться в код 1023 (давать результат АЦП равный 1023. Всегда желательно заземлять эту ножку конденсатором на 0.1 мкФ. Вы можете использовать внутренний источник опорного напряжения на 2,56 вольт. 4) ножки для подключения кварца или керамического резонатора XTAL1 XTAL2.
Нужен некоторый периодический сигнал в соответствии с которым МК сможет шагать по заложенной в него программе, кроме того тактовый сигнал нужен для работы периферии МК. Хотя МК ATmega
имеют встроенный источник тактовой
частоты RC-генератор (с завода он включен
на частоту 1 МГц обычно) и к этим выводам
можно ни чего не подключать, чаще требуется более точный источник
тактирования - наиболее популярный это
кварц - правильнее кварцевый
резонатор - его подключают между этими
ножками МК, а с самих ножек подключают
конденсаторы 22-33 пФ на землю.
Важно установить фьюзы (Fuses) в соответствии с параметрами нужного вам тактового сигнала и его источника. Читайте раздел ДШ "Sestem clock and Clock options" и таблицу 2. "device clocking options select"
Вот список
фьюзов МК ATmega128
Не пугайтесь! В большинстве МК их гораздо меньше. Список фьюзов для каждого МК удобно смотреть в диалоге настройки программирования компилятора CodeVisionAVR.
МК ATmega16 поставляется с такой комбинацией 6-ти фьюзов относящейся к источнику тактового сигнала - абзац "Default Clock Source" : SCEL 0001 SUT 10 Это означает - включен внутренний источник тактовой частоты - RC-генератор и генерируемая частота 1 МГц. По умолчанию включен интерфейс JTAG - поэтому 4 ножки в PORTC не доступны для обычного использования! Чтобы
отключить JTAG нужно изменить фьюз JTAGEN.
После этого
Есть еще выводы и для подключения очень точного но медленного часового кварца - обычно это маленький цилиндрик с двумя гибкими ножками, конденсаторы ему обычно не нужны, да и сам этот кварц нужен если вы хотите сделать например часы реального времени - т.е. он совсем не обязателен.
С
учетом занятости некоторых ножек МК под
конструктивно заданные функции,
количество выводов МК доступных вам МК
ATmega16 позволяет использовать 32 ножки Эти 32 ножки составляют 4 порта МК Порт в МК
- это 8 ножек или линий ввода-вывода (выводов
МК или IO или I-O или I/O) имеющие
индивидуальные номера от 0 до 7 и общую
букву A, B, C, D, ... отличающую этот порт от
других. Пример:
DDRB - значение битов в этом регистре определяет чем будет ножка этого порта с номером этого бита - начальное (при включении МК или после сброса) значение "0" - ножка вход если сделать бит = "1" (говорят: установить бит англ. set bit ) эта ножка станет выходом. сделать бит
= "0" - говорят: сбросить
или очистить бит англ.
clear bit PINB -
биты этого регистра показывают чем
("1" или "0") считает МК
напряжение на ножке порта с номером
этого бита. (этот регистр можно только
читать, записывать в него что либо
бесполезно). Правила по
которым МК определяет логический
уровень на ножках описаны выше. PORTB - бит
этого регистра нужно сделать "1" или
"0" что бы на ножке порта с номером
этого бита появился "1" или
"0". При этом такой же бит регистра DDRB
должен быть "1" - т.е. ножка должна
быть выходом. Если она
сконфигурирована как вход (т.е. её бит в
регистре DDRB очищен или равен нулю)
- то если очищен и соответствующий бит в
регистре PORB ножка будет
высокоимпедансным входом (Z-состояние) а
если бит в регистре PORB установлен, т.е.
равен "1" то включается "подтяжка"
(pull-up) высокоимедансного входа к +
питания МК через встроенный резистор
примерно 40 КОм - ножку как бы соединяют
таким
Вот таблица состояния ножки МК при условии
подключения допустимой нагрузки - т.е.
ток через ножку не превышает 20 мА и при не
активности аппаратуры МК использующей
данные
Аналогично для порта_C будут регистры: PORTC PINC DDRC
Подтяжку
на всех портах одновременно можно
отключить!
Ножки портов обозначаются в ДШ так: PB3 - ножка 3 порта_B PA0 - ножка 0 порта_A
Итак ... 32 ножки IO микроконтроллера ATmega16 могут быть программно и индивидуально сконфигурированы (и переконфигурированы по мере необходимости) как : 1) входы с высоким (более 10 МОм) входным сопротивлением (для напряжений от 0 до напряжения питания МК !) или Z-вход 2) входы по п 1) но с подключенным внутренним подтягивающим резистором на + питания МК (номинал резистора примерно 40 кОм) 3) как выходы способные обеспечить ток до 20 мА (но общий ток на порт только до 80 мА, а ток всех портов до 200 мА в DIP корпусе и до 400 мА в квадратном) Важно: эти 32 ножки МК имеют и дополнительное функциональное назначение описанное в ДШ и книгах - они являются входами-выходами (пишут: IO или I/O ) и для устройств периферии МК. И при активации какого либо периферийного устройства МК программой, соответствующие ножки МК автоматически конфигурируются (не всегда ! для PWM не автоматически. Подробней в ДШ) так как требуется для правильной работы этого устройства не зависимо от того как они были сконфигурированы ранее. А после отключения устройства их конфигурация станет такой что была задана последней по тексту программы. Подробнее в разделе "Alternate Port Functions" ДШ.
Предположим, что ножки RXD и TXD вы сконфигурировали как входы с подтяжкой (Inputs with pull-up) затем, по ходу работы, программа включила USART на прием (например данных с COM-порта ПК через преобразователь уровней интерфейса rs-232 MAX232) и сразу же ножка RXD станет просто входом (подтяжка уберется) и по ней будут приниматься данные в МК, а вот состояние TXD не изменится и будет доступно программе для изменения как любой другой из 32 линий IO. А вот если включить USART сразу и на прием и на передачу то ножка TXD станет выходом и не будет доступна изменению программой до выключения передатчика USART. После выключения USART ножки RXD и TXD снова станут входами с подтяжкой, если конечно в программе не было команд меняющих эту конфигурацию.
Назначение ножек можно изменять по ходу программы в соответствии с реализуемым алгоритмом - т.е. по вашему усмотрению.
Что делать если внешний сигнал значительно превышает диапазон напряжений допустимый для ножки МК ?
Чтобы выполнить это условие очевидно нужно между большим внешним сигналом и ножкой МК поставить какой то элемент на котором будет падать (поглощаться, гаситься) напряжение на которое входной сигнал выходит за диапазон допустимых напряжений для ножки МК. Простейший, обычный вариант - гасящий резистор ! Например для определения перехода напряжения сети 220 вольт через ноль (точнее близко к нулю) в системах тиристорного регулирования мощности на ножку МК подают напряжение фазы через два резистора (не чипы) включенных последовательно и имеющих общее сопротивление от 1 до 10 МОм. пример AppNote AVR182 Если при этом посмотреть осциллографом напряжение на ножке МК настроенной как Z-вход - мы увидим почти меандр (прямоугольный сигнал с равными длительностями "0" и "1" ) с размахом примерно на 0.7-0.9 вольт больше напряжения питания МК. Важно ! Очень ! Номинал гасящего (или токоограничивающего) резистора выбирается таким чтобы ток втекающий через него в МК не превышал тока потребляющего работающим МК . Иначе возникнет "паразитное питание" МК - этот ток будет повышать напряжение питания МК проходя на вывод VCC МК через встроенные в МК защитные диоды линий (ножек I-O) ввода-вывода. У каждой
ножки I/O (у других ножек не у всех) МК есть два защитных диода - один
катодом на VCC а второй анодом
Не надейтесь на серьезную защиту МК
этими диодами !
"паразитное питание" - возможно при питании МК стандартными стабилизаторами напряжения типа 7805 78L05 и т.п. так как они не "сопротивляются" повышению напряжения на их выходе внешним током! А вот при питании параметрическими стабилизаторами - например шунтирующий стабилизатор или резистор со стабилитроном - паразитное питание не возникнет ! но можно пожечь защитные диоды ... Если вы не
можете поставить большое гасящее
сопротивление,
Подробнее про правильное питание ( это очень важно ! ) устройства в целом и МК смотрите в АпНоутах в Книге и проектах. Про электро технические расчеты, о схемах деления напряжения, усиления сигнала и его ограничения - читайте в настольной книге электронщика: П.Хоровиц, У.Хилл. Искусство схемотехники
Другой вариант приведения входного сигнала к диапазону напряжений допустимых для МК (это называется нормирование) - применить усилитель с нужными параметрами.
|
ключевые слова:
программирование микроконтроллеров,
как написать программу для
микроконтроллера, обучение
программированию микроконтроллеров,
микроконтроллеры atmega128, как
запрограммировать микроконтроллер, как
прошить микроконтроллер, отладка
программы для AVR, моделирование работы
электронных схем, электронные проекты,
хобби, язык си для микроконтроллеров,
язык программирования си Основы
программирования (кнопочки, светодиоды)
Работа с портами. Прерывания и таймеры.
Основы ШИМ, программная и аппаратная
реализация. Сервоприводы. Работа с АЦП
Настройка и программирование UART Работа
с I2C Связь (UART, I2C, SPI) AT76C712 , AT76C713 , AT90CAN128 , AT90CAN128 Automotive , AT90CAN32 , AT90CAN64 , AT90PWM2 , AT90PWM3 , AT90S1200 , AT90S2313 , AT90S2323 , AT90S2343 , AT90S4433 , AT90S8515 , AT90S8535 , ATmega128 , ATmega1280 , ATmega1281 , ATmega16 , ATmega161 , ATmega162 , ATmega163 , ATmega164 , ATmega165 , ATmega168 , ATmega168 Automotive , ATmega169 , ATmega2560 , ATmega2561 , ATmega32 , ATmega323 , ATmega324 , ATmega325 , ATmega3250 , ATmega329 , ATmega3290 , ATmega406 , ATmega48 , ATmega48 Automotive , ATmega64 , ATmega640 , ATmega644 , ATmega645 , ATmega6450 , ATmega649 , ATmega6490 , ATmega8 , ATmega8515 , ATmega8535 , ATmega88 , ATmega88 Automotive , ATtiny11 , ATtiny12 , ATtiny13 , ATtiny15L , ATtiny2313 , ATtiny25 , ATtiny26 , ATtiny28L , ATtiny45 , ATtiny85 |
МикроКонтроллеры AVR Начинающим "с нуля"
|