Какая точность у 32768 китай. AVR. Учебный Курс. Асинхронный режим таймера. Плюсы кварцевых генераторов

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

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

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

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

Для этого на выводы TOSC2 и TOSC1 вешается кварцевый резонатор. Низкочастотный, обычно это часовой кварц на 32768Гц. На он смонтирован справа от контроллера и подключается перемычками. Причем тактовая частота процессора должна быть выше как минимум в четыре раза. У нас тактовая от внутреннего генератора 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 упадут. Иначе получится такая лажа — асинхронный таймер еще не успел забрать данные из промежуточных регистров (он же медленный, в сотни раз медленней ядра), а ядро уже отрубилось. И ладно бы конфигурация новая не применилась, это ерунда.

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

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

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

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

  • Проснулись
  • Что то сделали нужное
  • Заснули

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

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

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

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

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 int main(void ) { InitAll() ; // Инициализируем периферию InitRTOS() ; // Инициализируем ядро RunRTOS() ; // Старт ядра. UDR = "R" ; // Маркер старта, для отладки SetTimerTask(InitASS_Timer, 1000 ) ; // Так как таймер в асинхронном режиме // запускается медленно, то делаем // Выдержку для запуска инициализации таймера. while (1 ) // Главный цикл диспетчера { wdt_reset() ; // Сброс собачьего таймера TaskManager() ; // Вызов диспетчера } return 0 ; }

int main(void) { InitAll(); // Инициализируем периферию InitRTOS(); // Инициализируем ядро RunRTOS(); // Старт ядра. UDR = "R"; // Маркер старта, для отладки SetTimerTask(InitASS_Timer,1000); // Так как таймер в асинхронном режиме // запускается медленно, то делаем // Выдержку для запуска инициализации таймера. while(1) // Главный цикл диспетчера { wdt_reset(); // Сброс собачьего таймера TaskManager(); // Вызов диспетчера } return 0; }

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void InitASS_Timer(void ) { if (ASSR & (1 << AS2) ) //Если это второй вход то { if (ASSR & (1 << TCN2UB | 1 << OCR2UB | TCR2UB) ) // проверяем есть ли хоть один бит флаговый { SetTask(InitASS_Timer) ; // Если есть, то отправляем на повторный цикл ожидания } else // Если все чисто, то можно запускать прерывания { TIFR |= 1 << OCF2 | 1 << TOV2; // Сбрасываем флаги прерываний, на всякий случай. TIMSK |= 1 << TOIE2; // Разрешаем прерывание по переполнению return ; } } TIMSK &= ~(1 << OCIE2 | 1 << TOIE2) ; // Запрещаем прерывания таймера 2 ASSR = 1 << AS2; // Включаем асинхронный режим TCNT2 = 0 ; TCCR2 = 5 << CS20; // Предделитель на 128 на 32768 даст 256 тиков в секунду // Что даст 1 прерывание по переполнению в секунду. SetTask(InitASS_Timer) ; // Прогоняем через диспетчер, чтобы зайти снова. }

void InitASS_Timer(void) { if(ASSR & (1<

ISR(TIMER2_OVF_vect) // Прерырвание по переполнению таймера 2 { UDR = i; i++; }

Можно было сделать переменные содержащие часы:минуты:секунды и щелкать этими переменными со всей их логикой переполнения часов/минут, но мне было лень. И так все понятно.

Что такое генератор? Генератор – это по сути устройство, которое преобразует один вид энергии в другой. В электронике очень часто можно услышать словосочетание “генератор электрической энергии, генератор частоты , ” и тд.

Кварцевый генератор представляет из себя генератор частоты и имеет в своем составе . В основном кварцевые генераторы бывают двух видов:

те, которые могут выдавать синусоидальный сигнал

и те, которые выдают прямоугольный сигнал


Чаще всего в электронике используется прямоугольный сигнал

Схема Пирса

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


Пару слов о том как работает схема. В схеме есть положительная обратная связь и в ней начинают возникать автоколебания. Но что такое положительная обратная связь?

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


Когда ставили эту прививку, нельзя было чесать место укола. Но мне, тогда еще салаге, было по барабану. Как только я начинал тихонько чесать место укола, мне хотелось чесать еще больше)) И вот скорость руки, которая чесала прививку, у меня замерла на каком-то пике, потому что совершать колебания рукой у меня максимум получалось с частотой Герц в 15. Прививка набухала на пол руки)) И даже один раз меня водили сдавать кровь в подозрении на туберкулез, но как оказалось, не нашли. Оно и неудивительно;-).

Так что это я вам тут рассказываю хохмы из жизни? Дело в том, что эта чесотка прививки самая что ни на есть положительная обратная связь. То есть пока я ее не трогал, чесать не хотелось. Но как только тихонько почесал, стало чесаться больше и я стал чесать больше, и чесаться стало еще больше и тд. Если бы на мою руку не было физический ограничений, то наверняка, место прививки уже бы стерлось до мяса. Но я мог махать рукой только с какой-то максимальной частотой. Так вот, такой же принцип и у кварцевого генератора;-). Чуть подал импульс, и он начинает разгоняться и уже останавливается только на частоте параллельного резонанса;-). Скажем так, “физическое ограничение”.

Первым делом нам надо подобрать катушку индуктивности . Я взял тороидальный сердечник и намотал из провода МГТФ несколько витков


Весь процесс контролировал с помощью LC-метра , добиваясь номинала, как на схеме – 2,5 мГн. Если не доставало, прибавлял витки, если перебарщивал номинал, то убавлял. В результате добился вот такой индуктивности:


Его правильное название: .

Распиновка слева-направо: Сток – Исток – Затвор


Небольшое лирическое отступление.

Итак, кварцевый генератор мы собрали, напряжение подали, осталось только снять сигнал с выхода нашего самопального генератора. За дело берется цифровой осциллограф


Первым делом я взял кварц на самую большую частоту, которая у меня есть: 32 768 Мегагерц. Не путайте его с часовым кварцем (о нем пойдет речь ниже).


Внизу в левом углу осциллограф нам показывает частоту:


Как вы видите 32,77 Мегагерц. Главное, что наш кварц живой и схемка работает!

Давайте возьмем кварц с частотой 27 Мегагерц:


Показания у меня прыгали. Заскринил, что успел:


Частоту тоже более-менее показал верно.

Ну и аналогично проверяем все остальные кварцы, которые у меня есть.

Вот осциллограмма кварца на 16 Мегагерц:


Осциллограф показал частоту ровнехонько 16 Мегагерц.

Здесь поставил кварц на 6 Мегагерц:


Ровно 6 Мегагерц

На 4 Мегагерца:


Все ОК.

Ну и возьмем еще советский на 1 Мегагерц. Вот так он выглядит:


Сверху написано 1000 Килогерц = 1МегаГерц;-)


Смотрим осциллограмму:


Рабочий!

При большом желании можно даже замерять частоту китайским генератором-частотомером :


400 Герц погрешность для старенького советского кварца не очень и много. Но лучше, конечно, воспользоваться нормальным профессиональным частотомером;-)

Часовой кварц

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


“Что еще за часовой кварц?” – спросите вы. Часовой кварц – это кварц с частотой в 32 768 Герц. Почему на нем такая странная частота? Дело все в том, что 32 768 это и есть 2 15 . Такой кварц работает в паре с 15-разрядной микросхемой-счетчиком. Это наша микросхема К176ИЕ5.

Принцип работы этой микросхемы такой: п осле того, как она сосчитает 32 768 импульсов, на одной из ножек она выдает импульс. Этот импульс на ножке с кварцевым резонатором на 32 768 Герц появляется ровно один раз в секунду . А как вы помните, колебание один раз в секунду – это и есть 1 Герц. То есть на этой ножке импульс будет выдаваться с частотой в 1 Герц. А раз это так, то почему бы не использовать это в часах? Отсюда и пошло название – .

В настоящее время в наручных часах и других мобильных гаджетах этот счетчик и кварцевый резонатор встроены в одну микросхему и обеспечивают не только счет секунд, но и целый ряд других функций, типа будильника, календаря и тд. Такие микросхемы называется RTC (R eal T ime C lock) или в переводе с буржуйского Часы Реального Времени.

Схема Пирса для прямоугольного сигнала

Итак, вернемся к схеме Пирса. Предыдущая схема Пирса генерирует синусоидальный сигнал

Но также есть видоизмененная схема Пирса для прямоугольного сигнала

А вот и она:

Номиналы некоторых радиоэлементов можно менять в достаточно широком диапазоне. Например, конденсаторы С1 и С2 могут быть в диапазоне от 10 и до 100 пФ. Тут правило такое: чем меньше частота кварца, тем меньше должна быть емкость конденсатора. Для часовых кварцев конденсаторы можно поставить номиналом в 15-18 пФ. Если кварц с частотой от 1 до 10 Мегагерц, то можно поставить 22-56 пФ. Если не хотите заморачиваться, то просто поставьте конденсаторы емкостью в 22 пФ. Точно не прогадаете.

Также небольшая фишка на заметку: меняя значение конденсатора С1 можно настраивать частоту резонанса в очень тонких пределах.

Резистор R1 можно менять от 1 и до 20 МОм, а R2 от нуля и до 100 кОм. Тут тоже есть правило: чем меньше частота кварца, тем больше значение этих резисторов и наоборот.

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


Вот ее распиновка:

Подключив к этой схеме часовой кварц, осциллограф выдал вот такую осциллограмму:


Кстати, вам эта часть схемы ничего не напоминает?

Не эта ли часть схемы используется для тактирования микроконтроллеров AVR ?

Она самая! Просто недостающие элементы схемы уже есть в самом МК;-)

Плюсы кварцевых генераторов

Плюсы кварцевых генераторов частоты – это высокая частотная стабильность. В основном это 10 -5 – 10 -6 от номинала или, как часто говорят, ppm (от англ. parts per million) - частей на миллион, то есть одна миллионная или числом 10 -6 . Отклонение частоты в ту или иную сторону в кварцевом генераторе в основном связано с изменением температуры окружающей среды, а также со старением кварца. При старении кварца, частота кварцевого генератора стает чуточку меньше с каждым годом примерно на 1,8х10 -7 от номинала. Если, скажем, я взял кварц с частотой в 10 Мегагерц (10 000 000 Герц) и поставил его в схему, то за год его частота уйдет примерно на 2 Герца в минус;-) Думаю, вполне терпимо.

В настоящее время кварцевые генераторы выпускают в виде законченных модулей. Некоторые фирмы, производящие такие генераторы, достигают частотной стабильности до 10 -11 от номинала! Выглядят готовые модули примерно так:


или так

Такие модули кварцевых генераторов в основном имеют 4 вывода. Вот распиновка квадратного кварцевого генератора:

Давайте проверим один из них. На нем написано 1 МГц


Вот его вид сзади:


Вот его распиновка:

Подавая постоянное напряжение от 3,3 и до 5 Вольт плюсом на 8, а минусом на 4, с выхода 5 я получил чистый ровный красивый меандр с частотой, написанной на кварцевом генераторе, то бишь 1 Мегагерц, с очень небольшими выбросами.


Ну прям загляденье!

Да и китайский генератор-частотомер показал точную частоту:


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

В этом маленьком эссе с фотографиями, я покажу широкой общественности, как лечить довольно часто встречающуюся «болячку» цифровых электронных часов - неточный ход. Часы могут отставать или спешить и чаще всего на небольшие погрешности хода мы не обращаем внимания, но когда часы отстают на 5 (пять) минут в сутки, это начинает раздражать.
Готовы? Поехали!

Интро

Эти часы я купил для того, чтобы поностальгировать по старым советским временам, когда и солнце было зеленее и трава ярче… или наоборот?.. неважно! Главное, что радости не получилось - часы гнусно отставали. Более, чем на 5 минут в сутки. Надо лечить, подумал я.



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

Для лечения часов нам понадобится :

Обязательно
+ паяльник. желательно не сильно мощный, 25-40 ватт вполне достаточно. 60 уже будет многовато.
+ кварцевый резонатор на замену. продаётся или в китае или в любом радиомагазине. стоит недорого, называется «часовой кварц».
+ тонкая крестовая (phillips) отвёртка или тонкая плоская отвёртка. крестовая предпочтительнее.

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

Разбираем часы

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


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

Вынимаем часы из корпуса.


Корпус, заднюю крышку, шурупчики задней крышки и пищалку убираем в сторону.

Выкручиваем четыре шурупа - три держат литиевую батарейку 2016, один держит лапку-пружину для подачи сигнала на пищалку.


Убираем это всё в сторону. Рассматриваем плату. Больше шурупчиков не видно, значит это хорошо.

Аккуратно пинцетом снимаем плату с пластиковой обоймы.


Внутри обоймы мы видим токопроводящую резинку, которая передаёт сигнал на ЖКИ и собственно сам ЖК индикатор.
Резинку пальцами не трогаем, ибо нефиг. Попадёт соринка или грязь, отвалится какой-нибудь сегмент на индикаторе и опять разбирать… нафиг надо…
В синей термоусадке - катушка, которая даёт звук. Трогать её тоже не надо. повредить проще простого, проводки там тоньше волоса.
А вот металлический цилиндрик на ножках и есть наш кварцевый резонатор, который надо менять.

Для замены кварца я решил использовать донорский кварц со старой материнской платы, которая сдохла лет десять назад и я её потихоньку растаскиваю на мелкую комплектуху.


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


Прикладываем кварц к плате. Подходит. укладываем кварц в обойму, тоже подходит! Отлично! Меняем!

Для замены просто выпаиваем один кварц и впаиваем другой.
Полярности нет, никаких особенностей нет. Процедура проста и не требует особой квалификации.


Вуаля! кварц заменён. Выравниваем корпус кварца, чтобы он был чуть ниже платы и не касался батарейки.

Обратная сборка

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


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

Переворачиваем блок и смотрим - часы должны запуститься. Если этого не произошло, значит или перевёрнута батарейка или не впаян кварц или он нерабочий или статикой убило плату:)
Ну а если всё заработало, аккуратно ставим плату в корпус часов, центруем её так, чтобы цифры были параллельно краю, потом устанавливаем пищалку обратно, прикручиваем крышку…

Ну вот и всё!
Мы победили большую проблему)))

За сутки часы не ушли ни вперёд ни назад, идут ровно и точно. Понаблюдаю ещё и потом отпишусь по поводу точности.

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

За рамками этой «мурзилки» осталась плёнка, которую китайцы не сняли с ЖКИ, когда ставили его в обойму. Я эту плёнку убрал и контрастность экрана несколько увеличилась. Плёнку почти не видно, но на моих часах она была.

UPD .
За прошедшие четверо суток, с момента замены кварца, часы убежали вперёд на две секунды. 15 секунд в месяц.
Для копеечных часов и бесплатного кварца, считаю результат удовлетворительным. Лично меня он вполне удовлетворяет)))
Можно, конечно, поискать на барахолках кварцевые часы за копейки, надрать оттуда кучу кварцев и экспериментировать с точностью… но это оставим перфекционистам и упоротым фрикам)))

В комментариях приведена рецептура более тонкой подстройки точности, путём впаивания миниатюрных керамических конденсаторов. Как альтернатива замене кварца - вполне жизнеспособно и здраво. Главное, чтобы было место, куда эти конденсаторы разместить. Ну и наличие оных…

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

