Меню

Atmega8 подключение внешнего генератора

Таймер – счётчик AVR микроконтроллера в качестве генератора

Пример реализации импульсного генератора с регулируемой частотой на МК
Atmega8. Плавно меняем частоту выходных импульсов.

На этой странице мы поговорим о том, как на базе МК Atmega8 построить простейшее устройство, предназначенное для генерирования прямоугольных импульсов с регулируемой частотой.
Реализовывать эту затею будем без особого труда и усилий, используя один из трёх таймеров-счётчиков, встроенных в данный AVR микроконтроллер.
А поскольку на одной из предыдущих страниц были подробно рассмотрены варианты настроек счётчиков на примере таймера Т2, то и в качестве генератора импульсов с регулируемой частотой потрудиться придётся именно ему.

Для начала – демонстрация работы устройства в программе симуляции работы МК Proteus (Рис.1).
Далее поэтапно озвучим процесс написания программы прошивки, которую мы по традиции будем реализовывать на языке СИ.

Рис.1 Пример реализации импульсного генератора с изменяемой частотой на МК Atmega8

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

Итак приступим к написанию программы.
Для начала – всё стандартно и аналогично предыдущим проектам:

В качестве шим-контроллера используем один из трёх таймеров-счётчиков Atmega8 – 8-битный таймер Т2.
Выходным пином для данного таймера-счётчика является вывод МК OC2, он же третий разряд порта В – PB3. Его надо обязательно назначить как выход, и будет совсем нелишним назначить ему какое-нибудь значение:

DDRB |= ( 1 // Конфигурируем вывод порта PB3 как выход
PORTB &=

(1 // Устанавливаем 0 на его выходе

Теперь надо инициировать таймер-счётчик Т2 посредством настройки его регистров:

TCCR2 = 0b00011100;
/* 1. Режим СТС со сбросом таймера при совпадении регистров OCR2 и TCNT2
(6 и 3 разряды TCCR2 = 0, 1).
2. Тактовая частота для счётчикаТ2 – это рабочая частота МК, делённая на 64
(2,1,0 разряды TCCR2 = 1, 0, 0).
3. Состояние вывода меняется на противоположное при совпадении TCNT2 и OCR2
(5,4 разряды TCCR2 = 0, 1) */

OCR2=99;
/* Регистр сравнения. Зададим его начальное значение равным 99. Когда счётчик
досчитает до значения OCR2, напряжение на выходе PB3 изменится на
противоположное */

А теперь давайте посчитаем, какую частоту нам выдаст счётчик-таймер при объявленном значении OCR2.
Причём здесь надо учитывать нюанс, что в данном МК событие сброса счётчика (а соответственно, и изменение выходного уровня) происходит не в момент совпадения состояния счётчика с записанным в OCR2 числом, а в момент изменения таймером своего значения, т. е. в следующем такте. Поэтому частоту генерации можно вычислить по следующей формуле:
Fген = Fтакт /[2*(OCR2 +1)] , где Fтакт = Fпроц/64 = 8000000/64 = 125000 Гц .
Подставляем значения и получаем начальную частоту: Fген = 625 Гц .

С описаниями регистров на этом закончим.
А теперь давайте введём переменную, которую используем в ходе выполнения программы, и которая будет принимать всего два значения: либо +5, либо -5, в зависимости от требуемого знака приращения частоты выходного сигнала:

short st = 5; // Объявляем переменную st и записываем в неё число 5

Значение этой переменной задаёт дискретность изменения частоты перестройки.

Теперь, когда все подготовительные работы у нас проведены, можно смело приступать к основной программе:

В принципе, всё необходимое программное воплощение функции генератора мы уже осуществили настройками регистров таймера-счётчика Т2. Всё что теперь остаётся – это обеспечить постепенное наращивание содержимого регистра сравнения OCR2 (частота будет уменьшаться), а затем, когда она станет равной определённому значению, которое мы зададим ниже, обеспечить такое же постепенное снижение содержимого регистра, пока частота не увеличится до стартового значения.
Каждое переключение частоты будем осуществлять не абы когда, а в то время, когда полностью закончится период колебаний счётчика, то есть в момент, когда счётчик обнулится и TCNT2 станет равен нулю. Запишем это условие:

OCR2 = OCR2 + st; /* С каждым циклом прибавляем (или вычитаем) к содержимому регистра сравнения значение st, тем самым уменьшая (увеличивая) частоту */

if (OCR2 > 238) st = -5 ; /* Как только счётчик досчитает значения 239, поменяем знак st на минусовой. Частота в этот момент будет равна 260,4 Гц (см. формулу выше) */

if (OCR2 /* Как только OCR2 примет значение 99, т. е. своё начальное значение, возвращаем st плюсовой знак */

_delay_ms(50); // Подождём 50 мс, пока генератор поработает на изменённой частоте

> // конец условия if (TCNT2 == 0)
> // конец цикла
> // конец основной программы

Теперь сгруппируем всё воедино и получим искомый код на языке Си:

DDRB |= ( 1 // Конфигурируем вывод порта PB3 как выход
PORTB &=

(1 // Устанавливаем 0 на его выходе

TCCR2 = 0b00011100; /* конфигурируем счётчик:
1. Режим СТС со сбросом таймера при совпадении регистров OCR2 и TCNT2
(6 и 3 разряды TCCR2 = 0, 1).
2. Тактовая частота для счётчикаТ2 – это рабочая частота МК, делённая на 64
(2,1,0 разряды TCCR2 = 1, 0, 0).
3. Состояние вывода меняется на противоположное при совпадении TCNT2 и OCR2
(5,4 разряды TCCR2 = 0, 1) */

OCR2=99;
/* Регистр сравнения. Зададим его начальное значение равным 99. Когда счётчик
досчитает до значения OCR2, напряжение на выходе PB3 изменится на
противоположное */

short st = 5; // Объявляем переменную st и записываем в неё число 5

OCR2 = OCR2 + st; /* С каждым циклом прибавляем (или вычитаем) к содержимому регистра сравнения значение st, тем самым уменьшая (увеличивая) частоту */

if (OCR2 > 238) st = -5 ; /* Как только счётчик досчитает значения 239, поменяем знак st на минусовой. Частота в этот момент будет равна 260,4 Гц (см. формулу выше) */

if (OCR2 /* Как только OCR2 примет значение 99, т. е. своё начальное значение, возвращаем st плюсовой знак */

_delay_ms(50); // Подождём 50 мс, пока генератор поработает на изменённой частоте

> // конец условия if (TCNT2 == 0)
> // конец цикла
> // конец основной программы

Теперь, так же как и в предыдущих примерах, нужно перенести готовый код в Atmel Studio и скомпилировать его. Для этого необходимо кликнуть по кнопке Build и в выпавшем меню выбрать Build Solution.
Если ошибок нет, то файл успешно скомпилируется, а в нижней части экрана появится надпись:
==== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ====

Далее нам надо войти в папку, в которой мы сохранили наш проект, найти там ещё одну папку с названием Debug и убедиться в существовании файла с расширением HEX.
При помощи этого файла может производиться как прошивка микроконтроллера, так и проверка его работоспособности в программе для автоматизированного проектирования Proteus.
При работе в Протеусе важно в свойствах ATMEGA8 в графе CKSEL Fuses: задать «Int. RC 8MHz». В противном случае моделирование будет проводиться из расчёта тактовой частоты МК 1МГц.

Источник

Минимальная обвязка ATmega8, 168, 328

Опубликовано 20.08.2013 17:12:00

Не всегда удобно либо дорого по бюджету оставлять плату Arduino в проекте. После отладки все можно перенести на голый контроллер . В данной статье расскажем о том, что и для чего нужно для запуска ATmega8, 168, 328.

Питание контроллера

Питание контроллера (IC1) делится на цифровую часть (VCC, GND) и аналоговою (AVCC, AGND), и для ATmega8, 168, 328 должно лежать в пределах 5 вольт. В нашем случае можно смело объединить VCC с AVCC и GND c AGND.

В контроллере также присутствует вывод AREF. Напряжение, присутствующее на данном выводе, будет задавать опорное для аналоговых входов. Если данный вывод ни к чему не подключен, что мы и имеем на платах Arduino, то контроллер автоматом задает значение опорного напряжения равное 5 вольтам.

Для фильтрации ВЧ помех рекомендуется установить конденсатор (C1) емкостью 0.1 мкФ между питанием контроллера и землей.

Кварцевый генератор

В контроллерах ATmega8, 168, 328 имеется внутренний кварцевый генератор работающий на частоте 8 МГЦ, т.е если нам не очень важна частота, то во внешнюю обвязку можно внешний кварц и не включать. Однако при таком варианте, потребуется прошивать соответствующий бутлоадер и добавлять новые платы в boards,txt

Большинство плат Arduino работает на частоте 16 МГц, в связи с этим необходима установка внешнего кварца. Кварц (Q1) ставится на ноги 9 и 10 (выводы XTAIL1/XTAIL2) и далее через конденсаторы (C2, C3), нужного для работы кварца номинала (в нашем случае 18-22p), кидаются на землю.

Перезагрузка контроллера

Для возможности осуществления перезагрузки контроллера предусмотрен вывод RESET.

Когда на выводе присутствует положительный потенциал, для этого притягиеваем резистором (R1) к +5 вольтам, контроллер работает по заданной программе. Для осуществения сброса МК, вывод RESET необходимо замкнуть на землю, для этих целей служит кнопка (S1).

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

Получение напряжения для работы контроллера

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

Для сглаживания входного и выходного напряжений в обвязку кренки необходимо установить конденсаторы (C4, C5). Кренка будет работать и без них, однако напряжение может поскакивать.

Распиновка контроллера

Смотря на данные принципиальные схемы, у большинства новичков скорее всего возникнут вопросы о том, куда делись привычные, для среды Arduino, выводы D1, D2 и т.д.

Непосредственно сам контроллер Atmega разбит на три порта : PORT C (аналоговые входы) и PORT B, PORT D (цифровые входы/выходы). При программировании на СИ, в чистом виде, в коде программы происходит обращение к выводам, по названиям из даташита. Например операция PORTB |= 1«5; установит логическую единицу на указаном порте и пине, а в среде Arduino тоже самое произойдет при функции

Как вы наверное уже догадались, все эти PC2, PB2, в среде Arduino спрятаны за обычными цифрами, а обращение к портам происходит в завиcимости от функций

Далее приложу, да вы и сами поймете что)

Интерфейсы

Связь с внешним миром в контроллерах ATmega8, 168, 328 представлена 3 видами интерфейсов. Сильно углубляться здесь не буду, скопирую инфомацию из Википедии, от себя для наглядности добавлю цветовую маркировку.

I2C (Inter-Integrated Circuit) — последовательная шина данных для связи интегральных схем, использующая две двунаправленные линии связи (SDA и SCL). Используется для соединения низкоскоростных периферийных компонентов с материнской платой, встраиваемыми системами и мобильными телефонами.

UART (Universal Asynchronous Receiver-Transmitter) — узел вычислительных устройств, предназначенный для связи с другими цифровыми устройствами. Преобразует заданный набор данных в последовательный вид так, чтобы было возможно передать их по однопроводной цифровой линии другому аналогичному устройству. Метод преобразования хорошо стандартизован и широко применялся в компьютерной технике.

SPI (Serial Peripheral Interface, SPI bus) — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник

Как тактировать AVR

Введение

Прежде чем разбирать, какие бывают источники тактирования, чем они отличаются, их плюсы и минусы и тд, нам нужно определиться, что вообще означает словосочетание тактовая частота. Да и вообще, что означает термин “частота”?

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

Какие можно привести примеры подобных колебаний? Это могут быть часы с кукушкой, маятник, качели

и даже круги на воде от камушка, который мы кинули в воду:

Более подробно про частоту и период можно прочитать в статье Электрические сигналы и их виды.

Так, теперь ближе к делу. Что же такое тактовая частота?

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

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

В МК AVR тактовая частота в основном измеряется в МегаГерцах. Как помните, приставка “Мега” означает один миллион. Если у нашего МК тактовая частота 8 МегаГерц, то это означает, что он может выполнять 8 000 000 тактов в секунду, или, грубо говоря, около 8 000 000 различных операций в секунду ;-). Пусть вас не пугает это число, потому что ваши настольные компьютеры, телефоны и планшеты уже работают на частоте в несколько ГигаГерц. Гига – это уже миллиард! Например, если частота процессора вашего компа 2 ГГц, это означает, что он может произвести 2 миллиарда операций в секунду). Мало? Как оказалось на практике, уже стает мало)).

Вернемся к нашим баранам), а именно, к тактовой частоте. Допустим, мы имеем МК Tiny 2313, сконфигурированный на работу 8 МегаГерц и который может выполнять при этом 8 миллионов тактов в секунду. Каждая операция процессора состоит из тактов. А когда процессор выполняет нашу программу, записанную во Flash память, он тоже производит определенные операции которые указаны в программе. Граничная частота МК Tiny 2313, как говорит нам Datasheet, довольно высокая и составляет аж целых 20 МГц! Это довольно много по меркам МК

