Mundarija:

AVR Assembler qo'llanmasi 9: 7 qadamlar
AVR Assembler qo'llanmasi 9: 7 qadamlar

Video: AVR Assembler qo'llanmasi 9: 7 qadamlar

Video: AVR Assembler qo'llanmasi 9: 7 qadamlar
Video: Anleitung für den elektrischen Stromkreis der Zweitaktmotorzündung mit Schaltplan 2024, Iyul
Anonim
AVR Assembler qo'llanmasi 9
AVR Assembler qo'llanmasi 9

9 -darsga xush kelibsiz.

Bugun biz ATmega328P va AVR yig'ish til kodimiz yordamida 7 segmentli displeyni ham, 4 xonali displeyni ham boshqarishni ko'rsatamiz. Buni amalga oshirish jarayonida biz bog'lab qo'yishimiz kerak bo'lgan registrlar sonini kamaytirish uchun to'plamni qanday ishlatishni o'zgartirishimiz kerak bo'ladi. Biz klaviaturadagi shovqinni kamaytirish uchun bir nechta kondansatör (past o'tkazgichli filtr) qo'shamiz. Biz bir nechta tranzistorlardan kuchlanish kuchaytirgichini yaratamiz, shunda INT0 uzilish tugmasi klaviaturaning pastki qatoridagi past kuchlanishli tugmalar uchun yaxshiroq ishlaydi. Biz to'g'ri qarshilik ko'rsatishga harakat qilib, boshimizni devorga uramiz.

Biz 7 -darslik klaviaturamizdan foydalanamiz

Ushbu qo'llanmani bajarish uchun standart narsalarga qo'shimcha ravishda sizga kerak bo'ladi:

  1. 7 segmentli displey

    www.sparkfun.com/products/8546

  2. 4 xonali displey

    www.sparkfun.com/products/11407

  3. Tugma

    www.sparkfun.com/products/97

  4. Ko'rsatish uchun ma'lumotlar sahifalarini yuqoridagi havolalarga tegishli sahifalardan yuklab olish mumkin.
  5. 68 pf sopol kondansatör, 104 juft kondansatör, bir nechta qarshilik, 2N3904 NPN ikkita tranzistor.

Bu erda AVR assambleyasi bo'yicha darsliklarimning to'liq to'plamiga havola:

1-qadam: 7-segmentli displeyni ulash

7-segmentli displeyni ulash
7-segmentli displeyni ulash
7-segmentli displeyni ulash
7-segmentli displeyni ulash
7-segmentli displeyni ulash
7-segmentli displeyni ulash

Biz 7-darsda 7-segmentli displeyni boshqarish uchun klaviatura uchun ishlatilgan kodni ishlatamiz. Shunday qilib, siz uning nusxasini olishingiz kerak va biz uni o'zgartiramiz.

Biz segmentlarni mikrokontrolerimizning pinlariga quyidagicha joylashtiramiz:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

bu erda segmentlarning harflari rasmda umumiy 5V ga mos keladigan pinout va ekranning pastki o'ng burchagidagi o'nlik nuqtani (dp) o'z ichiga olgan LED segmentlarining har biri ko'rsatilgan. Buning sababi shundaki, biz butun sonni bitta registrga kiritamiz va segmentlarni yoritish uchun B va D portlariga ro'yxatdan o'tamiz. Ko'rib turganingizdek, bitlar ketma -ket 0 dan 7 gacha raqamlangan va shuning uchun ular alohida bitlarni o'rnatmasdan va tozalashsiz to'g'ri pimlarga joylashadilar.

Ko'rib turganingizdek, biz keyingi bosqichda biriktirgan kodni ko'rsatamiz, biz ko'rsatuv tartibini so'lga o'tkazdik va keyingi qo'llanmada kelajakda foydalanish uchun SDA va SCL pinlarini bo'shatdik.

Shuni qo'shimcha qilishim kerakki, displeyning umumiy anodi va 5V rayı o'rtasida rezistor qo'yish kerak. Men odatdagidek 330 ohmli rezistorni tanladim, lekin agar xohlasangiz, displeydan qovurmasdan maksimal yorqinlikni olish uchun kerak bo'ladigan minimal qarshilikni hisoblang. Mana buni qanday qilish kerak:

Birinchidan, ma'lumotlar varag'iga qarang va birinchi sahifada displeyning turli xil xususiyatlarini ko'rsatganiga e'tibor bering. Muhim miqdorlar "Oldinga oqim" (I_f = 20mA) va "Oldinga kuchlanish" (V_f = 2.2V). Bu sizga displeydagi kuchlanish pasayishini ko'rsatadi, agar oqim to'g'ridan to'g'ri oqimga teng bo'lsa. Bu displeyni qovurmasdan oladigan maksimal oqimdir. Bu, shuningdek, segmentlardan chiqib ketadigan maksimal yorqinlikdir.

Keling, Ohm qonuni va Kirchoff tsikli qoidasidan foydalanib, maksimal yorqinlikni olish uchun displey bilan bir qatorda qanday minimal qarshilik ko'rsatishimiz kerakligini aniqlaylik. Kirchoff qoidasi shuni ko'rsatadiki, kontaktlarning zanglashiga olib keladigan yopiq halqa atrofida kuchlanish yig'indisi nolga teng bo'ladi va Ohm qonuniga ko'ra, R qarshilik qarshiligidagi kuchlanish pasayishi: V = I R, bu erda I - rezistor orqali oqayotgan oqim.

Shunday qilib, V manba kuchlanishini hisobga olsak va bizning davrimizni aylanib chiqsak, bizda:

V - V_f - I R = 0

bu degani (V - V_f)/I = R. Shunday qilib, maksimal yorqinlikni olish uchun kerak bo'ladigan qarshilik (va, ehtimol, segmentlarni qovurish):

R = (V - V_f)/I_f = (5.0V - 2.2V) /0.02A = 140 ohm

Agar xohlasangiz, 150 ohmni xavotirlanmasdan ishlatishingiz mumkin. Ammo, menimcha, 140 ohm uni o'zim yoqtiradigan darajada yorqin qiladi va shuning uchun men 330 ohmdan foydalanaman (bu mening LEDlar uchun Goldilocks shaxsiy qarshilikim).

2 -qadam: montaj kodi va video

Men montaj kodini va displey bilan klaviatura ishini ko'rsatadigan videoni biriktirdim. Ko'rib turganingizdek, biz "Qayta terish" tugmachasini "r" ga, fleshkani "F" ga, yulduzchani "A" ga va x belgisini "H" ga xaritaga kiritdik. Agar siz LCD displeylarda yoki 4 ta raqamli displeyda raqamlarni terish uchun klaviaturadan foydalanishni davom ettirmoqchi bo'lsangiz, ularni orqaga bosish, kiritish va nima bo'lmasligi kabi har xil operatsiyalar bilan bog'lash mumkin. Men bu safar kodni ketma-ket o'tmayman, chunki bu avvalgi darslarda qilganimizga juda o'xshaydi. Farqlar, asosan, biz biladigan uzilishlar va qidiruv jadvallari kabi, xuddi shu narsalardan iborat. Siz shunchaki kodni o'tib, biz qo'shgan yangi narsalarni va biz o'zgartirgan narsalarni ko'rib chiqamiz va uni shu erdan bilib olamiz. AVR mikrokontrolerlarida yig'ish tilini kodlashning yangi jihatlari bilan tanishtirganimizda, keyingi darsda biz chiziqli tahlilga qaytamiz.

Keling, 4 xonali displeyni ko'rib chiqaylik.

3-qadam: 4 xonali displeyni ulash

4 xonali displeyni ulash
4 xonali displeyni ulash
4 xonali displeyni ulash
4 xonali displeyni ulash

Ma'lumotlar jadvaliga ko'ra, 4 xonali displeyda 60 mA oldinga oqim va oldinga kuchlanish 2,2 volt. Shunday qilib, agar xohlasam, avvalgi hisob bilan 47 ohmli rezistordan foydalanishim mumkin edi. Buning o'rniga men … soatini ishlatmoqchiman … ko'rsam … 330 ohm haqida.

4-raqamli displeyning simli ulanish usuli shundaki, har bir raqam uchun 4 ta anod bor, va boshqa pinlar har bir segment qaysi qismda bo'lishini boshqaradi. Siz bir vaqtning o'zida 4 ta raqamni ko'rsatishingiz mumkin, chunki ular multipleksli. Boshqacha qilib aytganda, xuddi zar zarbida bo'lgani kabi, biz har bir anod orqali quvvatni aylantiramiz va u birin -ketin miltillaydi. U buni shunchalik tez bajaradiki, ko'zlarimiz miltillashni ko'rmaydi va to'rtta raqam yonganga o'xshaydi. Ishonchli bo'lish uchun, biz kodlash usuli - bu to'rtta raqamni belgilash, keyin anodlarni aylantirish, o'rnatish, ko'chirish, o'rnatish, siljitish va h.k..

Hozircha, barcha segmentlar ishlayotganini tekshirib ko'ramiz.

330 ohmli rezistorni paneldagi musbat rels va displeydagi birinchi anod orasiga joylashtiring. Ma'lumotlar varag'ida pinlar chap pastki qismdan boshlab soat yo'nalishi bo'yicha teskari yo'nalishda 1 dan 16 gacha raqamlanganligi aytiladi (agar siz odatda displeyga qarasangiz.. pastda o'nli kasrlar bilan) va anodlar 6-raqamli pin raqamlari ekanligini bildiradi., 8, 9 va 12.

