Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тактирование микроконтроллера.



 

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

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

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

Кварцевый генератор — генератор колебаний, стабилизируемый кварцевым резонатором. Обычно обладает небольшой выходной мощностью.

Частота колебаний кварцевого генератора составляет от нескольких кГц до сотен МГц. Она определяется физическими размерами резонатора, упругостью и пьезоэлектрической постоянной кварца, а также тем, как вырезан резонатор из кристалла. Так как кварцевый генератор является законченным электронным компонентом, то частоту кварца (резонатора) входящего в конструктив генератора изменить нельзя (поскольку она определяется конструкцией резонатора), однако частоту генератора можно очень незначительно менять изменением ёмкости специального подстроечного конденсатора. Либо использовать делители частоты. В 1997 году компания Epson Toyocom выпустила в свет серию генераторов SG8002, в конструктиве которых присутствуют блок подстроечных конденсаторов и два делителя частоты. Что позволяет получить практически любую частоту в диапазоне от 1 до 125 МГц.[2]. Однако, данное достоинство неизбежно влечёт за собой недостаток — повышенный джиттер (фазовый шум).

картинки

Приведем основные способы тактирования МК:

1. Внешняя RC – цепочка – используется главным образом для программ не критичных к скорости выполнения. В цепи, состоящей из резистора и конденсатора, заряд/разряд используется в качестве тактирующего сигнала. Простейший вариант не рекомендуется использовать.

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

3. Внешний тактовый кварцевый резонатор – стал де факто стандартом тактирования микроконтроллеров. Подключив кристалл кварца (для простоты просто кристалл) к соответствующим выводам микроконтроллера можно запустить его на заданной частоте – частоте кварца.

4. Внешний тактовый керамический резонатор – резонатор чуть дешевле, чем кристалл, но имеет меньшую точность.

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

Порты микроконтроллера.

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

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

Выходные буферы всех портов, имея симметричные нагрузочные характеристики, обеспечивают высокую нагрузочную способность при любом уровне сигнала. Нагрузочной способности достаточно, например, для непосредственного управления светодиодными индикаторами. Входные буферы всех выводов построены по схеме триггера Шмидта. Для всех входов имеется возможность подключения внутреннего подтягивающего резистора между входом и шиной питания Vcc. Отличительной особенностью портов микроконтроллеров семейства Mega (как и всех микроконтроллеров AVR) при использовании их в качестве цифровых портов ввода/вывода общего назначения является реализация истинной функциональности «чтение/модификация/запись». Благодаря этому можно выполнять операции над любым выводом, не влияя на другие выводы порта. Это относится к изменению режима работы контакта ввода/вывода, к изменению состояния выходного буфера (для выходов) и к изменению состояния внутреннего подтягивающего резистора (для входов).

Обращение к портам осуществляется через регистры ввода/вывода. Под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса, по которым размещены следующие регистры (в данном случае, используется порт B, аналогично и для любого другого порта МК):

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

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

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

Таблица 1. Таблица возможных состояний вывода МК.

Значение бита_х

Состояние вывода МК
Программа может только читать этот бит!

Программа управляет этими битами

PBx

PINB.x DDRB.x PORTB.x
1

1

1 Высокий лог. уровень (вывод как бы подсоединен к питанию МК резистором около 20 Ом)
0 0 Низкий лог. уровень (вывод как бы заземлен резистором около 20 Ом)

Определяется только реальным напряжением на ножке МК Напряжение преобразуется в " 1" или " 0" по приведенным выше правилам.

0

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

Аналогичную схему можно составить для любого порта МК.

Таким образом, 32 I/O вывода микроконтроллера ATmega16 могут быть программно и индивидуально сконфигурированы (и переконфигурированы уже при выполнении управляющей программы) как:

1) входы с высоким (более 10 МОм) входным сопротивлением (для напряжений от 0 до напряжения питания МК) или Z-вход;

2) входы по п1), но с подключенным внутренним подтягивающим резистором на + питания МК (номинал резистора составляет около 40 кОм);

3) как выходы способные обеспечить ток до 20 мА (но общий ток на порт только до 80 мА, а ток всех портов до 200 мА в DIP корпусе и до 400 мА в ASMD корпусе)

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

Также приведем пример программной реализации конфигурации портов на языке Си.

PORTA=0x00;

DDRA=0xFF;

PORTB=0x00;

DDRB=0x00;

PORTC=0xFF;

DDRC=0x00;

PORTD=0x03;

DDRD=0x0A;

В приведенном примере порт А полностью сконфигурирован как выход (в регистр DDRA записано 0хFF, что означает 256 в десятичной системе счисления(знак 0х указывает на шестнадцатеричную систему счисления), таким образом, во все биты данного регистра записаны единицы), в регистр PORTA записано число 0х00 или 0 в десятичной системе счисления, что означает, что изначально на всех выводах порта А будет логический 0). Все выводы порта В сконфигурированы как входы в Z состоянии (в регистр DDRB записано 0х00, что означает 0 в десятичной системе счисления, в регистр PORTB также записан 0). Порт С полностью сконфигурирован как вход с подтяжкой (в регистр DDRC записано 0х00, что означает 0 в десятичной системе счисления, в регистр PORTB записано число 256). Выводы же порта D сконфигурированы по-разному (выводы 7-4 и вывод 2 – как входы в Z состоянии, вывод 0 – как вход с подтяжкой, вывод 1 – как выход с высоким логическим уровнем, вывод 3 – как выход с низким логическим уровнем). Поясним как это сделано более подробно.

В регистр DDRD записано число 0х0А или 10. Общее число, записываемое в регистр DDRD может быть представлено в виде:

 

DDRD = 1*x0+2*x1+4*x2+8*x3+16*x4+32*x5+64*x6+128*x7

 

Здесь x0…x7 – значения, определяющие, чем будет конкретный вывод порта (1 – если данный вывод является выходом, 0 – если входом). В нашем случае выходами являются выводы 1 и 3 порта, соответственно x1 = 1 и x3 = 1, остальные же выводы – входы, соответствующие им значения x0, x2, x4…x7 должны быть равны 0. Получаем:

 

DDRD = 1*0+2*1+4*1+8*0+16*0+32*0+64*0+128*0 = 10 = 0х0А

 

В регистр PORTD записано число 0х03 или 3 в десятичной системе счисления. Общее число, записываемое в регистр PORTD, может быть представлено в виде, схожем с общим видом регистра DDRD:

 

PORTD = 1*x0+2*x1+4*x2+8*x3+16*x4+32*x5+64*x6+128*x7

 

В этом случае для выходов соответствующее значение x определяет состояние начальное состояние вывода (логическую единицу (соответствующий бит регистра тоже должен быть равным 1) или ноль), для выходов – Z состояние (для этого соответствующий бит должен быть равным 0), либо подтяжку (для этого соответствующий бит должен быть равным 1). Получим следующее выражение:

 

PORTD = 1*1+2*1+4*0+8*0+16*0+32*0+64*0+128*0 = 3 = 0х03

 

Вывод 0 – вход с подтяжкой, поэтому x0 = 1, вывод 1 – выход с высоким логическим уровнем, поэтому x1=1, вывод 2, 4-7 – входы в Z состоянии, поэтому соответствующие значения x2, x4…x7 – равны 0. Вывод 3 – выход с низким логическим уровнем, поэтому x3 = 0.

Таким образом, изменять состояние вывода МК можно командами PORTX=Y, где Y – требуемое число, при условии, что этот вывод сконфигурирован как выход (в соответствующие биты DDRX записаны 1). На практике чаще применяется форма записи PORTX.Y = 1, PORTX.Y = 0, где X – название соответствующего порта, Y – номер вывода порта. Это объясняется тем, что в этом случае не требуется вычислять требуемое значение регистра PORTX и можно легко изменять состояние требуемых выводов. В то же время, когда необходимо одновременно изменить состояние всего порта, то чаще обращаются ко всему регистру, а не к отдельным его битам.

Считывать же состояние вывода МК можно обращаясь к регистру PORTX или к отдельным выводам порта PORTX.Y, например, так:

 

If (PIND.2 == 1) PORTA.0=1;

 

Эта строчка означает следующее: если на выводе 2 порта D логическая 1, то послать на вывод 0 порта A единицу.

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

Для более подробной информации о конфигурации портов и работы с внешними сигналами смотрите пример  «Внешние сигналы МК. Работа с портами».

 


Поделиться:



Последнее изменение этой страницы: 2019-03-20; Просмотров: 497; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.029 с.)
Главная | Случайная страница | Обратная связь