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

Какая точность у 32768 китай. AVR

Электроника для всех

Блог о электронике

Иногда полезно иметь в системе часы отсчитывающие время в секундах, да еще с высокой точностью. Часто для этих целей применяют специальные микросехмы RTC (Real Time Clock) вроде PCF8583. Вот только это дополнительный корпус, да и стоит она порой как сам МК, хотя можно обойтись и без нее. Тем более, что многие МК имеют встроенный блок RTC. В AVR его правда нет, но там есть асинхронный таймер, служащий полуфабрикатом для изготовления часиков.

Первым делом нам нужен часовой кварц на 32768Герц.

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

Асинхронный режим таймера
Помните как работают таймеры? Тактовая частота с основного тактового генератора (RC внешняя или внутренняя, внешний кварц или внешний генератор) поступает на предделители, а с выхода предделителей уже щелкает значениями регистра TCNT. Либо сигнал на вход идет с счетного входа Тn и также щелкает регистром TCNT

Структура же Timer/Counter2 немного отличается от остальных — у него нет счетного входа, зато есть возможность задействовать собственный тактовый генератор.

Для этого на выводы TOSC2 и TOSC1 вешается кварцевый резонатор. Низкочастотный, обычно это часовой кварц на 32768Гц. На Pinboard он смонтирован справа от контроллера и подключается перемычками. Причем тактовая частота процессора должна быть выше как минимум в четыре раза. У нас тактовая от внутреннего генератора 8Мгц, так что нас это условие вообще не парит 🙂

Часовой кварц вешается просто на выводы. Без конденсаторов и каких либо заморочек.

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

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

Конфигурирование
Для включения надо всего лишь установить бит AS2 регистра ASSR — и все, таймер работает в асинхронном режиме. Но есть тут одна фича которая мне стоила много головняков в свое время. Дело в том, что при работе от своего кварца все внутренние регистры таймера начинают синхронизироваться по своему же кварцу. А он медленный и основная программа может менять уже введенное значение гораздо быстрей чем оно обработается таймером.

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

Также буфферизируется регистры сравнения OCR2 и регистр конфигурации TCCR2

Как узнать данные уже внеслись в таймер или висят в промежуточных ячейках? Да очень просто — по флагам в регистре ASSR. Это биты TCN2UB, OCR2UB и TCR2UB — каждый отвечает за свой регистр. Когда мы, например, записываем значение в TCNT2 то TCNUB становится 1, а как только наше число из промежуточного регистра таки перешло в реальный счетный регистр TCNT2 и начало уже тикать, то этот флаг автоматом сбрасывается.

Таким образом, в асинхронном режиме, при записи в регистры TCNT2, OCR2 и TCCR2 сначала нужно проверять флаги TCN2UB, OCR2UB и TCR2UB и запись проводить только если они равны нулю. Иначе результат может быть непредсказуемым.

Да, еще один важный момент — при переключениях между синхронным и асинхронным режимом значение в счетном регистре TCNT может побиться. Так что для надежности переключаемся так:

  • Запрещаем прерывания от этого таймера
  • Переключаемся в нужный режим (синхронный или асинхронный)
  • Заново настраиваем таймер как нам нужно. Т.е. выставляем предустановку TCNT2 если надо, заново настраиваем TCCR2
  • Если переключаемся в асинхронный режим, то ждем пока все флаги TCN2UB, OCR2UB и TCR2UB будут сброшены. Т.е. настройки применились и готовы к работе.
  • Сбрасываем флаги прерываний таймера/счетчика. Т.к. при всех этих пертурбациях они могут случайно установиться
  • Разрешаем прерывания от этого таймера

Несоблюдение этой последовательности ведет к непредсказуемым и трудно обнаруживаемым глюкам.

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

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

Примеры:
Контроллер использует режим энергосбережения и отключения ядра, а пробуждается по прерываниям от асинхронного таймера. Тут надо учитывать тот факт, что если мы будем изменять значения регистров TCNT2, OCR2 и TCCR2, то уход в спячку нужно делат ТОЛЬКО после того, как флаги TCN2UB, OCR2UB и TCR2UB упадут. Иначе получится такая лажа — асинхронный таймер еще не успел забрать данные из промежуточных регистров (он же медленный, в сотни раз медленней ядра), а ядро уже отрубилось. И ладно бы конфигурация новая не применилась, это ерунда.