Shunday qilib, biz 6 -pinni 5V ga ulaymiz, so'ngra GND relsidan manfiy o'q olib, uni boshqa pinlarga bog'lab qo'yamiz va barcha segmentlar unga mos keladigan raqamda yonib turganini ko'ramiz (bu aslida ikkinchi raqam) o'ng). Yonish uchun barcha 7 ta segment va kasr nuqtasini olganingizga ishonch hosil qiling.

Endi segmentlardan birini yoqish uchun GND simingizni pinlardan biriga mahkamlang va bu safar qarshilikni boshqa 3 anodga o'tkazing va shu segment boshqa raqamlarning har birida yonib turganini ko'ring.

G'ayrioddiy narsa bormi?

Ma'lumotlar varag'idagi pinout noto'g'ri ekan. Buning sababi, bu 12-pinli, 4-raqamli displey uchun ma'lumotlar jadvali va pinout. Ya'ni bitta nuqta yoki yuqori o'nlik nuqtasi yo'q. Men buyurtma berganimda olgan displey-bu 16 pinli 4 xonali displey. Aslida, menda segment anodlari 1, 2, 6 va 8 -pinlarda joylashgan. Yo'g'on ichak anodi 4 -pinli (12 -katodli pin) va yuqori dp -anodli 10 -pinli (9 -katodli)

