Краткий курс - Самоучитель - AVR - быстрый старт с нуля

   
 


Советую читать курс с начала !

Страница   2                 /02.htm


Что такое Микроконтроллер (МК) ?

Почему AVR ? 

Главное по устройству МК. 

Внешние сигналы. 

Как МК решает, что на ножке: "1" или "0".

Ножки - выводы МК - какие они бывают.

  
Русский даташит ATmega128  найдете в низу этой страницы !

 

 

 

Страницы курса :   заглавная    1   2   3   4   5   6   7   8   9 (про PIC)

Задачи-упражнения курса по AVR  -   там
 
Скачать весь курс по AVR одним архивом на заглавной странице курса.

Книги и учебники по электронике скачать там

Электрический ток. Закон Ома
Последовательное и параллельное соединение проводников
Правила Кирхгофа для разветвленных цепей
Работа и мощность тока
Электронно-дырочный переход. Транзистор


Я (чайник !) считаю, что

МК - Микроконтроллер - это микросхема (чип, камень, IC) - которая в ответ на внешние электрические сигналы действует в соответствии с

- возможностями заложенными производителем 
- электроникой подключенной к МК
- программой которую в него загрузите ВЫ !



Возможность МК действовать по вашей программе - вот суть-соль МК.  Это главное отличие МК от "обычных" - НЕ программируемых микросхем.

Что такое  AVR ? 

Это семейство МК от компании ATMEL разработанных с учетом особенностей и удобства написания программ на языке Си.

Перечень Таблица параметров всех AVR ATmega ATtiny и ДатаШиты скачать

 

Почему  AVR ? 

Это не дорогие, широко доступные, надежные, простые, довольно быстро считающие (большинство инструкций выполняется за 1 такт - т.е. при кварце 10 МГц выполняется до 10 млн. инструкций в секунду !) микроконтроллеры. 

AVR имеют развитую периферию, т.е. набор аппаратуры окружающей процессор-вычислитель в одном корпусе МК или набор встроенных в МК электронных устройств, блоков, модулей.


Вот основные параметры AVR

- тактовая частота до 20 МГц ; 
- встроенный программируемый RC-генератор, частота 1, 2, 4, 8 МГц; 
- Flash-ПЗУ программ, программируемое в системе, 10 000 циклов перезаписи; 
- EEPROM данных (100 000 циклов)
- она не "забывает" при откл. питания

- внутреннее ОЗУ со временем доступа 1 такт; 
- 6 аппаратных команд умножения (для семейства mega); 
- развитая система адресации, оптимизированная для работы с С-компиляторами; 
- 32 регистра общего назначения (аккумулятора); 

- синхронный (USART) или асинхронный (UART)
(в mega64 и mega128 их по 2)
- синхронный последовательный порт (SPI); 
- двухпроводный интерфейс TWI, совместимый с интерфейсом I2C; 
- многоканальный PWM 8-, 9-, 10-, 16-битный ШИМ-модулятор; 

- 10-битный АЦП с дифференциальными входами; 
- программируемый коэффициент усиления перед АЦП  1, 10 и 200; 
- встроенный источник опорного напряжения 2,56 В; 
- аналоговый компаратор; 

- сторожевой таймер  - перезагружает МК при "зависании"; 
- настраиваемая схема задержки запуска после подачи питания; 
- схема слежения за уровнем напряжения питания; 

- JTAG-интерфейс для подключения эмулятора (в МК с объемом ПЗУ от 16 кбайт); 
- микропотребление (менее 100 мкА в активном режиме на частоте 32 кГц);
- датчик температуры (в ATtiny25 ATtiny45 ATtiny85).

Существуют AVR-ы со встроенными интерфейсами USB, CAN 
и со встроенными радио приемо-передатчиками

Есть специализированные МК AVR для управления электроприводом электродвигателями - серия AT90PWMxxxx - пример на стр. 1

 

 

Очень важный, Добрый совет вам : 

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

Используйте в ваших устройствах какой-то один и тот же "многоногий" МК AVR серии ATmega.   Желательно один из этих: 

ATmega16  - настоятельно рекомендую! Всего 90 рублей, просторный корпус DIP-40.

Скачать даташит ATmega16 

ATmega32, ATmega64 

ATmega128 - настоятельно рекомендую - 190 рублей, море ног и 128 Кб для программы - просторно !

- они позволяют выполнить любую задачу любительского уровня (и многие задачи профессионального уровня - это же серийный МК)  

- они поддерживаются симуляторами электронных устройств на AVR - VMLAB (о нем чуть позже и подробней) и супер-пупер симулятором PTOTEUS  (он, кстати, позволяет симулировать  и другие МК семейств PIC, 8051, ARM7, Motorola). 

- они имеют достаточно оперативной памяти и памяти для вашей программы  

- они имеют много выводов (ножек) - это очень удобно начинающему

- они имеют встроенный RC генератор и могут работать без внешнего кварца - достаточно подать питание на новый МК и он "затикает".

Используйте один и тот же МК и он станет вам "своим в доску"  - вы хорошо изучить его устройство и особенности

Реклама недорогих радиодеталей почтой:

- Распечатаете важные страницы ДатаШита

- Не будете тратить каждый раз время на изучение особенностей другого МК, на поиск "граблей" у "новичка" а будете работать с проверенным "другом"

- вам будет ВСЕГДА хватать ножек (выводов) МК и памяти для программы

У вас будут накапливаться куски программ уже проверенных вами именно на этом МК
 

Вам будет ОЧЕНЬ удобно работать ! 

Это важно для уверенного старта. 

Вы будете знать всего один МК, 
зато будете знать его очень хорошо !  


 

     
 

Не бойтесь многоногих ATmega с большим количеством "периферии"  (встроенных в МК, полезных, но возможно не нужных вам пока устройств с непонятными названиями).   Все они изначально - "по умолчанию" обычно отключены и о них можно не думать. 

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

Забегая вперед скажу
Настроить периферию микроконтроллера просто благодаря встроенным в компиляторы CVAVR и ICC  интерактивным визадам - мастерам начальной конфигурации МК и создающим начальный текст программы.

 

Если вы хотите, для начала, только помигать  светодиодом - то 
даже на ATmega128 вам нужно всего лишь подключить к МК :

- питание от 4 до 5.5 вольт (3 пальчиковых батарейки например) 

- 5 проводков на принтерный порт ПК для ISP "прошивания" программы в МК (подробнее об этом на стр. 7 курса

- светодиод  (катод - черточка на изображении диода на схеме) к ножке МК а анод светодиода к + питания МК через резистор 430-750 Ом ) 

- написать программу мигания светодиодом и загрузить (=прошить=прожечь) её в МК.   

Вас совершенно не тронет и не напряжет та "навороченность" 
что заложена в ATmega128. 

Она будет тихо ждать пока вы ее не затребуете !

 
     

 

 

Спрашивают : 

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

 

А вот зачем:

Примените МК в простом устройстве !  - функции которого достаточно просты для алгоритмизации ( наглядного, формального описания действия устройства) и у Вас наверняка все получится! 

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

 


Четкое понимание алгоритма работы устройства  это основа - базис для успешной разработки самого устройства и программы для МК !   ©

 

Микроконтроллер (МК)  
AVR  ATmega 
ключевые моменты устройства 

 

Напомню:
Самая подробная и полная информация по МК содержится в его ДШ !

Он доступен в оригинале и на русском ниже.

Подробнее об основах и тонкостях устройства МК AVR и работе с ними читайте в книгах :  

- Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel

- Микроконтроллеры AVR от простого к сложному

- Микроконтроллеры это же просто

 

Я уже предупреждал вас выше:

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

 

Разберем по пунктам: 

Внешние электрические сигналы 

Это напряжения и токи поступающие к МК от подключенных к 
нему компонентов электронного устройства.  

Важнейший из них - это напряжение питания МК. 

 

МК AVR серии ATmega могут работать, т.е. исполнять заложенную в них программу уже при подаче одного напряжения питания, а узнать о том, что он работает мы можем по изменению тока потребляемого МК по проводу питания. 

 

     
 

Казалось бы бесполезная какая то работа .

Ан нет ! 

МК может например измерять температуру встроенным датчиком и сохранять измеренные значения в память EEPROM которая "не забывает" данные при отключении питания.  

А позже можно считать сохраненные данные из памяти МК .

 
     

 

Диапазон допустимых напряжений питания указан на первой странице ДШ и составляет обычно 4.5 - 5.5 вольт постоянного напряжения - плюс которого подключается к выводам  VCC   МК. 

Хотя в настоящее время есть отчетливая тенденция на переход в целях экономии энергии к напряжению питания 3.3 вольта и ниже - я, ретроградно 

в курсе считаю напряжение питания МК  + 5 вольт.

Для МК ATmaga с буквой L в названии диапазон питания 2.7 - 5.5 вольт - он шире (достаточно литиевой батарейки или двух пальчиковых) но зато максимальная частота тактирования МК в 2 раза ниже и обычно составляет 8 МГц.  

     
 

Отрицательный вывод источника питания подключается к выводам МК  GND и его потенциал принимается за ноль вольт и относительно него измеряются все другие напряжения на ножках МК и в схеме