Правда, это только с применением внешнего кварцевого резонатора.

Кварцевый резонатор, называемый часто просто кварц, может выглядеть по-разному:

На схемах он обозначается так:

На кварце часто указана частота, на которой он работает. Ниже на фото мы видим кварц, который работает на частоте 8 МегаГерц (8.000MHz)

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

Есть один нюанс, любезно предоставленный нам производителями микроконтроллера. Если нам нужно, чтобы программа выполнялась медленнее в восемь раз, мы можем этого добиться даже не переписывая программу и не выставляя задержки по новой, то есть в 8 раз длиннее. Нам достаточно уменьшить частоту МК в восемь раз и программа будет для нас выполняться медленнее в восемь раз. Забегая вперед, скажу, что сделать это мы можем очень легко, выставив всего одну галочку при программировании фьюз-битов, в бите CKDIV 8. Также легко мы можем отменить все наши изменения.

Этот способ мы использовали при прошивке МК в прошлой статье.

Существуют 4 варианта, которые применяются для тактирования МК:

– тактирование от внутреннего RC-генератора

– тактирование от внешнего кварца

– тактирование от внешнего генератора

– тактирование от RC-цепочки

Тактирование от внутреннего RC-генератора

На тактирование от внутреннего RC генератора МК настроен сразу с завода и не требует внешних деталей. Это означает, что с помощью МК, питания +5 Вольт и одного светодиода с резистором, мы уже можем заставить наш МК работать и выполнять программу без всяких сложных настроек и дополнительных деталей, задав скорость программно, путем выставления задержки “Delay”. Имейте ввиду, что встроенный RC-генератор может работать только на четырех частотах: 1, 2, 4 или 8 МегаГерц, поэтому если вам требуется какая-нибудь эксклюзивная частота, типа 1 638 000 Герц, то такой способ не прокатит.