1 -mashq: Qarshilik va topraklama simidan foydalanib, qaysi pin qaysi segmentga va displeyda o'nli kasr nuqtasiga to'g'ri kelishini aniqlash uchun biz to'g'ri segmentlarni yoritamiz.

Biz segment xaritasini kodlashni xohlaymiz, xuddi yuqoridagi 7-segmentli bitta raqamli displeyda bo'lgani kabi-biz koddagi biror narsani o'zgartirishga hojat yo'q, biz o'zgartiradigan yagona narsa-simlarning qanday ulanganligi. doskada. Mikrokontrollerdagi to'g'ri port pinini 4 xonali displeydagi mos keladigan pinga ulang, shunda PB0 hali ham a segmentiga mos keladigan pinga o'tadi, PB1 B segmentiga o'tadi va hokazo.

Yagona farq shundaki, endi biz anodlar uchun 4 ta qo'shimcha pinga muhtojmiz, chunki biz endi 5V temir yo'lga bora olmaymiz. Qaysi raqam sharbatni olishini hal qilish uchun bizga mikrokontroller kerak.

Shunday qilib, biz 4 raqamli anodlarni boshqarish uchun PC1, PC2, PC3 va PD4 -dan foydalanamiz.

Siz simlarni ulashingiz mumkin. (anod simlaridagi 330 ohmli rezistorlarni unutmang!)

4-qadam: 4 xonali displeyni kodlash

4 xonali displeyni kodlash
4 xonali displeyni kodlash

Keling, ushbu displeyni qanday kodlashni xohlayotganimiz haqida o'ylaylik.