Планирую купить +16 Добавить в избранное Обзор понравился +91 +166

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

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

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

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

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

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 &= ~((1 << OCIE2A) | (1 << OCIE2B) | (1 << TOIE2) ) ; /* 2. Переводим Timer/Counter2 в асинхронный режим устанавливая AS2. */ ASSR = (1 << AS2) ; /* Даем немного времени для стабилизации работы генератора (можно опустить). */ _delay_ms(1000 ) ; /* 3. Записываем новые значения TCNT2, OCR2x, and TCCR2B. */ TCNT2 = 0 ; /* устанавливаем пределитель = 128 32.768 kHz / 128 / 256 = переполнение раз за секунду. */ TCCR2B |= (1 << CS22) | (1 << CS20) ; /* 4. Чтобы быть уверенным, что часы заработали ждем пока обнулятся биты: TCN2UB, OCR2AUB, OCR2BUB, TCR2AUB и TCR2BUB. */ while (ASSR & 0x1F ) ; /* 5. Обнуляем флаги прерываний Timer/Counter2. */ TIFR2 |= ((1 << OCF2A) | (1 << OCF2B) | (1 << TOV2) ) ; /* 6. Разрешаем прерывание по переполнению таймера 2 */ TIMSK2 |= (1 << TOIE2) ; /* разрешаем прерывания */ sei() ;

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

2.2 Пределитель таймера 2.
Для того, чтобы прерывания по переполнению таймера2 происходили раз в секунду, значение пределителя должно быть 128. (128пределитель*256переполнение=32768частота кварца).

2.3 Работа часов в режиме сна PowerSave.
Очень заманчиво в паузах между секундными прерываниями переводить микроконтроллер в режим сна, в этом случае ток микроконтроллера упадет до 6-7мкА. Для такого случая есть режим пониженного потребления PowerSave, в нем таймер2 продолжает работать от часового кварца и пробуждает микроконтроллер прерыванием. Алгоритм такого режима работы простой, после выхода из режима сна по прерыванию от таймера в процедуре обработки прерывания «тикаем» часами, выходим из прерывания и опять даем команду заснуть (SLEEP). Вот тут есть очень важный нюанс. Опять смотрим даташит на микроконтроллер в разделе режимов пониженного потребления и работы асинхронного режима. Для того чтобы таймер после пробуждения начал нормально функционировать и был способен вывести микроконтроллер из сна при следующем прерывании нужно до команды засыпания выждать определенное время. Для того, чтобы убедится в том что генератор работает нормально нужно сделать запись в любой регистр таймера, из тех, которые не нарушат работу часов (например в OCR2x) и дождаться сброса флагов готовности данного регистра (OCR2xUB). После того как флаг сбросился можно смело переводить микроконтроллер в режим сна.

/* Точка выхода с прерывания по переполнению таймера2 */ /* Записываем любое значения в OCR2A. */ OCR2A = 0; /* Дожидаемся пока обнулится OCR2AUB. */ while(ASSR & (1<

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

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

Вот, вроде, и все грабли, по которым я потоптался, пока запускал часовой кварц. Или еще что-то добавить?


(Visited 9 508 times, 1 visits today)

Рассказываем об основных принципах работы кварцевого механизма в наручных часах


Изображение: multi-master.ru

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

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

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


Схема работы простого кварцевого механизма (с секундной стрелкой на отметке “6 часов”). Изображение: Encyclopedia Britannica

Батарейка


Батарейка (на примере механизма ETA Flatline 210.001). Изображение: eta.ch

Источник энергии - батарейка. Энергия не механическая, как в случае пружины, а электрическая. Тем не менее все равно энергия. Батарейка может быть “таблеткой”, а может, например, солнечной. Это лишь детали.

Кварц


Генератор с кварцевым резонатором (на примере механизма ETA Flatline 210.001). Изображение: eta.ch

Колебательная система - генератор с кварцевым резонатором, или сокращенно кварц.

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


Микропроцессор / двоичный счетчик (на примере механизма ETA Flatline 210.001). Изображение: eta.ch

32 768 - это 2 в 15-й степени, что важно, поскольку в схеме присутствует также простейший двоичный счетчик, он же делитель, на выходе из которого частота снижется до 1 герца - до секундного такта.

Электродвигатель


Шаговый электродвигатель (на примере механизма ETA Flatline 210.001). Изображение: eta.ch

С этой частотой в 32 768 герц - раз в секунду - импульсы подаются на шаговый электродвигатель, который является аналогом спуска.

Android