052-Як запустити непрацюючий часовий кварц (32768 гц)
Здавалося-б, банальне справу, запустити часовий кварц. Які можуть бути проблеми? Є мікроконтролер і дві його ніжки, які спеціально призначені для підключення кварцу. Є часовий кварц. Припаяти кварц - справа двох секунд. Ще хвилина потрібна для того, щоб додати пару рядків ініціалізації таймера в програму. Ось ніби і все. АЛЕ, після того як я три дні запускав цей довбаний часовий кварц, я зрозумів, що питання не таке просте, як я думав.
А передісторія була такою. Друг попросив мене зробити йому прості годинник, без наворотів, на 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< 2.2 предільника таймера 2. 2.3 Робота годин в режимі сну PowerSave. / * Точка виходу з переривання по переповнення таймера2 * / / * Записуємо будь значення в OCR2A. * / OCR2A = 0; / * Чекаємо поки обнулится OCR2AUB. * / While (ASSR (1< 3 Різне. 3.2 Ну і наостанок. майте під рукою кілька різних кварців, можливо, Ваш кварц не починається через те, що він спалень. Спробуйте його замінити. Ось, начебто, і все граблі, за якими я потоптався, поки запускав часовий кварц. Або ще щось додати? (Visited 4 856 times, 1 visits today) Навігація по публікаціям цікаво, але з китайським кварцом від дешевих годин таймер запустився відразу (і точність до речі дуже навіть непогана), а ось покупної кварц «радянського типу» запускатся ніяк не хоче, правда не пробував з зовнішніми конденсаторами. Про китайський кварц - це я з особистого досвіду. Робив годинник з цифровою корекцією. Так ось я не міг корекцією точно скорегувати догляд часу - він плавав. Хоча, це напевно, на який кварц нарвешся. Євген, здрастуйте! Ви написали, як запустити кварц, а як перевірити працює він чи ні не напісалі.я недавно почав займатися МК, тому багато чтого не знаю.Напішіте ласка, як Ви перевіряєте роботу кварцового генератора у мікроконтроллера.На сайтах пишуть, що осцилограф буде садити напруга з генератора і він перестане работать.На іншому сайті знайшов, що можна вобще під'єднати світлодіод з резистором до ген.еслі буде світитися, значить ген работает.Я пробував мультиметром міряти на кварце.На одній нозі показує 0.7В, на інший 2.4В Якщо мова йде про кварці для генератора, що задає мікроконтролера, то тут все просто - мікроконтролер просто не буде програмуватися при неробочому кварці. Євген, я дійсно питав про перевірку кварцу задає МК.Есть пристрій на МК і РК індикаторі (WH1602) На індикаторі горять верхні сегменти і нічого не показивает.Как перевірити, працює генератор, що задає МК чи ні? А мікроконтролер програмується? Що за мікроконтролер? Так, МК програмується і Новомосковскется.PIC16F876A.Дело не в конкретному МК, а взагалі як перевірити генератор, що задає. Осцилографом. Вольтметром (повинно бути присутнім половинне харчування). Я писав уже, що перевіряв мультіметром.На одній нозі показує 0.7В, на інший 2.4в.Так і має бути? Так, але це ще не означає, що він робочий. ... А як же його перевірити без осцилографа? Виходить, ніяк? Кварц з конденсаторами і є вся необхідна для роботи обв'язування. Ніяк не можу запустити кварц хоча до цього 2 тижні все працювало прекрасно, все по «феншую» короткі доріжки, 2 кондера 22пф 1206, кварц припаяний до мінуса. Просто перестав запускатся і все тут, пробував замінити те ж саме Ж ((((((((((головне якщо чемнібуть металевим торкнуться однієї з ніг на зразок цокає але варто прибрати тутже перестає або після 1000 торкань дивом запускається. ВАЩЕ ЖООООООООООООООООО З харчування нічого не змінювалося? Може конденсатори додати? З харчуванням проблема: O мк задуманий на харчування від 3,3 (LP2985) АЛЕ до вводів мк підключений через резистори триста тридцятого 7місегментнік з обшим плюсовим (катодом або анодом хз планував із загальним мінусом але нетот сегментнік взяв) підключеним до + 5 через дідод (харчування від УСБ а саме від вибору програм авр910 (PROTTOSS) який підключений до мк). Але до цього працювало все стабільно при включенні харчування кварц пускался.фільтра по харчуванню на платі з мк нет.От 910го 10см шлейфу до мк і рівно столькоже від мк до 7сегментніка. Добрий день. у мене індикатор загальний анод. Все зробив нормально і Fuse. годинного кварц поставив правильно. не працює. може у вас є готовий проект на мікроконтролер Atmega8 і Fuse якщо можна. заздалегідь дякую. Фьзи тут ні до чого, мікроконтролер для роботи з годинниковим кварцом налаштовується в програмі - лістинг в статті. Дякуємо. ще одне питання у мене програматор ChipBlaster clone У мегу8 не влазять 6кБ HEX? У мене код для USB HID пристрій а тому такий великий .hex code. Ось така проблема говорити що «Programmer Evaluation version file size limit exceeded У вас є програма для USB HID? дуже потрібно заранее спасибо. Ось така проблема говорити що «Programmer Evaluation version file size limit exceeded« Ви користуєтеся пробною версією програми (або програматора) у якій встановлено обмеження на величину прошивки. Кварц не так дорого коштує щоб його ремонтувати, по-цьому краще купити ніж паяти. Скажіть, який є спосіб перешити фьюз, (випадково) запрограмовані на низькочастотний кварц? У програмі не було передбачено його присутність! намагався подати на xtal1 1МГц (потім 1 кГц) з зовнішнього МК - це могло вплинути на його роботу? Якщо ніякими способами не виходить програмувати від зовнішніх тактових сигналів, то фьюз можна буде змінити тільки високовольтним программатором. Запустив свій кварц. Допоміг пункт 1.4 Не чекав що флюс з грязькой може так впливати. Перед цим пробував всі пункти. Але тільки спиртом протер, запрацювало без проблем, і без всяких кондерів.
Для того, щоб переривання по переповнення таймера2 відбувалися раз в секунду, значення предільника має бути 128. (128пределітель * 256переполненіе = 32768частота кварцу).
Дуже заманливо в паузах між секундними переривань переводити мікроконтролер в режим сну, в цьому випадку струм мікроконтролера впаде до 6-7мкА. Для такого випадку є режим зниженого споживання PowerSave, в ньому таймер2 продовжує працювати від часового кварцу і пробуджує мікроконтролер перериванням. Алгоритм такого режиму роботи простий, після виходу з режиму сну по перериванню від таймера в процедурі обробки переривання «тика» годинами, виходимо з переривання і знову даємо команду заснути (SLEEP). Ось тут є дуже важливий нюанс. Знову дивимося даташит на мікроконтролер в розділі режимів зниженого споживання і роботи асинхронного режиму. Для того щоб таймер після пробудження почав нормально функціонувати і був здатний вивести мікроконтролер з сну при наступному перериванні потрібно до команди засипання почекати певний час. Для того, щоб переконається в тому що генератор працює нормально потрібно зробити запис в будь-який регістр таймера, з тих, які не порушать роботу годин (наприклад в OCR2x) і дочекатися скидання прапорів готовності даного регістра (OCR2xUB). Після того як прапор скинув можна сміливо переводити мікроконтролер в режим сну.
3.1 Не використовуйте дешеві китайські кварци (особливо Випаяв зі старих зламаних копійчаних годин). Навіть якщо вони і зароблять, точність у них буде ніяка.
Про кварци «радянського типу» нічого не скажу - ніколи не користувався.
А ось з годинниковим кварцом набагато складніше. Він дуже чутливий і при вимірі Мультиметри / осцилографами запросто можна його зупинити. Як простий варіант вирішення цієї проблеми можна порадити впаяти цей кварц у свідомо робочу схему (наприклад, ті-ж дешеві китайські годинники - годинник цокає, значить кварц працює). Або накидати невелику програмку яка - б дригав ногою мікроконтролера по перериваннях від часового кварцу.
Побічно - чи працює програмування, програма ...
У AVR мікроконтролери є ніжка, яку за допомогою установки фьюз можна зробити виходом частоти задає генератора - на ній вже точно можна, не боячись посадити сигнал, дивитися осцилографом.
У мене ще питання виникло (вибач за настирливість) .Буде чи генерація на МК без обв'язки, т.е.подключіть кварц з конденсаторами і подати харчування?
До речі всі начілось після того як наулице похолодало хз (тиск ізменілость, температура в кімнаті впала на пару градусів, перешкод більше стало, активність сонця нету.) Головне працювало до цього без нарікань.
Програма не змінювалася?
Atmega8 пам'ять 8kb а у мене 6кб hex file. він не прошиває. каже file розмір великий. що робити ?
Дивно, Хекса зазвичай більше реально займаного місця в МК (рази в два).
Решта МК шиються нормально?
У вас є програма для USB HID? дуже потрібно заранее спасибо.
«
МК - atmega 48 pu!