Читать еще:  Лучшие китайские планшеты. Какой фирмы планшет лучше выбрать и купить? Топ 5 лучших китайских бюджетных планшетов

Хуже то, что на время модификаций регистров TCNT или OCR блокируется работа блока сравнения, а значит если ядро уснет раньше, то блок сравнения так и не запустится — некому его включить будет. И у нас пропадет прерывание по сравнению. Что черевато тем, что событие мы прошляпим и будем их терять до следующего пробуждения из спячки.
А если контроллер будится прерыванием по сравнению? То он уснет окончательно. Опаньки!
Вот и лови такой глюк потом.

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

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

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

И длительность операции между Проснулись и Заснули НЕ ДОЛЖНА БЫТЬ МЕНЬШЕ чем один тик асинхронного таймера. Иначе анабиоз будет вечным. Можешь delay поставить, а можешь сделать как даташит советует:

  • Проснулись
  • Что то сделали нужное
  • Ради прикола записали что то в любой из буфферизиуемых регистров. Например, в TCNT было 1, а мы еще раз 1 записали. Ничего не изменилось, но произошла запись, поднялся флаг TCN2UB который продержится гарантированно три такта медленного генератора.
  • Подождали пока флаг упадет
  • Уснули.

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

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

И, в завершение статьи, небольшой примерчик. Запуск асинхронного таймера на Atmega16 (Как полигон используется плата Pinboard)

Проект типовой, на базе диспетчера, одно лишь отличие — диспечтер переброшен на таймер0, чтобы освободить таймер2.

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

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

052-Как запустить неработающий часовой кварц (32768 Гц).


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

А предыстория была такой. Друг попросил меня сделать ему простые часики, без наворотов, на 7-сегментных индикаторах. Плевое дело. Микроконтроллер был взят ATmega48 (умеет работать с часовым кварцем), быстренько написана программа, вытравлена печатка. После сборки часов и отладки программы (динамическая индикация, кнопки и т.д.) дошла очередь до часового кварца. До этих часиков я уже пару раз применял часовой кварц в своих проектах и ничего не предвещало беды :), но случилось непредвиденное – часовой кварц наотрез отказался запускаться. Вообще!
В попытках разобраться, что-же мешает заработать моему часовому кварцу я первым делом обратился к даташиту на микроконтроллер (ATmega48). Информации по асинхронному режиму и подключению таймера там оказалось очень мало. Дальше я начал искать решение проблемы на форумах. Вот тут было разнообразие решений и советов вплоть до ритуальных танцев с бубнами, что тоже не особо мне помогло. Пришлось путем проб и ошибок (не путать с «методом тыка»!) самому разбираться, что к чему. В результате героических потугов, наступания на какие только можно грабли и убитых трех дней, родился практический опыт подключения часового кварца, с которым я здесь и поделюсь.

Итак, какие грабли нас ожидают при запуске часового кварца?

1 Схемотехника.
1.1 Конденсаторы.
В даташите на микроконтроллер довольно пространно упоминается то, что к часовому кварцу должны быть подключены конденсаторы, а про их емкость вообще узнать трудно. Часовой кварц, скорей всего, заработает и без конденсаторов, но лучше их поставить это улучшит стабильность частоты и поможет кварцу быстрей запускаться.
Емкость конденсаторов должна быть в пределах 12-22 пФ.

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

Читать еще:  Desire 310 dual sim прошивка. Прошивка или перепрошивка телефона, смартфона и планшета HTC

1.3 Корпус часового кварца.
Железный корпус часового кварца обязательно припаяете к земле (к той к которой припаяны конденсаторы). Незаземленный корпус будет работать как антенна, внося искажения в работу кварца, ухудшая точность хода Ваших часов.

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

2 Программирование.
2.1 Инициализация асинхронного режима таймера.

Для того чтобы таймер работал от часового кварца, его (таймер) необходимо перевести в асинхронный режим. Для перевода таймера (почти у всех микроконтроллеров это таймер 2) в этот режим нужно записать 1 в бит AS2. Но не все так просто, нужно соблюсти определенный алгоритм запуска. По даташиту процедура включения асинхронного режима для таймера 2 следующая:
1. Запретить прерывания от таймера/счетчика 2 — OCIE2x, TOIE2;
2. Переключить его в асинхронный режим 1 -> AS2;
3. Записать новые значения в регистры TCNT2, OCR2x и TCCR2x;
4. Дождаться сброса флагов TCN2UB, OCR2xUB и TCR2xUB;
5. Сбросить флаги прерываний таймера/счетчика 2;
6. Разрешить прерывания (если требуется).

Обязательно соблюдайте такую последовательность. Вот листинг правильной инициализации асинхронного режима таймера2.

/* запрещаем прерывания */ cli(); /* 1. Запрещаем прерывания Timer/Counter2 обнуляя OCIE2х и TOIE2. */ TIMSK2 &=

052-Как запустить неработающий часовой кварц (32768 Гц). : 29 комментариев

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

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

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

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

Евгений,я действительно спрашивал о проверке кварца задающего генератора МК.Есть устройство на МК и ЖК индикаторе(WH1602)На индикаторе горят верхние сегменты и ничего не показывает.Как проверить, работает задающий генератор МК или нет?

А микроконтроллер программируется? Что за микроконтроллер?

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

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

Я писал уже,что проверял мультиметром.На одной ноге показывает 0.7в,на другой 2.4в.Так и должно быть?

Да, но это еще не значит, что он рабочий.

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

Кварц с конденсаторами и есть вся необходимая для работы обвязка.

Никак немогу запустить кварц хотя до этого 2 недели все работало прекрасно, все по «феншую» короткие дорожки, 2 кондера 22пф 1206,кварц припаян к минусу. Просто перестал запускатся и все тут, пробовал заменить тоже самое Ж(((((((((( главное если чемнибуть металическим коснутся одной из ног то вроде тикает но стоит убрать тутже перестает или посли 1000 касаний чудом запускается . ВАЩЕ ЖООООООООООООООООО
Кстати все начилось после того как наулице похолодало хз(давление изменилость, температура в комнате упала на пару градусов,помех больше стало,активность солнца нета . ) главное работало до этого без нареканий.

По питанию ничего не менялось? Может конденсаторы добавить?
Программа не менялась?

С питанием проблема :O мк задуман на питание от 3,3(LP2985)НО к вводам мк подключен через резисторы 330ом 7мисегментник с обшим плюсовым(катодом или анодом хз планировал с общим минусом но нетот сегментник взял) подключеным к + 5 через дидод (питание от усб а именно от программатора авр910(PROTTOSS) который подключен к мк). Но до этого работало все стабильно при включении питания кварц пускался.фильтра по питанию на плате с мк нет.От 910го

10см шлейфа до мк и ровно столькоже от мк до 7сегментника.

Здравствуйте , у меня индикатор общий анод. Все сделал нормально и Fuse , часового кварц поставил правильно . не работает . может у вас есть готовый проект на микроконтроллер Atmega8 и Fuse если можно. заранее спасибо.

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

Спасибо. ещё один вопрос у меня программатор ChipBlaster clone
Atmega8 память 8kb а у меня 6кб hex file . он не прошивает . говорит file размер большой. что делать ?

Читать еще:  Мтс приведи друга смарт для своих. Тариф МТС «Смарт для своих

В мегу8 не влазит 6кБ HEX?
Странно, хексы обычно больше реально занимаемого места в МК (раза в два).
Остальные МК шьются нормально?

У меня код для USB HID устройство а поэтому такой большой .hex code.
У вас есть программа для USB HID? очень нужно заранее спасибо .

Вот такая проблема говорить что «Programmer Evaluation version file size limit exceeded
«

У вас есть программа для USB HID? очень нужно заранее спасибо .

Вот такая проблема говорить что «Programmer Evaluation version file size limit exceeded«

Вы пользуетесь пробной версией программы (или программатора) у которой установлено ограничение на величину прошивки.

Кварц не так дорого стоит чтобы его ремонтировать, по-этому лучше купить чем паять.

Скажите, какой есть способ перешить фьюзы, (случайно) запрограммированные на низкочастотный кварц? В программе не было предусмотрено его присутствие! пытался подать на xtal1 1МГц (затем 1кГц) с внешнего МК — это могло повлиять на его работу?
МК — atmega 48 pu!

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

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

тоже долго не мог запустить кварц. Подсмотрел случайно на часы реального времени DS1307 на плате на одном из ног кварца был установлен резистор на землю 1мом. Запустились все кварцы с пол тика)))

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Какая точность у 32768 китай. AVR

Делаю фиговину на PIC16F676.
Питание от батарейки 3в
На кварц поставил 82пФ – среднее между 62пФ и 100пФ, как указано
почти во всех даташитах на PICи. Там еще сноска есть, дословно: Большая емкость увеличивает стабильность генератора, но увеличивается и время запуска. И еще: Проконсультируйтесь у производителя резонаторов. А в каком китайском подвале их искать, не пойму.
PIC запускается в интервале до 3 сек (как повезет).

Хотелось бы уменьшить время запуска, но что повлечет за собой увеличение емкости.

Может объяснит мне что к чему и как правильно выбрать емкость.

Делаю фиговину на PIC16F676.
Питание от батарейки 3в
На кварц поставил 82пФ – среднее между 62пФ и 100пФ, как указано
почти во всех даташитах на PICи. Там еще сноска есть, дословно: Большая емкость увеличивает стабильность генератора, но увеличивается и время запуска. И еще: Проконсультируйтесь у производителя резонаторов. А в каком китайском подвале их искать, не пойму.
PIC запускается в интервале до 3 сек (как повезет).

Хотелось бы уменьшить время запуска, но что повлечет за собой увеличение емкости.

Может объяснит мне что к чему и как правильно выбрать емкость.

Зачастую прямо в названии кварцев указывают, какую максимальныю емкость
можно подключать к кварцу.
Например, 0.032768-MTF32-12.5-30 здесь 12,5 указывает,
что к этому 32768гц кварцу учитывая емкость монтажа можно подключить не более 12,5 пф.
Я ставлю конденсаторы на 10пф (учитываю 2,5пф емкости монтажа) и все работает прекрасно.
Если как указано в datasheet на AVR поставить 20пф ( я применяю AVR , но суть похоже одна),
то начинаются проблемы, например могут происходить случайные срывы генерации, то раз в 5
секунд, то раз в три месяца.

Если же для кварца указана емкость 7,5пф, то ставлю конденсаторы 5пф и все работает.

Периодический срыв генерации может быть признаком, что емкость
поставлена слишком большая

Обсолютно согласен с RY9C4N.
Эта емкость указана во спецификациях на любые кварцы любой частоты, она составляет примерно от 6 до 32 пФ.

И все же прошу обратить внимание на фразы из даташитов на PICи.
Не зря наверное привели значение именно таких емкостей: 62-100пФ.

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

Если ставлю два конденсатора по 20пф, как указывал ранее начинаются проблемы со
срывом генератора через неделю и не всегда сразу, а или через несколько месяцев. Хотя, как справедливо указал R9YC4N, это эквивалентно 10пф,
нагрузки для кварца ( я же указал неправильный расчет).
Но видать добавляется емкость монтажа, которая портит всю картину, т.к.
12,5пф это МАКСИМАЛЬНАЯ нагрузка для резонатора.

С конденсаторами по 10пф таких проблем нет вовсе, работают сотни устройств.
А вот с более высокими значениями обязательно рано или поздно наступали проблемы.

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

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

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

Кстати в этих же application note указывается, что надо обращается внимание,
что на кварцы сильно влияют вибрация, встряски и удары. С чем у меня тоже были проблемы.

Я применял контроллерAVR atmega48. По опыту говорю, что большинство кварцев, которые везут в СНГ из Китая – это кварцы с максимальной нагрузкой 12,5пф (LEXUS хотел узнать, что в китайских подвалах). Самые надежные из них в цилиндрические диаметром 2 мм, если их положить на бок и приклеить. Тогда даже при падении устройства на бетон
они не выходят из строя, а другие кварцы при таком падении ломаются. ( у нас устройство носят и часто роняют).
Это все из практики.

Так, что к извращениям, как показывает практика, кварцы не очень адаптированы.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: