Компьютеры и современные гаджеты

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

А предыстория была такой. Друг попросил меня сделать ему простые часики, без наворотов, на 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 748 times, 1 visits today)

Иногда полезно иметь в системе часы отсчитывающие время в секундах, да еще с высокой точностью. Часто для этих целей применяют специальные микросехмы 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++; }

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

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

Интро

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



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

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

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

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

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

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


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

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


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

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


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

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


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

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


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


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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
Компьютеры и современные гаджеты