Biz foydalanuvchidan klaviatura tugmachalarini bosishni va har bir tugmani bosganda raqamlar ketma -ket displeyda ko'rsatilishini xohlaymiz. Shunday qilib, agar men 1 -ni, keyin 2 -ni bossam, u ekranda 12 bo'lib ko'rinadi. Men ham bu qiymatni, 12 -ni, ichki foydalanish uchun saqlamoqchiman, lekin bunga birozdan keyin erishamiz. Hozircha men faqat tugmachalarni bosadigan va ko'rsatadigan yangi so'l yozmoqchiman. Ammo, bizda faqat 4 ta raqam bor ekan, men ishonch hosil qilmoqchiman, bu sizga faqat to'rtta raqamni yozishga imkon beradi.

Yana bir muammo shundaki, ko'p xonali 4-raqamli displeyning ishlash usuli-bu anodlarni aylantirishdir, shunda har bir raqam bir soniya yonadi, keyingisini, so'ngra keyingisini va nihoyat yana birinchisiga, va hokazo. Buni kodlash usuli kerak.

Biz, shuningdek, keyingi raqamni kiritganimizda "kursorni" o'ngga bo'sh joyga o'tkazishini xohlaymiz. Agar men 1234 ni yozmoqchi bo'lsam, masalan, 1-ni yozganimdan so'ng, kursor siljiydi, shunda men yozgan keyingi raqam 7-segmentli displeyda paydo bo'ladi va hokazo. Bu sodir bo'lganda ham, men hali ham yozgan narsamni ko'rishni xohlayman, shuning uchun u hali ham raqamlarni aylanib o'tishi va ularni ko'rsatishi kerak.

Bu baland buyurtma kabi eshitiladimi?

Vaziyat aslida bundan ham battar. Biz ko'rsatmoqchi bo'lgan 4 ta raqamning joriy qiymatlarini saqlash uchun foydalanishimiz mumkin bo'lgan yana 4 ta umumiy maqsadli registrga muhtojmiz (agar biz ularni aylanib o'tmoqchi bo'lsak, biz ularni bir joyda saqlashimiz kerak) va muammo shundaki, bizda aqldan ozish kabi umumiy maqsadli registrlardan foydalanganmiz, va agar biz ehtiyot bo'lmasak, bizda qolmaydi. Shunday qilib, bu muammoni tezroq hal qilish va stek yordamida registrlarni qanday bo'shatish kerakligini ko'rsatish yaxshi bo'lar edi.

Keling, ishni biroz soddalashtirishdan boshlaylik, to'plamdan foydalaning va ba'zi registrlarni bo'shating, keyin biz raqamlarimizni 4 xonali displeyda o'qish va ko'rsatish vazifasini bajarishga harakat qilamiz.

5 -qadam: Pop -ni bosing

Push -n -pop
Push -n -pop

Bizning ixtiyorimizda faqat bir nechta "Umumiy maqsadli registrlar" bor va ular ishlatilgandan keyin boshqa yo'q. Shunday qilib, ularni faqat portlar va SRAM -dan o'qish va yozish uchun kerak bo'ladigan vaqtinchalik saqlash sifatida ishlatiladigan er -xotin o'zgaruvchilar uchun ishlatish yaxshi dasturiy amaliyotdir, yoki siz hamma joyda subroutrinlarda kerak bo'ladi. ularga nom bering. Shunday qilib, men nima qildim, endi biz Stack -ni ishga tushirdik va o'rganishni boshladik - bu kodni ko'rib chiqish va faqat bitta kichik dastur ichida yoki uzilishlar ichida ishlatiladigan umumiy maqsadli registrlarni topish va kodning boshqa joylarida va almashtirishda. Ularni bizning temp registrlarimizdan biri bilan bosib turamiz. Agar siz kichikroq mikrokontrolderlar uchun yozilgan kodga qarasangiz yoki hamma chiplar kichikroq vaqtga qaytsangiz, hamma narsa uchun ishlatilishi kerak bo'lgan umumiy maqsadli registrlarni ko'rasiz. qiymatni o'sha erda saqlang va uni yolg'iz qoldiring, chunki sizga boshqa narsalar uchun registr kerak bo'ladi. Shunday qilib, siz kodning hamma joyida pushin va poppinni ko'rasiz. Balki, men o'zimizning umumiy maqsadli AX va BX registrlarimizni o'tgan kunlarga hurmat bilan atashim kerak edi.

Misol buni yanada aniqroq qilishga yordam beradi.

E'tibor bering, ADC_int -ni analogdan raqamli konvertatsiya qilishda biz ADCH qiymatini yuklash va uni analog -tugmachani bosish konvertatsiyasi jadvalimiz bilan solishtirish uchun ishlatilgan tugmachali H uchun umumiy maqsadli registrdan foydalanamiz. Biz bu tugmani ishlatamiz faqat ADC_int ichki dasturida ro'yxatdan o'tamiz va boshqa hech bir joyda. Shunday qilib, biz vaqtinchalik o'zgaruvchi sifatida ishlatadigan temp2 o'zgaruvchisini ishlatamiz, bu har qanday dasturda ishlatilishi mumkin va uning qiymati bu dasturdan tashqaridagi hech narsaga ta'sir qilmaydi (ya'ni biz ADC_int -da bergan qiymat hech qaerda ishlatilmaydi) boshqa).

Yana bir misol - bizning kechiktirish makroimizda. Bizda "millisekundlar" deb nomlangan registr bor, u bizning kechikish vaqtimizni millisekundlarda o'z ichiga oladi. Bu holda, bu makroda va biz eslaymizki, makro ishining uslubi shundaki, montajchi butun makro kodni dasturning joyiga qo'yadi. Bunday holda biz "millisekundlar" o'zgaruvchisidan qutulishni va uni vaqtinchalik o'zgaruvchilardan biriga almashtirishni xohlaymiz. Bu holda, men buni boshqacha qilib ko'rsataman, agar o'zgaruvchining qiymati boshqa joyda kerak bo'lsa ham, biz uni hali ham to'plamdan foydalanib ishlatishimiz mumkin. Shunday qilib, millisekundlar o'rniga biz "temp" dan foydalanamiz va temp qiymatini ishlatadigan boshqa narsalarni buzib yubormaslik uchun, biz "kechikish" makrosini tempni stakka "surish" bilan boshlaymiz, keyin biz uni ishlatamiz. millisekundlar o'rniga, so'ngra so'l oxirida biz oldingi qiymatni to'plamdan qaytaramiz.

Aniq natija shundaki, biz temp va temp2 ni vaqtincha ishlatish uchun "qarzga oldik", so'ng ularni tugatganimizda avvalgi qiymatlariga tikladik.

Mana bu o'zgarishni amalga oshirgandan so'ng ADC_int uzilish tartibi:

ADC_int:

bosish harorati; tempni saqlang, chunki biz uni o'zgartiramiz temp2; temp2 lds temp2, ADCH ni saqlang; yuklash tugmasi ldi ZH, yuqori (2*raqam) ldi ZL, past (2*raqam) cpi temp2, 0 breq qaytish; agar shovqin tetiklari 7segnumber setkeyni o'zgartirmasa: lpm temp, Z+; stoldan yuklash va post increment clc cp temp2, temp; tugmachani bosish brlo PC+4 jadvali bilan solishtiring; agar ADCH pastroq bo'lsa, qayta urinib ko'ring lpm 7segnumber, Z; aks holda keyvalue jadvalini inc raqamiga yuklang; rjmp qaytish raqamini oshirish; va qaytarish adiw ZH: ZL, 1; z rjmp sozlash tugmachasini oshirish; va orqaga qaytish: pop temp2; temp 2 pop tempini tiklash; temp retini tiklash

E'tibor bering, to'plamning ishlash usuli shundaki, birinchi yoqish oxirgi o'chirilgan. Xuddi qog'ozlar to'plami kabi. Ko'ryapsizmi, biz birinchi ikkita satrda temp qiymatini to'plamga o'tkazamiz, keyin temp2 ni qoziqqa o'tkazamiz, keyin ularni boshqa dasturlar uchun pastki dasturda ishlatamiz va nihoyat ularni avvalgi qiymatlariga qaytaramiz. Birinchidan, temp2 o'chiriladi (chunki u oxirgi bosilgan to'plamning yuqori qismida joylashgan va biz birinchi bo'lib o'chirib qo'yamiz) va keyin temp.

Shunday qilib, bundan buyon biz doimo bu usuldan foydalanamiz. Vaqtinchalik o'zgaruvchidan boshqa narsa uchun biz reestrni belgilashimiz mumkin bo'lgan yagona vaqt - bu bizga hamma joyda kerak bo'ladi. Masalan, "to'lib toshish" deb nomlangan registr bu biz dasturning bir nechta joylarida ishlatilgan va shuning uchun biz unga nom bermoqchimiz. Albatta, biz uni temp va temp2 kabi ishlata olamiz, chunki biz bajarganimizdan keyin uning qiymatini tiklaymiz. Ammo bu narsalarni haddan tashqari oshirib yuboradi. Ular biron sababga ko'ra nomlangan va bizda bu ish uchun temp va temp2 belgilangan.

6-qadam: past o'tkazgichli filtrlar va kuchlanish kuchaytirgichi

Past o'tkazgichli filtrlar va kuchlanish kuchaytirgichi
Past o'tkazgichli filtrlar va kuchlanish kuchaytirgichi
Past o'tkazgichli filtrlar va kuchlanish kuchaytirgichi
Past o'tkazgichli filtrlar va kuchlanish kuchaytirgichi

Shovqinni biroz tozalash va klaviatura ishini yaxshilash uchun biz bir nechta past o'tkazgichli filtrlarni qo'shmoqchimiz. Bular yuqori chastotali shovqinni filtrlaydi va past chastotali signalning o'tishiga imkon beradi. Asosan, buni qilishning usuli - analog kirish va topraklama o'rtasida 68 pf kondansatör, shuningdek PD4 (INT0) uzilishi va topraklama orasidagi 0,1 mikrofaradlik (ya'ni 104) kondansatör. Agar siz klaviaturadagi tugmachalarni bosib shu bilan o'ynasangiz, ular nima qilayotganini ko'rasiz.

Keyin biz kuchlanish kuchaytirgichini yasashni xohlaymiz. Ma'lum bo'lishicha, klaviatura tugmachalarining pastki qatori (shuningdek, qayta terish tugmasi) INT0 uzilishini o'chirish uchun juda past kuchlanishni o'chiradi. Analog port bu tugmalardagi past kuchlanishni o'qish uchun etarlicha sezgir, lekin biz tugmachalarni bosganimizda uzilish pimi uzilib qoladigan darajada yaxshi ko'tarila olmaydi. Shunday qilib, biz kuchlanishning ko'tarilish burchagi PD4 ga, lekin past kuchlanish ADC0 ga tegishiga ishonch hosil qilishning bir usulini xohlaymiz. Bu juda baland buyurtma, chunki ikkala signal ham bizning klaviaturamizning bitta chiqish simidan keladi. Buni amalga oshirishning bir qancha murakkab usullari bor, lekin biz bu darsdan keyin endi klaviaturamizdan foydalanmaymiz, shuning uchun ishlaydigan usulni (zo'rg'a) yig'amiz.

INT0 uzilishini almashtirish uchun avval tashqi tugmani ulashingiz kerak va displeyni klaviaturadagi tugmachani bosib ushlab turish va tugmani bosish kerak. Bu kamroq klaviatura bilan bog'liq muammolarga ega va sizning kuchlanishlaringiz klaviaturani qidirish stolida to'g'ri o'rnatilganligiga ishonch hosil qilish imkonini beradi. Klaviatura to'g'ri ulanganligini bilganingizdan so'ng, tugmani olib tashlang va INT0 uzilishini qaytaring. Klaviaturani shu tarzda boshqaradigan jiddiy shovqin va kuchlanish bilan bog'liq muammolar mavjud, shuning uchun hamma narsa ishlayotganini bilish yaxshidir, shuning uchun kelajakdagi muammolarni INT0 tugmachasiga ajratish mumkin.

Klaviaturani va kuchlanish kuchaytirgichini sim bilan ulaganingizda, men ishlatgan qarshilik qiymatlari ishlamasligi mumkin. Sizga mos keladigan qadriyatlarni olish uchun siz bir oz tajriba qilishingiz kerak bo'ladi.

Agar men ushbu bosqichga biriktirilgan diagramaga qarasangiz, kuchlanish kuchaytirgichi qanday ishlashini ko'rasiz. Biz bir nechta rezistorlar va ikkita tranzistordan foydalanamiz. Transistorlarning ishlash usuli (ma'lumotlar varaqlariga qarang!), Siz uni to'ydiradigan va kollektor pimi va emitent o'rtasida tok oqishini ta'minlaydigan transistorning asosiy piniga (o'rta pin) kiritishingiz kerak bo'lgan minimal kuchlanish mavjud. pin Biz foydalanadigan 2N3904 tranzistoriga kelsak, kuchlanish 0,65 V ni tashkil qiladi. Endi biz bu kuchlanishni klaviaturadan chiqaramiz va biz bu chiqishni o'zgartirishni xohlamaymiz, shuning uchun biz klaviatura va birinchi tranzistorning bazasi o'rtasida katta qarshilik qo'yamiz (men 1Mohm ishlatganman). Men buni diagrammada R_1 deb belgilaganman. Keyin biz kuchlanish taqsimlagichni o'rnatmoqchimiz, shunda tranzistorning asosi "deyarli" 0,65 voltga teng bo'ladi va faqat bir oz ko'proq vaqt uni tepaga surib to'ydiradi. Biz tugmachani bosganimizda, bu kichkina klaviatura chiqishidan kelib chiqadi. Klaviaturaning pastki tugmalari faqat kichik kuchlanishni o'chirayotgani uchun, biz etarli bo'lishi uchun to'yinganlikka juda yaqin bo'lishimiz kerak. Diagrammada kuchlanish bo'luvchi qarshilik ko'rsatuvchilar R_a va R_b bilan belgilanadi. Men R_a = 1Mohm va R_b = 560Kohm dan foydalandim, lekin uni sozlash uchun to'g'ri bo'lishi uchun siz bu raqamlar bilan o'ynashingiz kerak bo'ladi. Siz yaqin atrofda devorga ega bo'lishni xohlaysiz, boshingizni urib, ikki yoki uch stakan skotch qo'lingizda bo'lishi mumkin (men Lafroaygni tavsiya qilaman - qimmat, lekin agar siz tutunni yoqtirsangiz, bunga arziydi. Agar narsalar chindan ham aqldan ozgan bo'lsa, shunchaki ko'zani oling) BV va kechaga joylashing)

Keling, qanday qilib tranzistorlar bizni INT0 tugmachasini bosib o'tishga yordam beradi va tugmachani bosishni to'xtatamiz. Birinchidan, men tugmachani bosmaganimda nima bo'lishini ko'rib chiqaylik. Bunday holda, birinchi tranzistor (diagrammada T1 bilan belgilangan) o'chirilgan. Shunday qilib, kollektor va emitter pimlari o'rtasida hech qanday oqim oqmaydi. Shunday qilib, boshqa tranzistorning asosi (T2 bilan belgilanadi) yuqoriga ko'tariladi va shu orqali uning pimlari orasidagi tokni oqishiga imkon beradi. Bu shuni anglatadiki, T2 emitori past tortiladi, chunki u o'zi erga ulangan kollektorga ulangan. Shunday qilib, INT0 tugmachasini bosish piniga (PD4) kiradigan chiqish past bo'ladi va hech qanday uzilish bo'lmaydi.

Endi men kalitni bosganimda nima bo'ladi? Xo'sh, keyin T1 bazasi 0,65 V dan oshadi (pastki tugmachalarda u faqat yuqoriga ko'tariladi!), Keyin T2 poydevorini past kuchlanishga olib keladigan oqimga ruxsat beriladi va bu T2 ni o'chirib qo'yadi. Lekin biz ko'rib turibmizki, T2 o'chirilganida, chiqish yuqori ko'tariladi va shuning uchun biz INT0 piniga 5V signalini olamiz va bu uzilishga olib keladi.

Bu erda aniq natija nima ekanligini bilib oling. Agar biz 1 tugmachasini bossak, ADC0 ga chiqishni sezilarli darajada o'zgartirmasdan 5V PD4 ga o'tadi va bundan ham muhimi, agar biz yulduzcha, 0, xash yoki qayta terishni bosgan bo'lsak ham, biz INT0 ga o'tadigan 5V signalini olamiz. uzilishga olib keladi! Bu juda muhim, chunki agar biz to'g'ridan -to'g'ri klaviatura chiqishidan INT0 piniga o'tgan bo'lsak, bu tugmalar deyarli hech qanday kuchlanish hosil qilmaydi va ular uzilish pinini ishga tushirish uchun etarli bo'lmaydi. Bizning kuchlanish kuchaytirgichimiz bu muammoni hal qildi.

7-qadam: 4 xonali displey kodi va video

Hammasi 9 -dars uchun! Men kodni va operatsiyani ko'rsatadigan videoni biriktirdim.

Bu oxirgi marta biz analog klaviaturadan foydalanamiz (Xudoga shukur). Foydalanish juda qiyin edi, lekin analog-raqamli konvertatsiya, analog portlar, uzilishlar, ko'paytirish, shovqin filtrlari, kuchlanish kuchaytirgichlari va yig'ish kodlashining ko'p jihatlari haqida qidiruv jadvalidan taymer/taymergacha o'rganishga yordam berish juda foydali bo'ldi. va hokazo. Shuning uchun biz undan foydalanishga qaror qildik. (bundan tashqari, narsalarni tozalash juda qiziq).

Endi biz yana aloqani ko'rib chiqamiz va 7-segmentli va 4-raqamli displeylarimizni zar roligimizdagi zar rulonlarini registr analizatorida bo'lgani kabi o'qib chiqamiz. Bu safar biz birgalikda buzilgan morz kodi usulidan ko'ra, ikkita simli interfeysdan foydalanamiz.

Aloqa ishlay boshlagach va displeylarda roliklar paydo bo'lgach, biz nihoyat yakuniy mahsulotimizning birinchi qismini tayyorlay olamiz. Siz sezasizki, barcha analog portlarsiz bizning kodimiz ancha qisqaradi va o'qilishi osonroq bo'ladi.

Sizdan ambitsiyali bo'lganlar uchun. Mana bu "loyiha", agar siz ushbu o'quv qo'llanmasining barchasini shu paytgacha o'tkazgan bo'lsangiz, bu vaqtda siz albatta bilimga ega bo'lishingizni sinab ko'rishingiz mumkin:

Loyiha: Kalkulyator qiling! Bizning 4 xonali displeyimiz va klaviaturamizdan foydalaning va "kirish" tugmachasi kabi ishlaydigan tashqi tugmani bosing. Yulduzchani "vaqtlar" ga, qayta terishni "plyus" ga, chirog'ni "minus" ga "bo'linish" xeshini belgilang va barcha muhandislar ishlatgan eski HP "teskari polishing" kalkulyatorlaridan biri kabi ishlaydigan kalkulyator tartibini yozing. kunning o'zida. Ya'ni ularning ishlash usuli - siz raqamni kiritasiz va "enter" tugmasini bosasiz. Bu raqamni to'plamga o'tkazadi, keyin siz ikkinchi raqamni kiritasiz va "kir" ni bosasiz, bu esa ikkinchi raqamni to'plamga o'tkazadi. Oxir -oqibat siz X, /, + yoki - kabi operatsiyalardan birini bosasiz va bu operatsiyani to'plamdagi eng yuqori ikkita raqamga qo'llaydi, natijani ko'rsatadi va natijani to'plamga suradi, shunda siz uni qayta ishlatishingiz mumkin. kabi Masalan, 2+3 ni qo'shish uchun siz shunday qilasiz: 2, "kiriting", 3, "kiriting", "+" va displey keyin o'qiladi 5. Siz stekani, displeyni, klaviaturani qanday ishlatishni bilasiz. fon kodining ko'p qismi allaqachon yozilgan. Kalkulyator uchun zarur bo'lgan kirish tugmachasini va kichik dasturlarni qo'shing. Bu siz o'ylagandan ko'ra biroz murakkabroq, lekin bu qiziqarli va bajarishga qodir.

Keyingi safar ko'rishguncha!

Tavsiya: