AVR. Trening kursi

13.10.2023

Soat kvartsini ishga tushirish arzimas masaladek tuyuladi. Qanday muammolar bo'lishi mumkin? Mikrokontroller va uning ikkita oyog'i mavjud bo'lib, ular kvartsni ulash uchun maxsus mo'ljallangan. Kvars soati bor. Kvarsni lehimlash ikki soniya masalasidir. Dasturga taymerni ishga tushirishning bir necha qatorini qo'shish uchun yana bir daqiqa kerak bo'ladi. Hammasi shu kabi ko'rinadi. LEKIN, bu la'nati soat kvartsini uch kun davomida ishlatganimdan so'ng, masala men o'ylagandek oddiy emasligini angladim.

Va fon shunday edi. Bir do'stim mendan 7 segmentli ko'rsatkichlarga ega oddiy soat yasashni so'radi. Katta gap yo'q. Mikrokontroller ATmega48 (kvars soati bilan ishlay oladi) olindi, dastur tezda yozildi va belgi chizilgan. Soatni yig'ib, dasturni tuzatgandan so'ng ( dinamik displey, tugmalar va boshqalar) soat kvartsi vaqti keldi. Ushbu soatdan oldin men o'z loyihalarimda bir necha marta soat kvartsidan foydalanganman va hech qanday muammo belgilari yo'q edi :), lekin kutilmagan voqea sodir bo'ldi - soat kvartsi boshlashdan qat'iyan bosh tortdi. Umuman!
Mening soatim kvartsning ishlashiga nima xalaqit berayotganini aniqlashga urinib, birinchi navbatda mikrokontroller (ATmega48) uchun ma'lumotlar varag'iga murojaat qildim. Asenkron rejim va taymerni ulash haqida juda kam ma'lumot bor edi. Keyin forumlarda muammoga yechim izlay boshladim. Bu erda turli xil echimlar va maslahatlar, shu jumladan daflar bilan marosim raqslari bor edi, bu ham menga yordam bermadi. Sinov va xato orqali nima ekanligini aniqlashim kerak edi ("poke usuli" bilan adashtirmaslik kerak!). Qahramonlik sa'y-harakatlari, mumkin bo'lgan har bir rakega qadam qo'yish va uch kunni o'ldirish natijasida soat kvartsini ulashda amaliy tajriba tug'ildi, men bu erda baham ko'raman.

Xo'sh, soat kvartsini ishga tushirishda bizni qanday rake kutmoqda?

1 Sxema dizayni.
1.1 Kondensatorlar.
Mikrokontrollerning ma'lumotlar jadvalida kondensatorlar soat kvartsiga ulanishi kerakligi haqida ma'lum uzunlikda aytilgan, ammo ularning sig'imi haqida bilish odatda qiyin. Kvars soati, ehtimol, kondansatkichlarsiz ishlaydi, lekin ularni o'rnatish yaxshiroqdir, bu chastota barqarorligini yaxshilaydi va kvartsni tezroq ishga tushirishga yordam beradi.
Kondensatorlarning sig'imi 12-22 pF oralig'ida bo'lishi kerak.

1.2 Kvars uchun treklarning joylashuvi.
Bu erda ma'lumotlar jadvali va apnots bizga aniq ko'rsatmalar beradi. Mikrokontroller oyoqlaridan kvartsgacha bo'lgan yo'llar minimal uzunlikda bo'lishi kerak, kondensatorlar uchun tuproq yo'li alohida bo'lishi kerak, ya'ni u orqali begona oqimlar o'tmasligi kerak (ayniqsa, yuqori oqim va yuqori chastotali zanjirlar uchun).

1.3 Kvarsli soat qutisi.
Soat kvartsining temir korpusini erga (kondensatorlar lehimlanganiga) lehimlashni unutmang. Asossiz korpus antenna vazifasini bajaradi va kvartsning ishlashiga buzilishlarni keltirib chiqaradi va soatingizning aniqligini buzadi.

1.4 Doskadagi axloqsizlik.
Kvars soati juda nozik narsa va oyoqlar orasidagi bir necha megaohm qarshilik uni to'xtatish uchun etarli. Amaliyot shuni ko'rsatadiki, suyuqlik oqimi, agar yomon yuvilgan bo'lsa, kvarts ishlamasligi uchun etarli qarshilik ko'rsatadi. Lehimlashdan keyin taxtani yaxshilab yuvib tashlang. Ko'pincha, oqimlar kislotani o'z ichiga oladi, bu oyoqlar orasidagi o'tkazuvchanlikni beradi. Kislota neytrallash uchun taxtani zaif soda eritmasi bilan yuvib tashlang va toza suv bilan yaxshilab yuvib tashlang.