Проводник соединенный с выводами GND МК называют общим или нулевым или "земля" и на схеме обозначают специальным символом - например жирной горизонтальной черточкой или несколькими горизонтальными полосками друг под другом убывающей длины.

 
     

 

 

Электрические сигналы это токи и вызываемые их протеканием  напряжения

Но говоря о сигналах поступающих в МК мы? обычно, рассматриваем их как некоторые напряжения измеряемые относительно ножек GND МК. 

Любой электрический сигнал является аналоговым  т.е. имеет определенное значение в каждый момент времени и если он был 2 вольта а стал 4 вольта то он обязательно принимал все значения лежащие между 2-мя и 4-мя вольтами.

 

ВАЖНО  ! 

В цифровой технике приняты некоторые правила по которым можно представить аналоговый сигнал допустимый для подачи на ножку МК (он должен быть выше -0.5 вольт и ниже чем напряжение питания МК увеличенное на 0.5 вольта, я советую +- 0.3 вольта ) как 1-битный цифровой сигнал или как одно из двух значений: 

"1" - высокий логический уровень ( ВЛУ )  - логическая единица        

или

"0" - низкий логический уровень ( НЛУ ) - логический ноль

 

Эти правила для ножек МК, которые могут быть входами (но кроме XTAL1 и RESET) 
в МК AVR описаны в разделе ДШ "Electrical Characteristics" и иллюстрированы графиками :  

 

График 181 из ДШ на МК ATmega16 

Скачать даташит ATmega16 

Показывает зависимость порогового ( Threshold ) напряжения переключения из "0" в "1" от напряжения питания МК.

 


Очень важно правильно понять этот график ! 

Он означает следующее:  Если МК считал напряжение на ножке (левая вертикальная шкала графика) логическим нулем и это напряжение было ниже линии графика, то при достижения напряжением на ножке этой линии графика - МК начинает считать, что теперь на ножке присутствует логическая единица - "1"

Значит теперь в регистре PINX  порта_Х которому принадлежит эта ножка
соответствующий ей бит стал "1" - единицей (а был "0" - нулем)

Это типовое значение ! - т.е. наиболее вероятное для вашего МК. 
По графику при напряжении питания МК 5 вольт этот порог примерно 1.9 вольт в диапазоне температур от -40 до 85 градусов.

Но есть еще и гарантированное значение напряжения при превышении которого МК будет считать, что на ножке появилось напряжение соответствующее логической единице. 

Оно равно 60% от напряжения питания МК - для 5 вольт это будет 3 вольта.

Запомните !   ( на носу зарубать не обязательно ! )

Что бы быть уверенным что МК AVR (питающийся от 5 вольт) воспримет входной сигнал (входное напряжение) как "1" вы должны позаботится о том что бы это напряжение  было не ниже чем 3 вольта !  

 

Уточняйте в разделе ДШ "Electrical Characteristics" для вашего МК !

 

     
 

Значение в регистре PINX обновляется с задержкой примерно в 1.5 длительности тактового сигнала МК.
 

 
     

 

График 182 из ДШ на МК ATmega16 

Показывает зависимость порогового ( Threshold ) напряжения переключения из "1" в "0" от напряжения питания МК.

 

Он означает следующее:  Если МК считал напряжение на ножке логической единицей и оно было выше линии графика, то при снижении напряжения на ножке МК до линии графика - МК начинает считать что теперь на ножке присутствует логический ноль - "0"

Значит теперь в регистре PINX порта_Х которому принадлежит эта ножка соответствующий ей бит стал "0" - нулем - НЛУ (а был "1" - ВЛУ)

Это типовое значение !  т.е. наиболее вероятное для вашего МК. 
По графику при напряжении питания МК 5 вольт этот порог примерно 1.3-1.4 вольта в диапазоне температур от -40 до 85 градусов.

Но опять существует  гарантированное значение напряжения ниже которого МК будет считать, что на ножке появилось напряжение соответствующее логическому нулю.  

Оно равно 20% от напряжения питания МК - для 5 вольт это будет 1 вольт.

Запоминайте !  
(а лучше запишите на бумаге ! моторная память !)

Что бы быть уверенным что МК ATmega16 (питающийся от 5 вольт) воспримет входной сигнал (входное напряжение) как "0" вы должны позаботится о том что бы это напряжение  было не выше 1 вольта !   

 

 

     
 

Запомните: 

Напряжение на ножке выше чем 60% напряжения питания МК гарантировано воспринимается им как ВЛУ или "1" - высокий логический уровень

Напряжение на ножке ниже чем 20% напряжения питания МК гарантировано воспринимается им как НЛУ или "0" - низкий логический уровень

Эти пороговые уровни для напряжения питания 5 вольт будут 3 и 1 вольт

Это справедливо для диапазона напряжений 
питания VCC = 2.7
-5.5V

 
     

 

У многих AVR гарантированный "0" это напряжение ниже 30% напряжения питания !   Уточняйте в разделе ДШ "Electrical Characteristics"
для используемого вами МК !

 

 

Возникает вопрос - а чем будет считать МК сигнал 1.7 или скажем 1.46 вольта? т.е. как МК интерпретирует напряжение на ножке между рассмотренными выше пороговыми уровнями ? 

Это зависит от того чему был равен соответствующий этой ножке бит в регистре PIN_X (т.е. от того каким ЛУ считал МК напряжение на ножке) до появления напряжения попадающего между двумя порогами переключения  - и по приведенным выше двум правилам - этот бит не может изменится !

 

Важный вывод - любое изменение напряжения на ножке МК лежащее между двумя пороговыми напряжениями не ведет к изменению того каким логическим уровнем считает МК напряжение на этой ножке в данный момент !  

Внимательно прочитайте и поймите, запомните - все входные сигналы с ножек МК поступают на встроенные триггеры Шмитта (аналогичные двум последовательно включенным элементам микросхемы 74HC14) - это устройства имеющие гистерезис (иначе - разность напряжений) по входному напряжению переключения их выходов из "1" в "0" и наоборот. 

По графику 183 в AVR гистерезис составляет примерно 0.57 вольта  при VCC 5 вольт 

 

Гистерезис по входному напряжению позволяет отсечь помеху (существующую во входном сигнале и/или наводку - напряжение создаваемое внешними электромагнитными полями в проводнике подводящем сигнал ко входу приемника - в нашем случае к ножке МК) с размахом до величины гистерезиса и четко распознать преобразовать в логические единицы и нули зашумленный цифровой сигнал.

Размах сигнала, напряжения, тока, другой величины - это разность максимального и минимального значений.

 

     
 

Если подключить двух лучевой осциллограф ко входу и выходу триггера Шмитта и подать на его вход смесь цифрового сигнала размахом 4-5 вольт и шумового сигнала размахом чуть меньше гистерезиса - мы увидим следующую картину:

На входе тригера Шмитта будет черти что в котором будет угадываться цифровой сигнал а на выходе будет чистенький прямоугольный цифровой сигнал !

Вы можете смоделировать это в PROTEUS или в MicroCAP

 
     

Подробнее об основах и тонкостях электроники и схемотехники 
читайте в книге оглавление которой на заглавной странице.

 

Теперь вы знаете как AVR преобразует напряжения на его ножках в логические уровни "1" или "0". 
 

     
 

МК AVR ATmega имеет встроенный (АЦП) Аналого Цифровой Преобразователь  -  он позволяет преобразовать напряжение на ножках МК подключаемых к АЦП в число от 0 до 1023  - т.е.  в 10 битный результат !

 
     

 

Реклама недорогих радиодеталей почтой:

 

Другие важные для работы 
МК внешние сигналы : 

1)  сигнал сброса RESET - при "0" на этой ножке МК останавливает выполнение программы, содержимое регистров МК становится начальным (см. таблицу регистров в конце ДШ - в основном все биты нули) а все выводы становятся высокоомными входами (говорят: Z - состояние).  

После появления на этой ножке "1" и наличии питания МК - выполнение программы начнется с начала, как после включения питания МК    Подробней см.  в разделе "Resetting the AVR" ДШ.  Эту ножку можно ни куда не подключать благодаря внутреннему резистору "подтягивающему" (подающему ток от источника более высокого напряжения) ее к питанию МК, но 

я бы посоветовал не оставлять reset в воздухе а "заземлить" конденсатором 0.1 мкФ - а еще лучше и подключить к  reset диод типа 4148 черточкой к + питания МК и параллельно диоду резистор 5-12 КОм.

 

     
 

Запомните: Черточка над названием сигнала: 

SIGNAL 

означает что активный уровень этого сигнала  "0" - т.е. событие соответствующее ему происходит при НЛУ.

Косая черта / может означать в описании бита :  

R/W  - если бит "1" режим R а если бит "0" режим W

R/W  - может еще означать возможность записи и чтения этого бита

Это условные обозначения - значит может быть и не так !

 
     

 

2) питание аналоговой части МК, АЦП (входы ADC_x ) ножка AVCC - ее нужно соединить с выводом VCC питания МК даже если вы не предполагаете использовать АЦП.

3) опорное напряжение для АЦП  (входы ADC_x ) ножка AREF - напряжение на ней должно быть от 2 вольт до напряжения питания МК.  Напряжение на входах АЦП равное или превышающее AREF  будет оцифровываться в код 1023 (давать результат АЦП равный 1023.   Всегда желательно заземлять эту ножку конденсатором на 0.1 мкФ.     Вы можете использовать внутренний источник опорного напряжения на 2,56 вольт. 

4) ножки для подключения кварца или керамического резонатора XTAL1 XTAL2. 

 

 


Для работы МК необходим
ритм
или тактирование.    

Нужен некоторый периодический сигнал в соответствии с которым МК сможет шагать по заложенной в него программе, кроме того тактовый сигнал нужен для работы периферии МК.  

Хотя МК ATmega имеют встроенный источник тактовой частоты RC-генератор (с завода он включен на частоту 1 МГц обычно) и к этим выводам можно ни чего не подключать, чаще требуется более точный источник тактирования - наиболее популярный это кварц - правильнее кварцевый резонатор - его подключают между XTAL1 и XTAL2, эти ножки заземляют конденсаторами 22-33 пФ на GND

 

Важно установить фьюзы (Fuses) в соответствии с параметрами нужного вам тактового сигнала и его источника. 

Читайте раздел ДШ "Sestem clock and Clock options" и
таблицу 2. "device clocking options select" - по-русски НИЖЕ !

 

     
 

FUSE (фьюз) - Это, в общем, обычный бит в регистрах фьюзов  

Но программа МК не может их изменить! Вы можете менять их только программатором.

Фьюз "запрограммирован" - его значение "0"

Фьюз "НЕ запрограммирован" - его значение "1"

С завода МК поставляется с определенной комбинацией
фьюзов - все указано в ДШ.


Будьте внимательны с фьюзами ! 

Прежде чем менять фьюзы определите точно что вы делаете ! 

Иначе вы можете по ошибке отключить режим ISP программирования и МК можно будет перепрограммировать только специальным программатором.

 
     


Список фьюзов для каждого МК удобно смотреть и устанавливать их состояние в диалоге настройки программирования компилятора CodeVisionAVR.
 

МК ATmega16 поставляется с такой комбинацией 6-ти фьюзов относящейся к
источнику тактового сигнала - абзац "Default Clock Source" :  

SKSEL 0001     SUT 10   

Это означает - включен внутренний  источник тактовой частоты - RC-генератор
и генерируемая частота 1 МГц.

Подробней о фьюзах Fuse AVR на стр. 7 курса - "Всё о прошивании AVR"    и внизу этой страницы !

 

По-умолчанию в МК ATmega16 включен
интерфейс JTAG - поэтому 4 ножки в PORTC
не доступны
для обычного использования!
  

Чтобы отключить JTAG нужно изменить фьюз JTAGEN в "1".

JTAG можно выключить и программно - для этого нужно два раза подряд вписать "1" в бит JTD  в регистре MCUCSR в течении 4 тактов МК. Чтобы опять включить JTAG  нужно два раза подряд вписать "0" в бит JTD

 

Скачать даташит ATmega16 

 


Если вам нужно тактировать МК внешним сигналом (например от другого МК в системе или какой либо микросхемы имеющий собственное тактирование) то его нужно подать на  ножку XTAL1 , а ножку XTAL2 оставить свободной. 

Параметры такого сигнала см. в ДШ.

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

 

 

С учетом занятости некоторых ножек МК под конструктивно заданные функции, количество выводов МК доступных вам для использования меньше чем имеет МК !

МК ATmega16 позволяет использовать 32 ножки из 40 в корпусе DIP.  

Эти 32 ножки составляют ( сгруппированы в ) 4 порта МК

 

Порт в МК   это 8 ножек или линий ввода-вывода (выводов МК или IO или I-O или I/O) имеющие индивидуальные номера от 0 до 7 и общую букву A, B, C, D, ... отличающую этот порт от других. 

 

Пример для  PORTB

Порт_B имеет (как и другие порты МК) минимум 3 регистра :

DDRB - значение битов в этом регистре определяет чем будет ножка этого порта с номером этого бита  - начальное (при включении МК или после сброса) значение "0" - ножка вход  если сделать бит = "1" (говорят: установить бит  англ. set bit ) эта ножка станет выходом.

сделать бит = "0" - говорят: сбросить или очистить бит  англ. clear bit 

PINB  - биты этого регистра показывают чем ("1" или "0") считает МК напряжение на ножке порта с номером этого бита. (этот регистр в ATmega16 нужно только читать, записывать в него что либо бесполезно).

 

     
 

ВНИМАНИЕ !

В микроконтроллерах AVR старой серии AT90s и в ATmega8, -16, -32, -48, -64, -88, -128, -168 имеет смысл только читать из регистров PINx
 

В микроконтроллерах ATtiny2313, ATtiny13, ATtiny25, ATtiny45 в других ATtiny в AT90PWM2, AT90PWM3, в AT90USB, в ATmega640, 1280, 1281, 2560, 2561   Запись "1" в бит регистров PINx вызывает изменение соответствующего бита в PORTx

Вывод этих контроллеров можно переключать очень
быстро - с частотой тактового сигнала !

Уточняйте по даташиту в разделе описания регистров портов. 

 
     

 

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

 

 

PORTB - бит этого регистра нужно сделать "1" или "0" что бы на ножке порта с номером этого бита появился  "1" или "0". При этом такой же бит регистра DDRB  должен быть "1" - т.е. ножка должна быть выходом.  Если она сконфигурирована как вход (т.е. её бит в регистре DDRB  очищен или равен нулю)  - то если очищен и соответствующий бит в регистре PORTB ножка будет высокоимпедансным входом (Z-состояние, вход с очень высоким входным сопротивлением более 10 МОм), а если бит в регистре PORTB установлен, т.е. равен "1" то включается "подтяжка" (pull-up) высокоимпедансного входа к  плюсу питания МК через встроенный резистор примерно 40 КОм - ножку как бы соединяют таким резистором с питанием МК.

 

Вот упрощенная (без учета дополнительных функций этого вывода)
схема вывода  PB1 поясняющая логику его работы:


Напряжение на выводе PB1  преобразуется в логические уровни "1" или "0" которые можно прочитать (с задержкой в 1.5 такта) в регистре PINB  это бит_1 или  PINВ.1  в CVAVR

Бит_1 в регистре  DDRB  управляет переключателем - на рисунке переключатель показан в положении бит_1 равен "0". Диод на схеме идеальный - значит если бит_1 в PORTB будет тоже равен "0" то вывод PB1 будет высокоомным входом.

А если  бит_1 в PORTB сделать "1" то вывод PB1 через диод и резистор 40 КОм подключится к питанию МК - т.е. станет входом с подтяжкой.

Если бит_1 в регистре  DDRB  сделать "1" переключатель изменит состояние и значение бит_1 в PORTB будет выводится прямо на PB1 - теперь это будет просто выход.

 

     
 

" Подтяжку " (pull-up) можно использовать для создания четкой
лог. "1" на ножке-входе МК без внешних компонентов. 

К такому входу вы можете подключить кнопку замыкающую его на  "общий" провод устройства - GND - при нажатии. При отпущенной кнопке на входе будет "1" и соответствующий бит в регистре PINx тоже будет "1".  При нажатии кнопки ее контакты замкнут вход на GND и на нем станет "0" - соответственно и в PINx  появится "0" и ваша программа сможет прочитав PINx определить что кнопка нажата.

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

Внимание !  Подтяжку на всех портах одновременно можно отключить! 
Для этого нужно установить бит PUD в регистре SFIOR
 

 
     

 


Таблица состояния вывода AVR 

при условии подключения допустимой нагрузки - т.е. ток через ножку не
превышает 20 мА и при не активности аппаратуры МК использующей данные 
ножки для своей работы. 

Значение бита_х Состояние 
вывода МК
Программа может только читать этот бит ! (Отличия для некоторых МК описаны выше) Программа управляет 
этими битами
PBx
PINB.x DDRB.x PORTB.x
1 1 1 Высокий лог. уровень (вывод как бы подсоединен к питанию МК резистором 
около 20 Ом)
0 0 Низкий лог. уровень (вывод как бы заземлен 
резистором 
около 20 Ом)
определяется 
только реальным напряжением 
на ножке МК !


Напряжение 
преобразуется в "1" 
или "0" по  приведенным 
выше правилам.
0 1 Подтяжка - pull-up.
Вывод как бы подсоединен к питанию МК 
через 
резистор 40 КОм
0


Z-состояние.

ВысокоОмный вход

Эта таблица-пример для PORTB . Аналогично для порта_C будут
регистры:
PORTC  PINC  DDRC  


Не оставляйте не подключенными выводы в Z-состоянии !
 

Ножки портов обозначаются в ДШ так: 

PB3 - ножка 3 порта_B            PA0 - ножка 0 порта_

 

 

 

Итак ... 

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 снова станут входами с подтяжкой, если конечно в программе не было команд меняющих эту конфигурацию.

 

 

Назначение ножек можно изменять по ходу программы в соответствии с реализуемым алгоритмом - т.е.
по вашему усмотрению.

 

 

 

     
 

Советую:  

1) для того чтобы не повредить (не пожечь) выводы МК - подключайте их через резисторы 200 - 360 Ом (если это допустимо по схеме - в большинстве случаев это так) - эти резисторы ограничат ток через вывод МК на допустимом уровне при замыкании элементов схемы на питание или землю.

Когда устройство будет отлажено, эти резисторы можно исключить, 
а можно и оставить - я оставляю

2) Не подключаемые (не используемые) в вашей схеме ножки МК рекомендуется сделать входами с подтяжкой - это не позволит ножке хаотично менять свое напряжение под действием внешних помех. 

Такое беспорядочное изменение напряжения вызывает дополнительное потребление тока на внутренние переключения в МК и часто вызывает недоумение большим током потребления в спящем режиме работы МК.

Если в программе вы используете режимы пониженного энергопотребления
то сделайте неиспользуемые ножки IO входами и соедините их с GND.

Не оставляйте не подключенными выводы в Z-состоянии !

Я обычно стараюсь развести неиспользуемые "подтянутые" ножки на отдельный разъем на плате - сам разъем можно не паять - но в случае необходимости вы сможете легко впаять его и так задействовать эти выводы МК.

 
     

 

 

Что делать если внешний сигнал превышает диапазон напряжений допустимый для ножки МК ?

 

     
 

Ответ прост : 

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

Этот диапазон я указал выше.

 
     

 

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

Простейший, обычный вариант - гасящий резистор ! или делитель напряжения из 2 резисторов.

Например для определения перехода напряжения сети 220 вольт через ноль (точнее близко к нулю) в системах тиристорного регулирования мощности на ножку МК подают напряжение фазы через два резистора ( не чипы, напряжение не должно превышать допустимое для резистора ) включенных последовательно и имеющих общее сопротивление от 1 до 10 МОм. 

пример AppNote AVR182 

Если при этом посмотреть осциллографом напряжение на ножке МК настроенной как Z-вход - мы увидим почти меандр (прямоугольный сигнал с равными длительностями "0" и "1" ) с размахом примерно на 0.7-0.9 вольт больше напряжения питания МК.

 

Важно !  Очень !

Номинал гасящего (или токоограничивающего) резистора выбирается таким чтобы ток втекающий через него в МК не превышал тока потребляющего работающим МК .

Иначе возникнет "паразитное питание" МК - этот ток будет повышать напряжение питания МК проходя на вывод VCC МК через встроенные в МК защитные диоды линий (ножек I-O) ввода-вывода.

У каждой ножки I/O (у других ножек не у всех) МК есть два защитных диода - один катодом на VCC а второй анодом на GND.  

Не надейтесь на серьезную защиту МК этими диодами  - ток через них не должен превышать 1 мА .

 

     
 

Так как в ДШ не уазан этот ток - я спросил об этом ATMEL

вот их ответ : 

Dear customer,

1mA (continuous) max is what we recommend. 

And if this is your next question... 

no a peak value higher than this has not been specified,
this would be dependent on many parameters including pulse shape,
duration, repeat frequency and temperature.

Best Regards

Ragnar Lindqvist

Atmel AVR Technical Support 

 
     

 

 


Ток ограничивают токо-ограничительными резисторами.

 

"паразитное питание"  - возможно при питании МК стандартными стабилизаторами напряжения типа 7805  78L05 и т.п. так как они не "сопротивляются" повышению напряжения на их выходе внешним током! 

А вот при питании параметрическими стабилизаторами - например шунтирующий стабилизатор типа TL431 или резистор со стабилитроном - паразитное питание не возникнет !  но можно пожечь защитные диоды ...



Если вы не можете поставить большое гасящее сопротивление
то поставьте максимально допустимое, затем стабилитрон на напряжение чуть ниже напряжения питания МК - при питании 5 вольт подойдут стабилитроны типа  - 1N4730  1N4731  1N4732.  От стабилитрона на ножку МК поставьте резистор 1 КОм.  

 

Подробнее про правильное питание ( это очень важно ! ) устройства в целом и МК смотрите в АпНоутах в Книгах и проектах.

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

 

Другой вариант приведения входного сигнала к диапазону напряжений допустимых для МК (это называется нормирование) - применить усилитель с нужными параметрами. Пример там.

 


     
 

Записывайте возникающие вопросы ! 
                               и лучше на бумагу - моторная память !

- найдите в DataSheet (ДШ) регистры и устройства МК о которых 
шла речь, прочитайте о  них подробней.

- если вопросы остались перечитайте материал снова !

- если вопросы не разрешены, ищите ответ:

1) поиском GOOGLE по Краткому КурсуAVR в on-line

2) поиском Windows в папке где сохранен у вас курс. 

3) в моем не структурированном AVRFAQ - это сборник ответов на часто задаваемые мне по курсу вопросы и советы по применению 
МК от знающих людей.

4) в АпНоутах

5) в книгах по AVR  и  МК

 

Если все же не найдете ответа

задавайте вопрос в конференцию 

Вам ответят в течении дня, если вы правильно, на нормальном русском языке, сформулируете ваш вопрос и напишите его в заголовке сообщения. 

 

 

 

 


 

 

 

  Дальше ->  страница 3

"Выходные сигналы"

 

 

 

Назад,   на стр. 1       

 

Советую почитать и то, что написано ниже !

 

 

 

 

 

 



 

          

 
 
ключевые слова: программирование микроконтроллеров, как написать программу для микроконтроллера, обучение программированию микроконтроллеров, микроконтроллеры 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


 

 

ATmega128, ATmega128L

8-разрядный AVR-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт

Перевод технического паспорта ( даташита ) на русский язык.

  1. Общее описание
  2. Ядро центрального процессорного устройства AVR
  3. Память
  4. Интерфейс внешней памяти
  5. Системная синхронизация и тактовые источники
  6. Внешняя синхронизация
  7. Управление энергопотреблением и режимы сна
  8. Системное управление и сброс
  9. Прерывания
  10. Порты ввода-вывода
    - Порты в качестве универсального цифрового ввода-вывода
    - Альтернативные функции порта
    - Описание регистров портов ввода-вывода
  11. Внешние прерывания
  12. Аналоговый компаратор
  13. 16-разр. таймеры-счетчики 1 и 3
    - Доступ к 16-разрядным регистрам
    - Тактовые источники таймера-счетчика 1/3
    - Блок счетчика
    - Блок захвата
    - Блоки сравнения
    - Блок формирования выходного сигнала
    - Режимы работы
  14. Временные диаграммы 16-разрядных таймеров-счетчиков
  15. Описание регистров 16-разрядных таймеров-счетчиков
  16. Предделители таймеров-счетчиков 1, 2 и 3
  17. Аналогово-цифровой преобразователь
  18. Интерфейс JTAG и встроенная отладочная система
  19. Модулятор выходов таймеров (OCM1C2)
  20. Последовательный периферийный интерфейс - SPI
    - Функционирование вывода SS
  21. 8-разр. таймер-счетчик 0 с функциями ШИМ и асинхронного тактирования
    - Блок формирования выходного сигнала
    - Временные диаграммы таймера-счетчика 0
    - Описание регистров 8-разрядного таймера-счетчика 0
    - Асинхронная работа таймера-счетчика 0
    - Предделитель таймера-счетчика 0
  22. УСАПП
    - Генерация тактовых импульсов
    - Форматы посылки
    - Инициализация УСАПП
    - Передача данных - Передатчик УСАПП
    - Прием данных - Приемник УСАПП
    - Асинхронный прием данных
    - Многопроцессорный режим связи
    - Описание регистров УСАПП
    - Примеры установок скоростей связи
  23. Двухпроводной последовательный интерфейс TWI
    - Формат посылки и передаваемых данных
    - Системы многомастерных шин, арбитраж и синхронизация
    - Обзор модуля TWI
    - Описание регистров TWI
    - Рекомендации по использованию TWI
    - Режимы передачи
  24. Программирование памяти
    - Параллельное программирование
    - Последовательное программирование
    - Программирование через интерфейс JTAG
  25. Электрические характеристики
    - Требования к характеристикам внешнего тактового сигнала
    - Характеристики двухпроводного последовательного интерфейса
    - Характеристики временной диаграммы SPI
    - Предварительные данные по характеристикам АЦП
    - Временная диаграмма внешней памяти данных
  26. Типовые характеристики ATmega128: предварительные данные
    - Типовые характеристики ATmega128: предварительные данные (продолжение)
    - Типовые характеристики ATmega128: предварительные данные (продолжение)
  27. Сводная таблица регистров
  28. Набор инструкций
  29. Информация для заказа

 

 

 

 

AVR-микроконтроллеры

аппаратные возможности

http://www.compitech.ru/html.cgi/arhiv/03_04/stat_112.htm

За время своего относительно недолгого существования (с 1997 года) микроконтроллеры семейства AVR (серия AT90S) фирмы Atmel Corp. приобрели чрезвычайную популярность в мире и в России. 2001 год стал переломным более половины российских разработок с использованием 8-разрядных микроконтроллеров было создано именно на AVR. На сегодняшний день продолжается развитие в том же направлении. Это легко объяснить: благодаря очень удачной архитектуре ядра процессора и широкому набору периферийных модулей на кристалле существенно облегчается процесс программирования конечного устройства. Еще одним фактором, привлекательным для разработчиков, стал выпуск в 2002 году AVR-микроконтроллеров следующего поколения. Эти микросхемы производятся по технологическим нормам 0,35 мкм, в отличие от первых AT90S, выпускающихся по технологии 0,5 мкм. Заметное отличие - увеличенная в два раза тактовая частота новых контроллеров - 16 МГц, обеспечивающая производительность до 16 MIPS, (типовая команда у AVR-контроллеров выполняется за один период тактовой частоты), но это, как говорится, вершина айсберга.

 

Фирма ATMEL ежегодно устраивает семинары для дистрибьюторов. Обычно семинар проходит в течение 5 рабочих дней. На семинаре,который проходил в конце марта 2003 года, AVR-микроконтроллерам было выделено более полутора дней — больше, чем любому другому направлению.Основную информацию по этим микроконтроллерам представлял Ингар Фредриксен (Ingar Fredriksen)(рис.1) из норвежского отделения ATMEL (стоит напомнить, что ядро этих RISC-микроконтроллеров разработали 2 норвежца, имена которых и заложены в аббревиатуре AVR).

Когда фирма ATMEL начала выпуск принципиально нового семейства 8-битных микроконтроллеров, построенных на базе RISC-архитектуры с расширенным набором команд, она условно разбила их на три подсемейства: tiny, classic и mega. Все микросхемы имеют идентичное ядро с регистровым файлом из тридцати двух 8-битных регистров общего назначения и встроенное Flash-ПЗУ емкостью от 1 до 128 кбайт. Обобщенная функциональная схема AVR-микроконтроллера представлена на рис.2.

Функциональная схема AVR

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

Микросхемы в подсемействах в основном отличались объемом памяти и количеством портов ввода-вывода. Так, микроконтроллеры tiny имели объем Flash-ПЗУ 1 –2 кбайт и корпус 8 –20 выводов (за исключением tiny28), classic-объем Flash-ПЗУ 2 –8 кбайт и корпус 28 –44 вывода, а mega — 128 кбайт и корпус 64 вывода.

Все микросхемы позволяют производить перепрограммирование памяти программ непосредственно в системе.

С момента начала производства в 1997 году ежегодный объем выпуска AVR-микроконтроллеров неуклонно увеличивается. На рис.3 представлены соответствующие показатели. Для справки: в 2002 году было выпущено более 100 миллионов микросхем.

Диаграмма выпуска микроконтроллеров по годам

С выпуском микроконтроллеров второго поколения в позиционировании подсемейств произошли изменения. Новые микросхемы содержат только два подсемейства: tiny и mega. Микросхемы tiny по-прежнему имеют Flash-ПЗУ 1 –2 кбайт и корпуса 8 –20 выводов,а вот ряд mega существенно расширился: Flash-ПЗУ 8 –128 кбайт и корпус 28 –64 вывода. Фактически произошло поглощение подсемейства classic. Краткие характеристики микросхем представлены в таблице 1.

Таблица 1

Микросхема ПЗУ программ, кбайт ОЗУ ЭСПЗУ Таймеры Посл. порты АЦП Корпус, количество выводов Совместимость
ATtiny26/L 2 128 Б 128 Б 2 USI 11 вх. 20 нет
ATmega8/L 8 1 KБ 512 Б 3 USART 6/8 вх. 28,32 AT90S4433
ATmega8515/L 8 512 Б 512 Б 2 USART нет 40,44 AT90S8515
ATmega8535/L 8 512 Б 512 Б 2 USART 8 вх. 40,44 AT90S8535
ATmega16/L 16 1 KБ 512 Б 3 USART 8 вх. 40,44 ATmega163
ATmega162L/V 16 1 KБ 512 Б 4 2 USART нет 40,44 ATmega161
ATmega169L/V 16 1 KБ 512 Б 3 USART 8 вх. 40,44 нет
ATmega32/L 32 2 KБ 1 Б 3 USART 8 вх. 40,44 ATmega323
ATmega64/L 64 4 KБ 2 Б 4 2 USART 8 вх. 64 ATmega103
ATmega128/L 128 4 KБ 4 KБ 4 2 USART 8 вх. 64 ATmega103

Из анализа таблицы можно видеть следующее. Для каждой микросхемы classic есть «дублер » mega в идентичном корпусе. Таким образом, в существующей разработке, например, вместо AT90S8515 можно использовать микроконтроллер ATmega8515, получив при этом преимущества в виде увеличения скорости процессора, добавления команд умножения и расширенных характеристик последовательных портов. Кстати, если тактовая частота контроллера в усторйстве не превышает 8 МГц, рекомендуется использовать «дублер » версии «L ». Это объясняется тем, что диапазон напряжений питания этих микросхем составляет 2,7 –5,5 В, и таким образом, повышается помехозащищенность устройства: ему не будут страшны кратковременные (а в ряде случаев и долговременные) провалы в питании до уровня 2,7 В. Для каждого типа микроконтроллера существует файл, где детально описаны отличия кристаллов первого и второго поколений. Как правило, при замене микроконтроллера требуется перекомпиляция исходного кода программы, однако в большинстве случаев это является механической операцией замены строки с именем соответствующего подключаемого файла (в данном примере — 8515def.inc на m8515def.inc). В ряду новых AVR-микроконтроллеров отсутствует представитель с емкостью памяти программ 4 кбайт. Это объясняется тем, что младший кристалл в семействе mega — микроконтроллер ATmega8 с памятью программ 8 кбайт — имеет цену даже ниже, чем 4-килобайтный прототип — микроконтроллер AT90S4433.

В подсемействе tiny выпущена интересная микросхема второго поколения — ATtiny26. Этот кристалл при цене менее $2 содержит высокоскоростной ШИМ, а также 11-канальный АЦП с возможностью работы в дифференциальном режиме, с регулируемым входным усилителем и встроенным источником опорного напряжения.

Ниже приведены основные характеристики новых AVR-микроконтроллеров:

  • тактовая частота до 16 МГц,время выполнения команды 62,5 нс;
  • встроенный програмируемый RC-генератор, частота 1, 2, 4, 8 МГц;
  • Flash-ПЗУ программ,программируемое в системе, до 128 кбайт (10 000 циклов перезаписи);
  • электрически перепрограммируемое ПЗУ данных до 4 кбайт (100 000 циклов перезаписи);
  • внутреннее ОЗУ со временем доступа 1 такт, до 4 кбайт;
  • мощный набор команд (более 120 инструкций);
  • 6 аппаратных команд умножения (для семейства mega);
  • развитая система адресации, оптимизированная для работы с С-компиляторами;
  • 32 регистра общего назначения (аккумулятора);
  • синхронный (USART) или асинхронный (UART) последовательные порты;
  • синхронный последовательный порт (SPI);
  • двухпроводный интерфейс TWI, совместимый с интерфейсом I2C;
  • многоканальный 8-, 9-, 10-, 16-битный ШИМ-модулятор;
  • 10-битный АЦП со временем преобразования 70 мкс и дифференциальными входами;
  • программируемый коэффициент усиления — 1; 10 или 200;
  • встроенный источник опорного напряжения 2,56 В;
  • аналоговый компаратор;
  • сторожевой таймер;
  • настраиваемая схема задержки запуска после подачи питания;
  • схема слежения за уровнем напряжения питания;
  • JTAG-интерфейс для подключения эмулятора (в микросхемах с объемом ПЗУ от 16 кбайт);
  • микромощное потребление (менее 100 мкА в активном режиме на частоте 32 кГц).

Полное техническое описание AVR-микроконтроллера составляет несколько сотен страниц,поэтому в рамках данной статьи есть возможность поговорить только об основных особенностях. Архитектуру микроконтроллеров нового поколения удобно рассматривать на старшем представителе семейства — ATmega128, так как в нем присутствует весь набор периферийных модулей.Итак,чем интересен этот микроконтроллер?

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

Во-первых, ATmega128, как и другие AVR-микроконтроллеры второго поколения, имеют расширенную,достаточно гибкую структуру тактирования. В качестве формирователя тактового сигнала могут быть использованы следующие источники (рис.4):

  • высокочастотный или низкочастотный кварцевый резонатор;
  • пьезорезонатор;
  • внешняя RC-цепочка;
  • внутренний настраиваемый RC-генератор;
  • внешний источник тактовых импульсов.

Схема модуля тактирования

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

Выбор способа тактирования производится установкой соответствующих установочных битов (fuse bits)CKSEL0...CKSEL3 при программировании микросхемы. Эти установочные биты управляют также задержкой включения микроконтроллера после выхода из состояния ожидания. В таблице 2 приведены варианты установок этих битов.

Таблица 2

CKSEL3...0 Источник тактирования Комментарий
0000 Внешняя частота 0...16 МГц
0001 Встроенный RC генератор 1 МГц
0010 Встроенный RC генератор 2 МГц
0011 Встроенный RC генератор 4 МГц
0100 Встроенный RC генератор 8 МГц
0101 Внешний RC генератор <0,9 МГц
0110 Внешний RC генератор 0,9...3,0 МГц
0111 Внешний RC генератор 3,0...8,0 МГц
1000 Внешний RC генератор 8,0...12 МГц
1001 Низкочастотный пьезорезонатор 32,768 кГц
101х Кварцевый резонатор 0,4...0,9 МГц
110х Кварцевый резонатор 0,9...3,0 МГц
111х Кварцевый резонатор 3,0...8,0 МГц

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

Типичная ошибка — неверная установка битов CKSEL0...CKSEL3. В случае установки этих битов «в нули» (0000) микросхема переходит в режим работы от внешнего генератора. Таким образом, даже подключенный кварцевый или пьезорезонатор не «запускает » микросхему. Единственный выход «оживить» микроконтроллер — подать на вывод XTAL1 внешние импульсы с частотой 0,5 –16 МГц, не выпаивая его из схемы, и правильно переустановить биты CKSEL0...CKSEL3.

Попутно следует отметить, что микросхемы поставляются с установочными битами, установленными для работы от встроенного RC-генератора с частотой 1 МГц,т аким образом, простое подключение внешнего кварца не дает ожидаемого эффекта. Встроенный RC-генератор имеет достаточно хорошие характеристики, нестабильность по температуре составляетт 3 –4%в диапазоне –40...+85 °С, нестабильность по питанию в диапазоне от 3,3 до 5,0 В — 4 –5%.

На рис.5 показано начальное, «заводское », состояние установочных битов микросхемы ATmega128.

Окно установочных битов

Рассмотрим более подробно набор установочных битов. Биты защиты не требуют комментариев, их функции очевидны.

Биты BLB0x BLB1x отвечают за защиту от чтения и модификации данных в основной памяти программ и загрузочном блоке соответственно.

Два бита SUT (startup time) определяют задержку пуска микроконтроллера. Это важно при использовании задающих кварцевых резонаторов с большим временем выхода на режим.Для таких кварцев можно установить задержку до 65 мс.

Биты BOD (brown out detector) BODEN и BODLEVEL управляют схемой слежения за питанием. Эта схема «наблюдает» за уровнем напряжения питания микроконтроллера, и, в случае снижения этого уровня ниже порога на время более 2 мкс,производит перезапуск контроллера. Пороговое напряжение составляет 4,0 или 2,7 В, в зависимости от состояния бита BODLEVEL.

Биты BOOTSZ0 и BOOTSZ1 служат для настройки размера boot-блока, от 1 до 4 страниц памяти. Страница памяти в различных микросхемах имеет емкость от 256 байт до 2 кбайт. Это позволяет более рационально использовать пространство памяти программ.

Бит CKOPT выполняет различные функции, в зависимости от типа используемого задающего генератора. Если это кварцевый разонатор, бит CKOPT отвечает за настройку коэффициента усиления встроенной схемы генератора. Если используется кварц с частотой выше 8 МГц, рекомендуется запрограммировать этот бит (сделать его "0"), если же в системе используется кварц на частоту 8 МГц и менее, бит CKOPT можно распрограммировать (сделать его "1" как "с завода"). В результате уменьшится потребляемый микроконтроллером ток и снизится электромагнитное излучение цепей генератора.

Если же в качестве задающего генератора используется «часовой » пьезорезонатор на частоту 32,768 кГц, при программировании бита CKOPT к выводам XTAL1 XTAL2 подключаются внутренние конденсаторы номиналом 36 пФ, что снимает необходимость использования дополнительных компонентов.

Бит SPIEN разрешает последовательное программирование-чтение микросхемы, и биты JTAGEN OCDEN соответственно активизируют JTAG-интерфейс и разрешают работу встроенных отладочных цепей. Бит OCDEN требует внимательного к себе отношения, так как при его активном состоянии некоторые внутренние цепи тактирования не отключаются, что приводит к повышенному потреблению мощности в режиме ожидания.

Заключительный бит, М103С, следует рассмотреть более подробно. Как уже упоминалось выше, микросхема ATmega128 имеет на кристалле существенно больше периферийных модулей, чем ее прототип — микросхема ATmega103. Следовательно, на кристалле значительно увеличилось количество управляющих регистров — вместо 64 их стало 224. В традиционных микроконтроллерах в таком случае организовывалась дополнительная страница регистров, однако AVR-архитектура основывается на линейной адресации для ускорения доступа к данным. В соответствии с этой концепцией новый массив регистров размещен непосредственно за массивом базовых регистров,а начальный адрес внутреннего ОЗУ сдвинут на 160 байт, что отображено на карте памяти (рис.6).

Карта памяти

 

Конфигурация А соответствует микросхеме ATmega128, а конфигурация В — микросхеме ATmega103.

Если микросхему ATmega128 устанавливают в ранее разработанное устройство, и ее дополнительные функции не используются, следует установить бит М103С, и тогда она будет работать в режиме эмуляции ATmega103. При этом не надо забывать о правильной установке битов CKSEL0...CKSEL3!

Универсальность AVR-микроконтроллеров заключается в гибком построении кристалла — идентичное ядро и разнообразный набор периферийных модулей. Таким образом, можно использовать программы, написанные для одной микросхемы, в качестве основы программы другой, с более развитой периферией. Например, отлаженная программа, написанная для микросхемы ATtiny26, может служить основой программы для микросхемы ATmega32 — потребуется лишь добавить функции, использующие новые ресурсы и перекомпилировать исходный текст.

Система прерываний

Система прерываний AVR-микроконтроллеров обслуживает несколько источников. В младших адресах памяти программ находится таблица прерываний, в которой записываются вектора для каждого из обслуживаемых прерываний. Каждое прерывание имеет индивидуальный бит разрешения, также есть бит общего разрешения прерываний. Вектор прерывания занимает один или два адреса памяти программ в зависимости от размера памяти конкретного микроконтроллера (следует еще раз отметить, что шина команд — 16-разрядная). Прерывания, размещенные по младшим адресам, имеют более высокий приоритет, в нулевом адресе таблицы находится вектор прерывания «Сброс».

В обычном режиме после снятия сигнала низкого уровня на входе «Сброс » начинает выполняться программа по вектору, указанному в нулевом адресе. Если же установлен установочный бит загрузчика BOOTRST, по сбросу стартует программа, размещенная в загрузочной области памяти микроконтроллера. Эта функция позволяет, например, загружать в ПЗУ две различные программы, и, управляя состоянием бита BOOTRST, запускать любую из них без перепрограммирования всего объема Flash-памяти.

Ниже представлен фрагмент кода с указанием названий векторов прерываний микросхемы ATmega128. Из тридцати пяти векторов восемь (с именами EXT_INT0 ...EXT_INT7)являются внешними,остальные — внутренними.

$0000 jmp RESET; Reset Handler
$0002 jmp EXT_INT0; IRQ0 Handler
$0004 jmp EXT_INT1; IRQ1 Handler
$0006 jmp EXT_INT2; IRQ2 Handler
$0008 jmp EXT_INT3; IRQ3 Handler
$000A jmp EXT_INT4; IRQ4 Handler
$000C jmp EXT_INT5; IRQ5 Handler
$000E jmp EXT_INT6; IRQ6 Handler
$0010 jmp EXT_INT7; IRQ7 Handler
$0012 jmp TIM2_COMP; Timer2 Compare Handler
$0014 jmp TIM2_OVF; Timer2 Overflow Handler
$0016 jmp TIM1_CAPT; Timer1 Capture Handler
$0018 jmp TIM1_COMPA; Timer1 CompareA Handler
$001A jmp TIM1_COMPB; Timer1 CompareB Handler
$001C jmp TIM1_OVF; Timer1 Overflow Handler
$001E jmp TIM0_COMP; Timer0 Compare Handler
$0020 jmp TIM0_OVF; Timer0 Overflow Handler
$0022 jmp SPI_STC; SPI Transfer Complete Handler
$0024 jmp USART0_RXC; USART0 RX Complete Handler
$0026 jmp USART0_DRE; USART0,UDR Empty Handler
$0028 jmp USART0_TXC; USART0 TX Complete Handler
$002A jmp ADC; ADC Conversion Complete Handler
$002C jmp EE_RDY; EEPROM Ready Handler
$002E jmp ANA_COMP; Analog Comparator Handler
$0030 jmp TIM1_COMPC; Timer1 CompareC Handler
$0032 jmp TIM3_CAPT; Timer3 Capture Handler
$0034 jmp TIM3_COMPA; Timer3 CompareA Handler
$0036 jmp TIM3_COMPB; Timer3 CompareB Handler
$0038 jmp TIM3_COMPC; Timer3 CompareC Handler
$003A jmp TIM3_OVF; Timer3 Overflow Handler
$003C jmp USART1_RXC; USART1 RX Complete Handler
$003E jmp USART1_DRE; USART1, UDR Empty Handler
$0040 jmp USART1_TXC; USART1 TX Complete Handler
$0042 jmp TWI; Two-wire Serial Interface Interrupt 
Handler
$0044 jmp SPM_RDY; SPM Ready Handler
;
$0046 RESET: ldir16, high(RAMEND); Main program start
$0047 out SPH, r16; Set stack pointer to top of RAM
$0048 ldi r16, low(RAMEND)
$0049 out SPL, r16
$004A sei; Enable interrupts
$004B < instr>xxx

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

Время отклика на любое прерывание занимает 4 периода тактовой частоты. Если прерывание происходит во время выполнения длинной команды, эта команда корректно завершается до начала обработки прерывания. Если прерывание происходит в то время, когда контроллер находился в режиме ожидания, добавляются еще 4 такта для перехода контроллера в активный режим. Возврат из прерывания также занимает 4 периода тактовой частоты.

Рассмотрим периферийные модули, которые входят в состав микросхемы ATmega128.

Таймеры-счетчики

ATmega128 имеет на борту 4 таймера-счетчика. Два 8-разрядных счетчика с независимыми входными делителями и режимами сравнения. Следующая пара счетчиков — 16-разрядные, в дополнение к ранее указанным функциям имеют режимы сравнения и захвата. Один 8-разрядный счетчик может использоваться как таймер часов реального времени. Для этого на входе счетчика есть микромощный генератор, к которому непосредственно можно подключить «часовой » кварц. Основная функция этого счетчика — формирование длинных интервалов времени,максимальный период — 8 секунд. На базе таймеров-счетчиков построены широтно-импульсные модуляторы, причем 2 канала ШИМ 8-разрядные, и 6 каналов — с программируемой разрядностью от 2 до 16 бит.

Структурная схема 8#разрядного таймера-счетчика

Структурная схема 16#разрядного таймера-счетчика

Модуль АЦП

Многие AVR-микроконтроллеры имеют встроенный аналого-цифровой преобразователь. У микросхем Atmega8535/16/32 из-за небольшого количества выводов пришлось пожертвовать возможностью работы с внешним ОЗУ, однако ATmega128 не имеет такого ограничения.

В состав микросхемы входит 8-канальный 10-битный АЦП со временем преобразования 65 мкс на канал. Интегральная нелинейность АЦП составляет 0,5 единицы младшего разряда. АЦП может работать в следующих режимах:

  • 8-канальный с одиночными входами;
  • 7-канальный псевдодифференциальный;
  • 2-канальный дифференциальный с программируемым входным усилителем (1х, 10х и 200х).

Также на кристалле имеется источник опорного напряжения 2,56 В. Максимальное напряжение на аналоговых входах не должно превышать уровень аналогового напряжения питания AVCC. Процесс аналого-цифрового преобразования в установившемся режиме занимает 13 тактов генератора.

Структурная схема модуля АЦП представлена на рис.9.

Схема модуля АЦП

Последовательные порты

Микроконтроллер ATmega128 щедро оснащен портами ввода-вывода. Стандартно он имеет 7 параллельных портов: 8-разрядные A, B, C, D, E, F и 5-разрядный порт G. Однако, в соответствии с общей тенденцией перехода на последовательные коммуникационные интерфейсы, ATmega128 поддерживает связь с внешним миром через несколько последовательных портов. Естественно, в силу ограниченого количества выводов корпуса микросхемы ATmega128, многие выводы имеют несколько альтернативных режимов. Краткое описание портов представлено в таблице 3.

Таблица 3

Название порта Скорость обмена Число линий связи
UART/USART0 до 2 Мбод 2/3
UART/USART1 до 2 Мбод 2/3
SPI,Master/Slave до 8 Мбод 3/4
TWI,Multi master до 400 кбод 2
JTAG IEEE std 4

Примечание: порт TWI аппаратно реализует интерфейс I2C

Характеристики порта USART:

  • полнодуплексный обмен;
  • асинхронные или синхронные операции;
  • двойная скорость обмена в асинхронном режиме;
  • работа в многопроцессорной конфигурации;
  • тактирование от контроллера или периферийного устройства;
  • генератор частоты обмена с высоким разрешением;
  • работа со словами 5, 6, 7, 8 или 9 бит данных и 1 либо 2 стоповыми битами;
  • аппаратный генератор бита паритета;
  • определение ошибки передачи пакета;
  • входной фильтр, снижающий влияние шума;
  • три независимых прерывания: завершение приема,завершение передачи, опустошение регистра передачи.

Порт UART/USART, как видно из названия, может работать либо в асинхронном, либо в синхронном режиме. В первом случае используются две линии, а во втором — три. Работа порта в асинхронном режиме аналогична работе UART в AVR-микроконтроллерах первого поколения. Отличие — в регистре данных приемника UDR, который стал двухуровневым, таким образом, можно начинать прием следующего пакета до завершения обработки предыдущего. Структурная схема порта USART представлена на рис.10.

Схема модуля USART

Характеристики порта SPI:

  • полнодуплексный синхронный обмен;
  • поддержка режимов Master и Slave;
  • начало передачи со старшего или младшего бита;
  • семь программируемых скоростей передачи;
  • удвоенная скорость передачи (половина тактовой частоты);
  • флаг прерывания по окончании передачи;
  • обнаружение ошибки записи.

Передача информации по интерфейсу SPI представляет собой обмен данными между двумя закольцованными сдвиговыми регистрами, один из которых размещен в устройстве Master, а второй — в устройстве Slave.

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

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

Схема модуля SPI

Характеристики порта TWI:

  • полная совместимость с интерфейсом I2C;
  • скорость передачи до 400 кГц;
  • поддержка режимов Master и Slave;
  • 7-разрядный адрес позволяет использовать до 128 устройств на шине;
  • микроконтроллер может функционировать как приемник и как передатчик;
  • схема ограничения скорости нарастания фронтов выходных сигналов;
  • защита по входам от шумов и кратковременных ложных импульсов;
  • переход из «спящего » состояния в активное при распознавании адреса обращения.

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

Помимо АЦП на кристалле есть еще аналоговый компаратор. Он сравнивает сигналы на входах AIN1 и AIN2. Есть возможность подать на инвертирующий вход компаратора любой из входных сигналов АЦП.

Режимы энергосбережения

Режим энергосбережения (режим ожидания, «спящий » режим) позволяет отключить неиспользуемые модули микроконтроллера и таким образом снизить энергопотребление. AVR — микроконтроллеры имеют несколько режимов ожидания, и программист может выбрать оптимальный режим для конкретной задачи.

Для перевода контроллера в любой режим ожидания следует установить биты SM2, SM1 и SM0 в регистре MCUCR и выполнить команду SLEEP. Перечень режимов представлен в таблице 4.

Таблица 4

SM2 SM1 SM0 Режим
0 0 0 Idle
0 0 1 ADC Noise Reduction
0 1 0 Power down
0 1 1 Power save
1 1 0 Standby*
1 1 1 Extended Standby*
*режимы Standby и Extended Standby доступны при работе с внешним осциллятором

Если во время нахождения контроллера в режиме ожидания возникает прерывание, контроллер переходит в активный режим, и через 4 такта после окончания периода «пробуждения », необходимые для выполнения процедуры прерывания, продолжает выполнение программы с команды, следующей за командой SLEEP. Содержимое регистров и ОЗУ остается таким же, какое было до «пробуждения».

Рассмотрим коротко каждый из режимов ожидания.

Режим Idle. Останавливается процессор, но продолжают работать модули SPI, USART, TWI, аналоговый компаратор, АЦП, таймеры счетчики, сторожевой таймер и модуль прерываний.

Режим ADC Noise Reduction. В этом режиме останавливается процессор, модули SPI и USART.

Также отключаются цепи тактирования clkI/O, clkCPU и clkFlash.

Режим ADC Noise Reduction используется для получения более точных результатов измерений АЦП.

Режим Power-down. В этом режиме отключается тактовый генератор, но продолжают работать модуль внешних прерываний, интерфейс TWI и сторожевой таймер. Также отключаются все цепи тактирования, остаются работать только асинхронные модули. Для перехода в активный режим требуется дополнительная задержка, необходимая для запуска тактового генератора. Эта задержка устанавливается fuse-битами CKSEL.

Режим Power-save. Этот режим подобен предыдущему за одним исключением. Если таймер-счетчик 0 тактируется асинхронно, он продолжает функционировать после выполнения команды SLEEP. Контроллер может быть «разбужен » по переполнению таймера или по срабатыванию цифрового компаратора, если разрешено соответствующее прерывание.

Режимы Standby и Extended Standby аналогичны режимам Power-down и Power-save соответственно. Однако в этих режимах тактовый генератор не отключается и время перехода в активный режим составляет 6 тактов.

JTAG-интерфейс

Принципиально новым у лом микроконтроллера ATmega128 является JTAG-интерфейс. Этот интерфейс используется для проведения периферийного тестирования микросхемы в соответствии со стандартом IEEE std 1149.1, а также для подключения внутрисхемного эмулятора ATJTAG ICE. Физически JTAG-интерфейс занимает 4 старших разряда АЦП. Режим отладки с использованием JTAG-эмулятора поддерживается микроконтроллерами ATmega16/162/169/32/64/128. На кристалле микроконтроллера размещен специальный набор отладочных регистров, через которые эмулятор и управляет выполняемой программой. Еще одна функция JTAG-эмулятора — внутрисхемное программирование микроконтроллера. Следует отметить, что при программировании битов защиты работа JTAG-порта запрещается, чтобы исключить возможность использовать этот порт для несанкционированного доступа к содержимому программной памяти микроконтроллера.Применение JTAG-эмулятора позволяет использовать пользовательскую плату как отладочную. Для этого необходимо разместить 10-контактный разъем для подключения JTAG-эмулятора. В качестве отладочного кристалла используется собственно микроконтроллер, на котором запускается отлаживаемая программа.

Надо отметить, что помимо достаточно напряженной официальной части семинара была и неофициальная, вне стен завода фирмы ATMEL. В числе прочих, естественно, была затронута тема развития линии AVR-микроконтроллеров.

Один из авторов статьи задал (можно сказать ретранслировал) Ингару Фредриксену типичный вопрос российских разработчиков — а каков срок жизни у этих новых AVR-микроконтроллеров? Мы совсем недавно привыкли к микросхеме ATmega103, вполне всех устраивающей, а теперь приходится переходить на ATmega128, которая, конечно, лучше, однако требует некоторой модификации исходных кодов (если они доступны) и перекомпиляции проекта. Этот вопрос породил обстоятельный ответ, который вылился в 15-минутный монолог, и его суть в двух словах такова: анализ статистики задач, решаемых 8-разрядными микроконтроллерами, показывает, что от хорошего универсального, то есть пригодного к использованию практически в любой задаче своего класса, контроллера требуются 2 основных качества. Первое — быстродействие не менее 10 MIPS, чтобы не думать о запасе производительности. Второе — большой объем памяти программ, чтобы писать код на языке высокого уровня и не заботиться размере выходного hex-файла. При наличии этих качеств работу можно сделать быстро, а это очень важно. В свете вышеперечисленных требований AVR-контроллеры второго поколения идеально подходят для применения в любой области, где нужен 8-разрядный контроллер. А наличие идентичного ядра еще более развязывает руки разработчику — очень легко перейти к любой микросхеме этого обширного семейства без существенных временных затрат. Таким образом, можно сказать, что революционные изменения в аппаратной архитектуре контроллеров просто не требуются, то есть AVR-контроллеры набрали «необходимую высоту » и теперь переходят в режим «горизонтального полета ».

В заключение стоит в двух словах рассказать о новых изделиях. Это кристаллы ATmega162 и ATmega169, отличительной особенностью которых является возможность работы при питании 1,8 В и микропотребление в активном режиме. Для справки: у ATmega169 ток потребления в активном режиме при питании 1,8 В на частоте 32 кГц составляет 20 мкА! Кроме этого, ATmega169 имеет контроллер управления сегментным ЖКИ с матрицей 25 сегментов, 4 колонки. К концу года ожидается выпуск кристалла на базе микросхемы ATmega128 с CAN-интерфейсом. А в более отдаленной перспективе прорисовывается микросхема ATmega256.

Свежую информацию по микросхемам, программное обеспечение и примеры исходных текстов программ можно переписать с сайта http://atmel.argussoft.ru/.

 

 

Фьюзы AVR Fuse 
fuse-биты настраивают некоторые параметры МК при прошивании
 и не доступны для изменения из программы МК.

 
  Семейство ATtiny Семейство ATmega
  2313 25
/45
/85
13 26 261
/461
/861
8 16 48
/88
/168
128 169 329 8515 8535
RESERVED                 M103С +   S8515С S8535С
OCDEN             +   + + +    
JTAGEN             +   + + +    
SELFPRGEN + + +   +     +          
DWEN + + +   +   + +          
EESAVE + + + + + + + + + + + + +
SPIEN + + + + + + + + + + + + +
WDTON + + +   + +   + + + + + +
BODLEVEL2 + +     +     +   +      
BODLEVEL1 + + +   +     +   + +    
BODLEVEL0 + + + BODLEVEL + BODLEVEL BODLEVEL + BODLEVEL + + BODLEVEL BODLEVEL
BODEN       +   + +   +     + +
RSTDISBL + + + + + +   +     +    
CKDIV8 + + +   +     +   + +    
CKOUT + +     +     +   + +    
SUT1 + + + + + + + + + + + + +
SUT0 + + + + + + + + + + + + +
CKOPT       +   + +   +     + +
CKSEL3 + +   + + + + + + + + + +
CKSEL2 + +   + + + + + + + + + +
CKSEL1 + + + + + + + + + + + + +
CKSEL0 + + + + + + + + + + + + +
PLLCK       +                  
BOOTRST           + + + + + + + +
BOOTSZ1           + + + + + + + +
BOOTSZ0           + + + + + + + +
 

 

      В таблице fuse-биты популярных AVR. Слева названия fuse-битов по даташиту, в первых двух строках перечислены семейства и типы конкретных МК, а на пересечении строк и столбцов стоит знак плюс, если данный fuse-бит имеется в данном МК, или указано название, отличное от стандартного. Если какой-то бит отсутствует — в соответствующей клетке ничего нет.

      Назначение каждого фьюза AVR fuse бита:

RESERVED —  этот бит зарезервирован для каких-то неизвестных простым смертным целей фирмой Atmel. Ни при каких условиях не рекомендуется менять его состояние (т. е. надо оставлять его таким, как он установлен при изготовлении МК). В этой строке встречаются биты с другими названиями, как правило, это биты включения режима совместимости с устаревшими типами МК, на смену которым выпущены новые. Обычно в конце названия такого fuse-бита имеется символ С — от COMPATIBLE (совместимый).

OCDENfuse разрешает работу схемы внутреннего отладчика (On Chip Debug ENable). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК.

JTAGENfuse бит разрешает работу интерфейса программирования-отладки JTAG. По сравнению с SPI-интерфейсом, JTAG обладает расширенными возможностями. Не рекомендуется без необходимости оставлять этот бит установленным, т. к. в этом случае потребляемый МК ток возрастает.

SELFPRGEN — бит, разрешающей программе МК производить запись в память программ, т. е. производить самопрограммирование.

DWENfuse бит, разрешающий работу DebugWire - это интерфейс отладки по одному проводу. Не рекомендуется оставлять его установленным в коммерческих изделиях.

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

SPIENfuse бит, разрешающий работу интерфейса внутрисхемного программирования МК по SPI. Этот бит может быть легко переустановлен при помощи параллельного программатора (или JTAG, если таковой разрешен и имеется в МК). Все МК выпускаются с установленным битом SPIEN, снять его по интерфейсу SPI невозможно.

WDTONfuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.

Группа fuse битов BODLEVEL. Может быть либо один такой бит, либо несколько, тогда они нумеруются, начиная с нуля. Значение этих fuse битов определяет порог срабатывания схемы BOD — детектора уровня питающего напряжения, при снижении напряжения питания ниже этого уровня произойдет "сброс" МК.

BODENfuse бит, включающий схему аппаратного детектора недопустимого уровня
питающего напряжения, т.е. схему BOD.

RSTDISBLfuse бит, отключающий сигнал внешнего сброса от вывода микроконтроллера и подключающий к нему схему порта ввода-вывода. Этот бит имеется только в тех МК, у которых вывод аппаратного сброса RESET совмещен с одинм из портов ввода-вывода. Ошибочная установка этого fuse бита может отключить RESET и вы не сможете больше прошивать по ISP. Не устанавливайте этот бит, если намерены продолжать работать с МК при помощи последовательных программаторов. "Оживить" МК с установленным RSTDISBL можно только параллельным программатором и не для всех МК.

CKDIV8fuse бит, включающий предварительное деление частоты кварцевого (или иного имеющегося) тактового генератора на 8. То есть при включенном этом бите и применении кварцевого резонатора на 8 МГц реальная тактовая частота МК составит 1 МГц.

CKOUTfuse бит, разрешающий вывод тактовой частоты на один из выводов МК (для тактирования других устройств).

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

CKOPT — бит, определяющий режим работы встроенного генератора тактовой частоты для работы с кварцевыми резонаторами. Реально изменяет коэффициент усиления встроенного инвертора в схеме генератора и значит выходное напряжение на ножке XTAL2.  Ошибочная установка может приводить к неустойчивому запуску кварцевого генератора, вплоть до возбуждения его не на той гармонике, что надо (из-за этого бита кварц запускался или только при питании МК напряжением не выше 3,6В, или только после прикосновения к выводу XTAL1 пинцетом)

Группа битов CKSEL0CKSEL3fuse биты, комбинация которых определяет тип и частоту работающего тактового генератора. Всего возможно до 16 комбинаций, однако не все определены для всех типов МК. Ошибочная установка комбинации этих битов может сделать МК «мертвым» — он не будет работать в схеме без подачи тактового сигнала на ножку XTAL1.

PLLCK fuse бит, разрешающий использование встроенного синтезатора частоты для тактирования ядра МК.

BOOTRSTfuse бит, определяющий адрес, с которого будет начато исполнение программы после сброса если бит установлен, то начало программы будет не с адреса 0000h (как обычно), а с адреса области загрузчика (Boot Loader).

Группа fuse битов BOOTSZ — два fuse бита, определяющие размер области памяти программ, выделяемой для загрузчика (Boot Loader). Комбинация этих битов, в частности, определяет точку начала исполнения программы после сброса, если установлен бит BOOTRST.

 

Самое подробное описание фьюзов

смотрите в Даташите конкретного МК !

 


AVR раз, два, три...   это просто!

действительно Краткий Курс !

МикроКонтроллеры AVR Начинающим "с нуля" 


 

Сайт управляется системой uCoz