Тактирование от внешнего кварца

Тактирование от внешнего кварца чуточку сложнее. Как же нам подключить внешний кварц? Для начала нам надо найти цоколевку МК, которую мы собираемся тактировать от внешнего кварца. Пусть в нашем примере это будет Тiny 2313. Чтобы подключить внешний кварц, достаточно найти ножки микросхемы с названием “XTAL1” и “XTAL2”.

Потом подсоединить кварц вот по такой схеме:

Потом при прошивке надо правильно выставить фьюзы. О них мы с вами поговорим в следующих статьях.

На реальных платах можно увидеть примерно вот такие схемы расположения элементов с тактированием от кварца. Здесь изображен МК AVR в корпусе TQFP , конденсаторы в SMD исполнении, скорее всего в корпусе 0805, и кварц.

А здесь изображен МК в корпусе DIP , два керамических конденсатора, так называемые “желтые капельки”, и кварц.

Как видно на схеме подключения кварца к МК, номинал нужных нам конденсаторов должен составлять 15-22 пикофарада. Расшифровать номинал таких конденсаторов, можно с помощью этого рисунка:

Тактирование от внешнего генератора

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

Тактирование от RC-цепи

Тактирование от RC-цепочки осуществляется вот по такой схеме:

Здесь мы берем конденсатор емкостью не менее 22 пФ, а резистор от 10 Ом и до 100 КилоОм. По простой формуле можно с легкостью рассчитать частоту, на которой будет тактироваться наш МК:

R – сопротивление резистора, Ом.

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

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

Итак, как мы помним из предыдущей статьи, некоторые ножки имеют двойное назначение, и помимо того, что могут использоваться как порты ввода-вывода, также используются для обеспечения расширения функций МК. Действительно, если МК сконфигурирован для работы от внутреннего RC-генератора, вам достаточно подать на него питание +5 Вольт и землю, и микроконтроллер включится и начнет выполнять программу. Но если вы выпаяли микроконтроллер из какого-либо устройства и он должен был в нем тактироваться от кварца, или по ошибке выставляя биты конфигурации, вы выставили тактирование от кварца, МК перестанет у вас быть виден в программе оболочке, и не сможет выполнять программу, даже если вы подадите на него +5 Вольт и землю.

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

Источник

Adblock
detector