2 Dasturlash.
2.1 Asinxron taymer rejimini ishga tushirish.

Taymer soat kvartsidan ishlashi uchun uni (taymer) asenkron rejimga o'tkazish kerak. Taymerni (deyarli barcha mikrokontrollerlar uchun bu taymer 2) ushbu rejimga o'tkazish uchun siz AS2 bitiga 1 yozishingiz kerak. Lekin hamma narsa juda oddiy emas, siz ma'lum bir ishga tushirish algoritmiga amal qilishingiz kerak. Ma'lumotlar jadvaliga ko'ra, 2-taymer uchun asinxron rejimni yoqish tartibi quyidagicha:
1. Taymer/taymerdan uzilishlarni o'chiring 2 - OCIE2x, TOIE2;
2. Uni asinxron rejimga o'tkazing 1 -> AS2;
3. TCNT2, OCR2x va TCCR2x registrlariga yangi qiymatlarni yozing;
4. TCN2UB, OCR2xUB va TCR2xUB bayroqlari qayta tiklanmaguncha kuting;
5. Taymer/taymer 2 uzilish bayroqlarini qayta o'rnatish;
6. Uzilishlarni yoqish (agar kerak bo'lsa).

Ushbu ketma-ketlikka rioya qilishga ishonch hosil qiling. Bu erda taymer2 ning asinxron rejimini to'g'ri ishga tushirish ro'yxati keltirilgan.

/* uzilishlarni o'chirish */ cli(); /* 1. OCIE2x va TOIE2 ni qayta o'rnatish orqali Timer/Counter2 uzilishlarini o'chiring. */ TIMSK2 &= ~((1<< OCIE2A) | (1 << OCIE2B) | (1 << TOIE2) ) ; /* 2. AS2 ni o'rnatish orqali Timer/Counter2 ni asinxron rejimga o'tkazamiz. */ ASSR = (1<< AS2) ; /* Generator barqarorlashishi uchun biroz vaqt bering (o'tkazib yuborilishi mumkin). */ _delay_ms(1000); /* 3. Yangi TCNT2, OCR2x va TCCR2B qiymatlarini yozing. */ TCNT2 = 0; /* cheklovchini o'rnating = 128 32,768 kHz / 128 / 256 = soniyada bir marta toshib ketish. */ TCCR2B |= (1<< CS22) | (1 << CS20) ; /* 4. Soat ishlay boshlaganiga ishonch hosil qilish uchun bitlar tozalanguncha kuting: TCN2UB, OCR2AUB, OCR2BUB, TCR2AUB va TCR2BUB. */ esa (ASSR & 0x1F ); /* 5. Timer/Counter2 uzilish bayroqlarini tiklang. */ TIFR2 |= ((1<< OCF2A) | (1 << OCF2B) | (1 << TOV2) ) ; /* 6. Taymer 2-toshib ketish uzilishini yoqish */ TIMSK2 |= (1<< TOIE2) ; /* uzilishlarni yoqish */ sei();

/* uzilishlarni o'chirish */ cli(); /* 1. OCIE2x va TOIE2 ni qayta o'rnatish orqali Timer/Counter2 uzilishlarini o'chiring. */ TIMSK2 &= ~((1<

2.2 Taymer chegarasi 2.
Taymer 2-ning to'lib-toshgan uzilishlari soniyada bir marta sodir bo'lishi uchun cheklovchining qiymati 128 bo'lishi kerak (128 cheklovchi * 256 toshib ketish = 32768 kvarts chastotasi).

2.3 PowerSave uyqu rejimida soat ishlashi.
Ikkinchi uzilishlar orasidagi pauzalarda mikrokontrollerni uyqu rejimiga o'tkazish juda jozibali, bu holda mikrokontroller oqimi 6-7 mkA ga tushadi. Bunday holatda PowerSave kam iste'mol rejimi mavjud bo'lib, unda taymer 2 soat kvartsidan ishlashni davom ettiradi va mikrokontrollerni uzilish bilan uyg'otadi. Ushbu ish rejimining algoritmi oddiy: taymer uzilishi bilan uyqu rejimidan chiqqandan so'ng, uzilishni qayta ishlash protsedurasida biz soatni "belgilaymiz", uzilishdan chiqamiz va yana uxlash (SLEEP) buyrug'ini beramiz. Bu erda juda muhim nuance bor. Shunga qaramay, past iste'mol rejimlari va asenkron rejimda ishlash bo'limidagi mikrokontroller uchun ma'lumotlar jadvaliga qarang. Taymer uyg'ongandan keyin normal ishlashi va keyingi uzilishda mikrokontrollerni uyqudan uyg'otishi uchun siz uyqu buyrug'idan oldin ma'lum vaqt kutishingiz kerak. Jeneratör normal ishlashiga ishonch hosil qilish uchun siz soatni buzmaydigan istalgan taymer registriga yozishingiz kerak (masalan, OCR2x da) va ushbu registrning tayyorlik bayroqlari qayta o'rnatilishini kutishingiz kerak (OCR2xUB) . Bayroq qayta o'rnatilgandan so'ng, siz mikrokontrollerni uyqu rejimiga xavfsiz o'tkazishingiz mumkin.

/* timer2 toshib ketish uzilishi uchun chiqish nuqtasi */ /* OCR2A ga istalgan qiymat yozing. */ OCR2A = 0; /* OCR2AUB qayta tiklanmaguncha kuting. */ while(ASSR & (1<

3 Har xil.
3.1 Arzon Xitoy kvartsidan foydalanmang(ayniqsa, eski singan tiyin soatlaridan lehimlanganlar). Agar ular ishlasa ham, ular aniqlikka ega bo'lmaydi.

3.2 Va nihoyat, qo'lda bir nechta turli kvartslar bor, ehtimol sizning kvarts uxlab yotganligi sababli boshlamaydi. Uni almashtirishga harakat qiling.

Bu, shekilli, men soat kvartsini ishga tushirayotganda oyoq osti qilgan rake. Yoki qo'shadigan boshqa narsa bormi?


(9,748 marta tashrif buyurilgan, bugun 1 marta tashrif buyurilgan)

Ba'zan tizimda vaqtni soniyalarda va hatto yuqori aniqlik bilan hisoblaydigan soatning mavjudligi foydalidir. Ko'pincha, kabi maxsus RTC (Real Time Clock) mikrosxemalar. Bu shunchaki qo'shimcha holat va ba'zida bu MKning o'zi kabi qimmatga tushadi, garchi siz usiz ham qila olasiz. Bundan tashqari, ko'pgina MKlarda o'rnatilgan RTC bloki mavjud. To'g'ri, AVR-da u yo'q, lekin u soat yasash uchun yarim tayyor mahsulot bo'lib xizmat qiluvchi asinxron taymerga ega.

Avvalo, bizga 32768 Hertz da soat kvartsi kerak.

Nima uchun kvarts aynan 32768 Gts va nima uchun u qo'riqchi deb ataladi? Ha, hamma narsa juda oddiy - 32768 ikkining kuchi. Ikkidan o'n beshinchi darajagacha. Shuning uchun, 32768 Gts chastotada o'n besh bitli hisoblagich sekundiga bir marta toshib ketadi. Bu oddiy mantiqiy oqim yordamida hech qanday muammosiz soat qurish imkonini beradi. Va AVR mikrokontrollerida siz periferik reflekslar yordamida deyarli miyani ishlatmasdan soniyali soatni tashkil qilishingiz mumkin.

Asinxron taymer rejimi
Taymerlar qanday ishlashini eslaysizmi? Asosiy soat generatoridan (RC tashqi yoki ichki, tashqi kvarts yoki tashqi osilator) soat chastotasi oldindan o'lchagichlarga o'tadi va preskalerlarning chiqishidan u allaqachon TCNT registrining qiymatlarini bosadi. Yoki kirish signali Tn hisoblash kirishidan keladi va TCNT registrini ham bosadi

Buning uchun TOSC2 va TOSC1 pinlariga kvarts rezonatori osilgan. Past chastotali, odatda 32768 Gts da bir soatlik kvarts. U boshqaruvchining o'ng tomoniga o'rnatiladi va jumperlar bilan bog'lanadi. Bundan tashqari, protsessorning soat chastotasi kamida to'rt baravar yuqori bo'lishi kerak. Bizda 8 MGts ichki osilatordan soat bor, shuning uchun bu holat bizni umuman bezovta qilmaydi :)

Va asosiy kvartsning davrlari sonini hisoblashning hojati yo'q va agar u mavjud bo'lmasa, o'rnatilgan RC osilatorining suzuvchi chastotasi bilan bezovta qiling. Soat kvartsi oddiy kvartsga qaraganda ancha ixchamroq va arzonroq.


Bundan tashqari, asinxron taymerning o'z-o'zidan kvarts soatidan belgilanishi ham muhim, chunki u protsessorning soat chastotasiga muhtoj emas, ya'ni kontroller yadrosining taktini (uning eng qiyin narsasi) o'chirib qo'yish mumkin. protsessorni kutish rejimida ushlab turish, energiya sarfini sezilarli darajada kamaytirish va yangi vaqt ko'rsatkichlarini yozish uchun faqat taymer to'lib ketganda (sekundiga 1-2 marta) uyg'onish.

Konfiguratsiya
Uni yoqish uchun siz ASSR registrining AS2 bitini o'rnatishingiz kerak - va shu bilan birga, taymer asinxron rejimda ishlaydi. Ammo bu erda bir xususiyat borki, bu menga bir vaqtning o'zida juda ko'p bosh og'rig'iga olib keldi. Gap shundaki, o'zingizning kvartsingizdan ishlaganda, barcha ichki taymer registrlari o'zlarining kvartslari yordamida sinxronlasha boshlaydi. Lekin bu sekin va asosiy dastur allaqachon kiritilgan qiymatni taymer tomonidan qayta ishlanishi mumkin bo'lganidan ancha tezroq o'zgartirishi mumkin.

Ya'ni, masalan, siz TCNT2 qiymatini oldindan belgilab qo'ydingiz, 32 kHz chastotali taymeringizdagi taymer uni chaynashga ham ulgurmadi, lekin sizning algoritmingiz allaqachon ishlagan va u erda yana nimadir yozgan - natijada axlat paydo bo'lishi mumkin. TCNT2 da tugaydi. Buning oldini olish uchun yozuv buferlanadi. Bular. siz ma'lumotlarni TCNT2 ga yozgan deb o'ylaysiz, lekin aslida u vaqtinchalik registrda tugaydi va hisoblash registriga faqat sekin generatorning uchta soat siklidan keyin tushadi.

OCR2 taqqoslash registrlari va TCCR2 konfiguratsiya registrlari ham buferlangan

Ma'lumotlar allaqachon taymerga kiritilganmi yoki oraliq kataklarda osilganligini qanday aniqlash mumkin? Ha, bu juda oddiy - ASSR registridagi bayroqlardan foydalanish. Bular TCN2UB, OCR2UB va TCR2UB bitlari - ularning har biri o'z registrlari uchun javobgardir. Biz, masalan, TCNT2 ga qiymat yozganimizda, TCNUB 1 ga aylanadi va oraliq registrdagi raqamimiz TCNT2 haqiqiy hisoblash registriga o'tishi va belgilanishi bilanoq, bu bayroq avtomatik ravishda tiklanadi.

Shunday qilib, asinxron rejimda TCNT2, OCR2 va TCCR2 registrlariga yozishda avvalo TCN2UB, OCR2UB va TCR2UB bayroqlarini tekshirish va ular nolga teng bo'lsagina yozish kerak. Aks holda, natija oldindan aytib bo'lmaydigan bo'lishi mumkin.

Ha, yana bir muhim nuqta - sinxron va asinxron rejimlarni almashtirishda TCNT hisoblagich registridagi qiymat yo'qolishi mumkin. Shunday qilib, xavfsiz bo'lish uchun biz quyidagicha almashtiramiz:

  • Ushbu taymerdan uzilishlarni o'chirib qo'ying
  • Istalgan rejimga o'tish (sinxron yoki asinxron)
  • Taymerni kerak bo'lganda yana o'rnatamiz. Bular. agar kerak bo'lsa, TCNT2 oldindan o'rnating, TCCR2 ni qayta sozlang
  • Agar biz asinxron rejimga o'tsak, biz barcha TCN2UB, OCR2UB va TCR2UB bayroqlari tozalanmaguncha kutamiz. Bular. sozlamalar qo'llanildi va ishlashga tayyor.
  • Taymer/taymer uzilish bayroqlarini tiklash. Chunki barcha bu buzilishlar bilan ular tasodifan joylashishi mumkin
  • Ushbu taymerdan uzilishlarni yoqing

Ushbu ketma-ketlikka rioya qilmaslik, oldindan aytib bo'lmaydigan va aniqlash qiyin bo'lgan nosozliklarga olib keladi.

Kutish rejimlari va asinxron taymer
Chunki asinxron taymer ko'pincha turli xil saqlash rejimlarida ishlatiladi, keyin butun rake maydonini yaratadigan bitta xususiyat paydo bo'ladi.

Xulosa shuki, sekin kvarts bilan ishlaydigan taymer asosiy protsessorni ushlab turolmaydi va tashqi qurilmalarga juda ko'p bog'liqliklar mavjud - masalan, bir xil uzilishlar. Va protsessor uxlab yotganida, bu bog'liqliklarni amalga oshirib bo'lmaydi, bu esa registrlarda buzilgan uzilishlar yoki buzilgan qiymatlar kabi nosozliklarga olib keladi. Shunday qilib, asinxron taymer va uyqu rejimi bilan ishlash mantig'i shunday tuzilgan bo'lishi kerakki, uyg'onish va uni kutish rejimiga qo'yish o'rtasida asinxron taymer o'zining bir nechta soat tsikllarini ishlab chiqish va barcha vazifalarini bajarish uchun vaqtga ega bo'lishi kerak.

Misollar:
Tekshirish moslamasi quvvatni tejash va asosiy o'chirish rejimidan foydalanadi va asenkron taymerdan uzilishlar bilan uyg'onadi. Bu erda shuni hisobga olish kerakki, agar biz TCNT2, OCR2 va TCCR2 registrlarining qiymatlarini o'zgartirsak, kutish rejimi FAQAT TCN2UB, OCR2UB va TCR2UB bayroqlari tushganidan keyin amalga oshirilishi kerak. Aks holda, natijada bunday tartibsizlik bo'ladi - asinxron taymer oraliq registrlardan ma'lumotlarni olishga hali ulgurmagan (u sekin, yadrodan yuzlab marta sekinroq) va yadro allaqachon uzilgan. Va agar yangi konfiguratsiya qo'llanilmasa yaxshi bo'lardi, bu bema'nilik.

Eng yomoni shundaki, TCNT yoki OCR registrlari o'zgartirilayotganda taqqoslash blokining ishlashi bloklanadi, ya'ni agar yadro erta uxlab qolsa, taqqoslash bloki hech qachon ishga tushmaydi - uni yoqadigan hech kim bo'lmaydi. Va biz taqqoslashda uzilishni yo'qotamiz. Xavf shundaki, biz voqeani o'tkazib yuboramiz va keyingi uyqudan uyg'ongunga qadar ularni yo'qotamiz.
Agar boshqaruvchi taqqoslash uzilishi bilan uyg'onsa nima bo'ladi? Keyin u butunlay uxlab qoladi. Voy!
Shunday qilib, bu xatoni keyinroq ushlang.

Shunday qilib, quvvatni tejash rejimlariga o'tishdan oldin, siz asenkron taymerga kiritilgan qiymatlarni chaynashga ruxsat berishingiz kerak (agar ular kiritilgan bo'lsa) va bayroqlar qayta o'rnatilishini kutishingiz kerak.

Asinxron rejim va energiyani tejash bilan bog'liq yana bir hazil shundaki, kutish rejimidan chiqishda uzilish quyi tizimi sekin generatorning 1 soat tsiklida boshlanadi. Shunday qilib, biz hech narsani o'zgartirmagan bo'lsak ham, biz qishki uyquga qayta olmaymiz - biz uyg'onmaymiz, chunki ... uzilishlar ishlashga vaqt topa olmaydi.

Shunday qilib, asinxron taymer tomonidan to'xtatilganda kutish rejimidan chiqish va uxlash quyidagicha ko'rinishi kerak:

  • Uyg'ondim
  • Ular biror narsani to'g'ri qilishdi
  • Uxlab qolmoq

Va "Uyg'onish" va "Uyquga ketish" o'rtasidagi operatsiya davomiyligi asinxron taymerning bir belgisidan kam bo'lmasligi kerak. Aks holda, to'xtatilgan animatsiya abadiy bo'ladi. Siz kechikishni o'rnatishingiz mumkin yoki buni ma'lumotlar jadvalida ko'rsatilganidek qilishingiz mumkin:

  • Uyg'ondim
  • Ular biror narsani to'g'ri qilishdi
  • Faqat o'yin-kulgi uchun biz buferlangan registrlarning istalganiga biror narsa yozdik. Misol uchun, TCNTda 1 ta bor edi va biz yana 1 tani yozdik. Hech narsa o'zgarmadi, lekin yozuv sodir bo'ldi, TCN2UB bayrog'i ko'tarildi, bu sekin generatorning uch tsiklini davom ettirishi kafolatlanadi.
  • Bayroq tushguncha kuting
  • Biz uxlab qoldik.

Shuningdek, kutish rejimidan chiqishda TCNT qiymatlarini darhol o'qish tavsiya etilmaydi - bu tartibsizlik deb hisoblanishi mumkin. Asenkron taymerning bir belgisini kutish yaxshiroqdir. Yoki yuqorida yozilganidek, registrga yozib, bayroq tushishini kutib, hazil qiling.

Xo'sh, oxirgi, ammo muhim nuqta - quvvatni qo'llaganingizdan so'ng yoki chuqur kutish rejimidan chiqqaningizdan so'ng, nafaqat yadro, balki umuman butun atrof-muhit o'chirilganidan keyin sekin generatordan foydalanish tavsiya etiladi. 1 soniya(millisekund emas, balki butun bir soniya!). Aks holda, generator hali ham beqaror bo'lishi mumkin va registrlarda ko'proq tartibsizlik va axlat bo'ladi.

Va maqolaning oxirida kichik bir misol. Atmega16 da asinxron taymerni ishga tushirish (ko'pburchak taxtadan qanday foydalaniladi)

Loyiha standart bo'lib, dispetcherga asoslangan, yagona farq shundaki, dispetcher taymer2 ni bo'shatish uchun taymer0 ga o'tkazilgan.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 int main(void) (InitAll(); // Periferiyani ishga tushiring InitRTOS(); // Yadroni ishga tushiring RunRTOS(); // Yadroni ishga tushiring. UDR = "R"; // Nosozliklarni tuzatish uchun start belgisi SetTimerTask(InitASS_Timer, 1000 ); // Asinxron rejimdagi taymer // sekin boshlangani uchun biz buni qilamiz // Taymerni ishga tushirishni kechiktirish. while(1) // Asosiy dispetcher tsikli( wdt_reset() ; // It taymerini tiklash TaskManager(); // Dispetcherga qo'ng'iroq qiling) 0 ni qaytarish; )

int main(void) ( InitAll(); // Periferik InitRTOS(); // Yadroni ishga tushiring RunRTOS(); // Yadroni ishga tushiring. UDR = "R"; // SetTimerTask(InitASS_Timer) disk raskadrovka uchun markerni ishga tushiring ,1000) ; // Taymer asinxron rejimda sekin boshlangani uchun // taymerni ishga tushirishni kutamiz while(1) // Dispetcherning asosiy tsikli ( wdt_reset(); // It taymerini tiklash TaskManager(); // Chaqiruv dispetcheri ) 0 qaytaradi;

Taymerni asinxron rejimda ishga tushirish tartibi chekli holat mashinasi shaklida amalga oshiriladi. U birinchi marta ishga tushirilganda, asinxron rejim bitini o'rnatadi va tayyorgarlik ko'radi, keyin esa kutish paytida tizimni bloklamasdan navbatdan o'tib ketish imkoniyatini berish uchun dispetcher orqali yana o'zini boshlaydi.

Keyingi kirishlarda taymer registrlarining tayyor bayroq bitlari tekshiriladi. Agar ularning barchasi nolga teng bo'lsa, biz nosozliklar va noto'g'ri ijobiy holatlarning oldini olish uchun taymerni uzilish bayroqlarini qayta o'rnatamiz va keyin bizga kerak bo'lgan uzilishni yoqamiz. Va biz tashqariga chiqamiz.

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 ) ( agar (ASSR & (1.).<< AS2) ) //Agar bu ikkinchi kirish bo'lsa(agar (ASSR & (1.).<< TCN2UB | 1 << OCR2UB | TCR2UB) ) // kamida bitta bayroq biti mavjudligini tekshiring(SetTask(InitASS_Timer) ; // Agar mavjud bo'lsa, biz uni takroriy kutish davriga yuboramiz) boshqa // Agar hamma narsa aniq bo'lsa, siz uzilishlarni bajarishingiz mumkin(TIFR |= 1<< OCF2 | 1 << TOV2; // Har qanday holatda uzilish bayroqlarini qayta o'rnating. TIMSK |= 1<< TOIE2; // Haddan tashqari uzilishni yoqish qaytish; ) ) TIMSK &= ~(1<< OCIE2 | 1 << TOIE2) ; // Taymer 2 uzilishlarini o'chiring ASSR = 1<< AS2; // Asinxron rejimni yoqish TCNT2 = 0; TCCR2 = 5<< CS20; // 128 dan 32768 gacha bo'lgan preskaler soniyada 256 belgi beradi // Bu soniyada 1 ta ortiqcha uzilishni beradi. SetTask (InitASS_Timer) ; // Qayta kirish uchun uni dispetcher orqali ishga tushiring. }

bekor InitASS_Timer(void) (if(ASSR & (1.).<

ISR(TIMER2_OVF_vect) // Taymer 2-toshib ketish uzilishi ( UDR = i; i++; )

Soat:daqiqa:sekundlarni o'z ichiga olgan o'zgaruvchilarni yaratish va barcha soat/daqiqa to'lib ketish mantiqi bilan ushbu o'zgaruvchilarni bosish mumkin edi, lekin men juda dangasa edim. Va shuning uchun hamma narsa aniq.

Fotosuratlar bilan ushbu qisqa inshoda men keng jamoatchilikka raqamli elektron soatlarning juda keng tarqalgan "yarasini" - noaniqlikni qanday davolash kerakligini ko'rsataman. Soat ortda qolishi yoki shoshilishi mumkin, ko'pincha biz kichik xatolarga e'tibor bermaymiz, lekin soat kuniga 5 (besh) daqiqa orqada qolganda, u asabiylasha boshlaydi.
Tayyormisiz? Bor!

Kirish

Men bu soatni sobiq sovet davriga, quyosh yam-yashilroq, o‘tlar yorqinroq bo‘lgan paytdagi sog‘inchimni his qilish uchun sotib oldim... yoki aksincha?.. farqi yo‘q! Asosiysi, quvonch yo'q edi - soat jirkanch ortda qoldi. Kuniga 5 daqiqadan ko'proq. Men shifolashim kerak, deb o'yladim.



Oldinga qarab, men nizo ochmaganimni ta'kidlayman, yuz rubl bir xil pul emas. Muammo sifatsiz mahsulot yuborgan sotuvchida emas. Muammo sotuvchi hech qanday tarzda tekshira olmaydigan mahsulotda - xitoylik erkak/ayol o'tirib, harakatning aniqligini o'lchamaydimi?

Soatni davolash uchun bizga kerak:

Majburiy
+ lehimli temir. tercihen juda kuchli emas, 25-40 vatt etarli. 60 allaqachon juda ko'p bo'ladi.
+ kvarts rezonatorini almashtirish. Xitoyda yoki har qanday radio do'konida sotiladi. Bu arzon va "soat kvartsi" deb ataladi.
+ yupqa Phillips tornavida yoki ingichka tekis boshli tornavida. xoch afzalroqdir.

Afzal
+ o'tkir jag'li pinset - vintlarni oling (ha, korpus plastik, ramka ham plastik. Hamma joyda vintlar bor)
+ Qizil qalpoqcha soatini aniq ko'rish uchun yaxshi yoritish va statsionar kattalashtiruvchi oyna yoki zargar/soatsozning ko'zoynaklari.

Keling, soatni qismlarga ajratamiz

Orqa qopqoqni ushlab turgan to'rtta vintni burang. Qopqoqni ehtiyotkorlik bilan olib tashlang va piezoelektrik rezonatorni (tvitter) olib tashlang. Biz chiyillashni barmoqlarimiz bilan ushlamaymiz, biz uni yon qirralardan va metall taglikdan ushlab turamiz.


Shuni ta'kidlaymizki, soatda himoya qistirmalari yo'q, shuning uchun soat ichiga suv va ter kiradi. Biz tushunamizki, xitoyliklar arzonlik uchun hamma narsani tejashadi, ya'ni shisha ikki tomonlama lentada o'tirgan va tugmachalarda rezina muhrlar yo'q. Bu shuni anglatadiki, yomon ob-havo sharoitida va jismoniy ish paytida soatni olib tashlash kerak bo'ladi.

Biz soatni korpusdan chiqaramiz.


Biz korpusni, orqa qopqoqni, orqa qopqoq vintlarini va tvitni bir chetga qo'yamiz.

Biz to'rtta vintni bo'shatamiz - uchtasi 2016 yil lityum batareyasini ushlab turadi, biri tvitga signal yuborish uchun bahor yorlig'ini ushlab turadi.


Keling, bularning barchasini bir chetga surib qo'yamiz. Biz to'lovni ko'rib chiqamiz. Siz boshqa vintlarni ko'ra olmaysiz, demak, bu yaxshi.

Cımbızdan foydalanib, taxtani plastik ushlagichdan ehtiyotkorlik bilan olib tashlang.


Klipning ichida biz LCD displeyga va LCD indikatorining o'ziga signal uzatuvchi o'tkazuvchan kauchuk tasmasini ko'ramiz.
Biz elastikni barmoqlarimiz bilan tegizmaymiz, chunki bu muhim emas. Agar dog' yoki axloqsizlik kirsa, indikatorning qaysidir qismi tushib ketadi va siz uni yana ajratib olishingiz kerak ...
Moviy issiqlik qisqarishida tovush chiqaradigan lasan mavjud. Unga tegmaslik ham kerak emas. Zarar etkazish oson, u erda simlar sochdan ko'ra nozikroq.
Ammo oyoqlardagi metall silindr bizning kvarts rezonatorimiz bo'lib, uni o'zgartirish kerak.

Kvartsni almashtirish uchun men o'n yil oldin vafot etgan eski anakartdan donor kvartsdan foydalanishga qaror qildim va men uni asta-sekin kichik qismlarga ajrataman.


Bu erda kvarts soatlarga qaraganda biroz kattaroqdir.
Bu erda, taqqoslash uchun, allaqachon anakart va soat taxtasidan kvarts lehimlangan.


Biz kvartsni taxtaga qo'llaymiz. Mos keladi. Biz kvartsni qafasga joylashtirdik, u ham mos keladi! Ajoyib! Keling, o'zgartiraylik!

O'zgartirish uchun bitta kvartsni lehimlang va boshqasiga lehimlang.
Hech qanday kutupluluk, xususiyatlar yo'q. Jarayon oddiy va maxsus malakani talab qilmaydi.


Voila! kvarts almashtirildi. Biz kvarts tanasini taxta ostidagi va batareyaga tegmasligi uchun tekislaymiz.

Qayta yig'ish

Biz mexanizmni teskari tartibda yig'amiz - biz taxtani ushlagichga joylashtiramiz, u erda hidoyat pinlari mavjud. Biz batareyani minus pastga qaratib, taxtaga qo'yamiz.


Kontakt blokini batareyaning ustiga qo'ying. Ushbu soatda u bir vaqtning o'zida batareyani ushlab turadi va tugmalar uchun aloqa guruhidir. Uch vint bilan mahkamlang. Keyin tweeter uchun alohida kontakt. Biz ham burab qo'yamiz.

Biz blokni aylantiramiz va qaraymiz - soat boshlanishi kerak. Agar bu sodir bo'lmasa, demak, batareya teskari yoki kvarts lehimlanmagan yoki u ishlamayapti yoki taxta statik elektr ta'siridan nobud bo'lgan :)
Xo'sh, agar hamma narsa ishlayotgan bo'lsa, taxtani ehtiyotkorlik bilan soat qutisiga qo'ying, raqamlar chetiga parallel bo'lishi uchun uni markazga qo'ying, keyin signalni orqaga o'rnating, qopqoqni burab qo'ying ...

OK, hammasi tugadi!
Biz katta muammoni yengdik)))

Kun davomida soat oldinga yoki orqaga siljimadi, u muammosiz va aniq ishlaydi. Men buni yana bir oz ko'raman va keyin aniqligi haqida xabar beraman.

Aytish kerakki, kvartsni almashtirish tartibi barcha kvarts soatlari uchun bir xil - raqamli, terish. Ammo, shuni esda tutishimiz kerakki, ko'pchilik xitoylik kvarts soatlari plastik perchinlarda yig'iladi, ular "qo'ziqorinlar" bilan eritiladi, ya'ni. aslida, soat demontaj qilingandan so'ng, uni qayta yig'ish juda qiyin.
Xo'sh, kvartsning o'lchami ham muhim - agar anakartdagi kvarts o'lchamiga mos kelmasa, siz boshqa, kichikroq narsani izlashingiz kerak bo'ladi.

Ushbu "Murzilka" doirasidan tashqarida xitoyliklar LCD displeyni ushlagichga qo'yganda olib tashlamagan plyonka bor edi. Men bu filmni olib tashladim va ekran kontrasti biroz oshdi. Film deyarli ko'rinmas, lekin u mening soatimda edi.

UPD .
So'nggi to'rt kun ichida, kvarts almashtirilgandan beri, soat ikki soniya oldinga siljidi. Oyiga 15 soniya.
Arzon soat va bepul kvarts uchun menimcha, natija qoniqarli. Shaxsan bu meni to'liq qoniqtiradi)))
Siz, albatta, buyum bozorlarida tiyinga kvarts soatlarini izlashingiz, u yerdan bir dasta kvarts olib, aniqlik bilan tajriba qilishingiz mumkin...

Izohlar miniatyura keramika kondansatkichlarini lehimlash orqali aniqlikni yanada nozik sozlash retseptini taqdim etadi. Kvartsni almashtirishga muqobil sifatida u juda hayotiy va oqilona. Asosiysi, bu kondansatkichlarni joylashtirish uchun joy bor. Xo'sh, ularning mavjudligi ...

Va umuman, do'stlar, asosiysi sharh emas, asosiysi sharhlar)))
Qimmatli fikrlar va turli muhokamalar uchun barchangizga rahmat)))

Men +16 sotib olishni rejalashtiryapman Sevimlilarga qo'shing Menga sharh yoqdi +91 +166