Turinys:

AVR surinkėjo pamoka 9: 7 žingsniai
AVR surinkėjo pamoka 9: 7 žingsniai

Video: AVR surinkėjo pamoka 9: 7 žingsniai

Video: AVR surinkėjo pamoka 9: 7 žingsniai
Video: LDmicro 11: Последовательный контроллер температуры с ЖК-дисплеем (лестничное программирование ПЛК микроконтроллера с помощью LDmicro) 2024, Liepa
Anonim
AVR surinkėjo pamoka 9
AVR surinkėjo pamoka 9

Sveiki atvykę į 9 pamoką.

Šiandien parodysime, kaip valdyti 7 segmentų ir 4 skaitmenų ekraną naudojant ATmega328P ir AVR surinkimo kalbos kodą. Tai darydami turėsime nukrypti į tai, kaip naudoti krūvą, kad sumažintume registrų, kuriuos turime susieti, skaičių. Pridėsime porą kondensatorių (žemo dažnio filtrų), kad sumažintume klaviatūros keliamą triukšmą. Mes sukursime įtampos stiprintuvą iš poros tranzistorių, kad mūsų INT0 pertraukimo jungiklis geriau veiktų žemesnės įtampos mygtukus apatinėje klaviatūros eilutėje. Ir šiek tiek daužysime galvas į sieną, bandydami gauti tinkamus rezistorius, kad daiktas veiktų tinkamai.

Mes naudosime klaviatūrą iš 7 mokymo programos

Norėdami atlikti šią pamoką, be standartinių dalykų, jums reikės:

  1. 7 segmentų ekranas

    www.sparkfun.com/products/8546

  2. 4 skaitmenų ekranas

    www.sparkfun.com/products/11407

  3. Mygtukas

    www.sparkfun.com/products/97

  4. Ekrano duomenų lapai, kuriuos galima atsisiųsti iš atitinkamų puslapių, susietų su aukščiau.
  5. 68 pf keraminis kondensatorius, pora 104 kondensatorių, krūva rezistorių, du 2N3904 NPN tranzistoriai.

Čia yra nuoroda į visą mano AVR surinkėjo vadovėlių kolekciją:

1 žingsnis: 7 segmentų ekrano prijungimas

7 segmentų ekrano prijungimas
7 segmentų ekrano prijungimas
7 segmentų ekrano prijungimas
7 segmentų ekrano prijungimas
7 segmentų ekrano prijungimas
7 segmentų ekrano prijungimas

Mes naudosime tą patį kodą, kurį naudojome 7 mokyme, klaviatūrai valdyti 7 segmentų ekraną. Taigi turėsite padaryti jo kopiją ir mes ją pakeisime.

Mes suskirstysime segmentus į mūsų mikrovaldiklio kaiščius taip:

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

kur segmento raidės rodomos paveikslėlyje kartu su kištuku, atitinkančiu įprastą 5 V įtampą, ir kiekvienu LED segmentu, įskaitant dešimtainį tašką (dp) apatiniame dešiniajame ekrano kampe. Taip yra todėl, kad mes galime įvesti visą skaičių į vieną registrą ir išvesti, kuris registruojamas į B ir D prievadus, kad apšviestų segmentus. Kaip matote, bitai yra sunumeruoti nuosekliai nuo 0 iki 7, todėl jie bus susieti su tinkamais kaiščiais, nenustatant ir neišvalius atskirų bitų.

Kaip matote iš kodo, kurį pridėjome kitame žingsnyje, perkėlėme savo rodymo tvarką į makrokomandą ir išlaisvinome SDA ir SCL kaiščius, kad juos būtų galima naudoti kitame vadove.

Turėčiau pridurti, kad tarp bendro ekrano anodo ir 5V bėgio reikia įdėti rezistorių. Aš pasirinkau 330 omų rezistorių, kaip įprasta, bet jei norite, galite apskaičiuoti mažiausią varžą, reikalingą maksimaliam ekrano ryškumui iškepti, jo nekepant. Štai kaip tai padaryti:

Pirmiausia pažiūrėkite į duomenų lapą ir pastebėkite, kad pirmajame puslapyje pateikiamos įvairios ekrano savybės. Svarbūs kiekiai yra „priekinė srovė“(I_f = 20mA) ir „priekinė įtampa“(V_f = 2,2V). Tai rodo, kad norite, kad įtampa sumažėtų visame ekrane, jei srovė yra lygi priekinei srovei. Tai yra didžiausia srovė, kurią ekranas užims be kepimo. Taigi tai yra maksimalus ryškumas, kurį galite išgauti iš segmentų.

Taigi, pasinaudokime Omo dėsniu ir Kirchoffo kilpos taisykle, kad išsiaiškintume, kokį minimalų pasipriešinimą turėtume padaryti serijiniu būdu su ekranu, kad gautume maksimalų ryškumą. Kirchoffo taisyklė sako, kad įtampos pokyčių suma aplink uždarą grandinės grandinę yra lygi nuliui, o Ohmo dėsnis sako, kad įtampos kritimas per varžos R rezistorių yra: V = I R, kur I yra srovė, tekanti per rezistorių.

Taigi, atsižvelgiant į šaltinio įtampą V ir einant aplink mūsų grandinę, turime:

V - V_f - I R = 0

tai reiškia (V - V_f)/I = R. Taigi, norint pasiekti maksimalų ryškumą (ir tikriausiai kepti segmentus), reikalingas atsparumas būtų:

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

Taigi, jei norėtumėte, galite laimingai naudoti 150 omų be rūpesčių. Tačiau manau, kad 140 omų yra per šviesus, kad man patiks, todėl naudoju 330 omų (tai yra mano asmeninis šviesos diodų atsparumas auksiniam auksui)

2 žingsnis: surinkimo kodas ir vaizdo įrašas

Pridėjau surinkimo kodą ir vaizdo įrašą, rodantį klaviatūros veikimą su ekranu. Kaip matote, tiesiog perrinkome perrinkimo klavišą į „r“, „flash“klavišą į „F“, žvaigždutę į „A“, o maišos ženklą - į „H“. Tai gali būti susieta su įvairiomis operacijomis, tokiomis kaip grįžimo klavišas, įvestis ir kas kita, jei norite ir toliau naudoti klaviatūrą, norėdami įvesti skaičius LCD arba 4 skaitmenų ekranuose. Šį kartą kodo neeisiu eilutėje po eilutės, nes jis labai panašus į tai, ką jau padarėme ankstesnėse pamokose. Skirtumai iš esmės yra tik tie patys dalykai, kuriuos mes jau žinome, kaip daryti, pavyzdžiui, pertraukos ir paieškos lentelės. Turėtumėte tiesiog pereiti prie kodo ir pažvelgti į naujus dalykus, kuriuos pridėjome, ir į tai, ką pakeitėme, ir išsiaiškinti iš ten. Mes grįšime prie eilutinės analizės kitoje pamokoje, kai pristatysime naujus surinkimo kalbos kodavimo aspektus AVR mikrovaldikliuose.

Dabar pažvelkime į 4 skaitmenų ekraną.

3 žingsnis: 4 skaitmenų ekrano prijungimas

4 skaitmenų ekrano prijungimas
4 skaitmenų ekrano prijungimas
4 skaitmenų ekrano prijungimas
4 skaitmenų ekrano prijungimas

Remiantis duomenų lapu, 4 skaitmenų ekrano priekinė srovė yra 60 mA, o priekinė-2,2 voltų. Taigi, pagal tą patį skaičiavimą, kaip ir anksčiau, jei norėčiau, galėčiau naudoti 47 omų rezistorių. Vietoj to aš naudosiu … hrm.. leiskite man pamatyti … kaip apie 330 omų.

Keturių skaitmenų ekrano prijungimo būdas yra tas, kad yra 4 anodai, po vieną kiekvienam skaitmeniui, o kiti kaiščiai kontroliuoja, kuris segmentas įjungiamas kiekviename. Vienu metu galite rodyti 4 skaitmenis, nes jie yra multipleksuoti. Kitaip tariant, kaip ir kauliukų porai, mes tiesiog paeiliui perjungiame galią per kiekvieną anodą ir jis mirksi vienas po kito. Tai padarys taip greitai, kad mūsų akys nematys mirksėjimo ir atrodys, kad visi keturi skaitmenys yra įjungti. Tačiau, norėdami būti tikri, kodavimo būdas yra nustatyti visus keturis skaitmenis, tada cikluoti anodus, o ne nustatyti, perkelti, nustatyti, perkelti ir tt. Tokiu būdu mes galime gauti tikslų laiką tarp kiekvieno skaitmens apšvietimo.

Kol kas išbandykime, ar visi segmentai veikia.

Padėkite 330 omų rezistorių tarp teigiamos jūsų duonos lentos bėgelio ir pirmojo anodo ekrane. Duomenų lape nurodoma, kad kaiščiai yra sunumeruoti nuo 1 iki 16 prieš laikrodžio rodyklę, pradedant nuo apačios kairėje (kai įprastai žiūrite į ekraną.. su dešimtainiais taškais apačioje), ir nurodoma, kad anodai yra kaiščių skaičiai 6, 8, 9 ir 12.

Taigi mes prijungiame kaištį nuo 6 iki 5 V, tada paimame neigiamą laidą iš jūsų GND bėgelio ir įkišame jį į visus kitus kaiščius ir matome, kad visi segmentai užsidega ant jo atitinkamo skaitmens (kuris iš tikrųjų yra antrasis skaitmuo iš dešinė). Įsitikinkite, kad užsidega visi 7 segmentai ir dešimtainis taškas.

Dabar įkiškite savo GND laidą į vieną iš kaiščių, kad įsižiebtų vienas iš segmentų ir šį kartą perkelkite rezistorių į kitus 3 anodus ir pamatysite, kad tas pats segmentas šviečia kiekviename iš kitų skaitmenų.

Kažkas neįprasto?

Pasirodo, kad duomenų lapo kontaktas yra neteisingas. Taip yra todėl, kad tai yra 12 kontaktų 4 skaitmenų ekrano duomenų lapas ir kontaktas. T.y. vienas be dvitaškio ar viršutinio dešimtainio taško. Ekranas, kurį gavau užsakydamas, yra 16 kontaktų, 4 skaitmenų ekranas. Tiesą sakant, mano segmento anodai yra prie 1, 2, 6 ir 8 kaiščių. Storosios žarnos anodas yra 4 kaištis (katodo kaištis 12), o viršutinis dp anodas yra 10 kaištis (katodas yra 9 kaištis)

1 pratimas: naudokite savo rezistorių ir įžeminimo laidą, kad nustatytumėte, kuris kaištis atitinka kurį segmentą ir dešimtainį tašką ekrane, kad koduojant gautume teisingus segmentus.

Mes norime koduoti segmentų žemėlapį lygiai taip pat, kaip ir aukščiau esančiame vieno skaitmens 7 segmentų ekrane-mums nereikia nieko keisti kodu, vienintelis dalykas, kurį keičiame, yra tai, kaip prijungti laidai ant lentos. Tiesiog prijunkite tinkamą mikrovaldiklio prievado kaištį prie atitinkamo 4 skaitmenų ekrano kaiščio, kad, pavyzdžiui, PB0 vis tiek eitų prie kaiščio, atitinkančio a segmentą, PB1 pereitų prie B segmento ir pan.

Vienintelis skirtumas yra tas, kad dabar mums reikia 4 papildomų kaiščių anodams, nes nebegalime tiesiog eiti prie 5V bėgelio. Mums reikia mikrovaldiklio, kad nuspręstume, kuris skaitmuo gauna sultis.

Taigi, norėdami valdyti 4 skaitmenų anodus, naudosime PC1, PC2, PC3 ir PD4.

Taip pat galite eiti į priekį ir prijungti laidus. (nepamirškite 330 omų rezistorių ant anodo laidų!)

4 žingsnis: 4 skaitmenų ekrano kodavimas

4 skaitmenų ekrano kodavimas
4 skaitmenų ekrano kodavimas

Pagalvokime, kaip norime koduoti šį ekraną.

Mes norėtume, kad vartotojas paspaustų klaviatūros mygtukus ir kad numeriai būtų rodomi nuosekliai ekrane, kai jie spaudžia kiekvieną mygtuką. Taigi, jei paspausiu 1, o po to - 2, jis bus rodomas ekrane kaip 12. Aš taip pat norėčiau išsaugoti šią vertę, 12, vidiniam naudojimui, tačiau prie jos pateksime šiek tiek vėliau. Kol kas noriu parašyti naują makrokomandą, kuri paspaudžia klavišus ir juos parodo. Tačiau kadangi turime tik 4 skaitmenis, noriu įsitikinti, kad tai leidžia įvesti tik keturis skaičius.

Kita problema yra ta, kad multipleksuoto 4 skaitmenų ekrano veikimo būdas yra ciklo anodai, kad kiekvienas skaitmuo būtų įjungtas tik sekundės dalį, kol jis parodys kitą, tada kitą ir galiausiai vėl grįš į pirmąjį ir tt Taigi reikia būdo tai koduoti.

Taip pat norime, kad įvedus kitą skaitmenį „žymeklis“būtų perkeliamas į dešinę tarpą. Taigi, jei, pavyzdžiui, noriu įvesti 1234, po to, kai įvedsiu 1, žymeklis pereis taip, kad kitas mano įvestas skaitmuo būtų rodomas kitame 7 segmentų ekrane ir pan. Kol tai vyksta, aš vis dar noriu matyti, ką įvedžiau, todėl vis tiek reikia važiuoti dviračiu per skaitmenis ir juos rodyti.

Skamba kaip aukštas užsakymas?

Iš tikrųjų viskas dar blogiau. Mums reikia 4 bendresnės paskirties registrų, kuriuos galime naudoti norimų rodyti 4 skaitmenų dabartinėms reikšmėms išsaugoti (jei ketiname jas peržiūrėti, turime jas kažkur laikyti), o problema yra ta, kad mes turime kaip beprotiškai naudojome bendrosios paskirties registrus ir, jei nesirūpinsime, jų nebeliks. Taigi turbūt gera idėja išspręsti šią problemą anksčiau, o ne vėliau ir parodyti, kaip atlaisvinti registrus naudojant krūvą.

Taigi pradėkime šiek tiek supaprastindami dalykus, naudokime krūvą ir atlaisvinkime kai kuriuos registrus, tada bandysime atlikti užduotį perskaityti ir rodyti savo numerius 4 skaitmenų ekrane.

5 žingsnis: „Push 'n Pop“

Push 'n Pop
Push 'n Pop

Turime tik kelis „bendrosios paskirties registrus“, kuriuos panaudojus nebelieka. Taigi gera programavimo praktika yra juos naudoti tik keliems kintamiesiems, kurie naudojami kaip laikina saugykla, kurių jums reikia norint skaityti iš uostų ir SRAM ir rašyti į juos, arba tiems, kurių jums reikės visur paprogramėse. pavadink juos. Taigi, ką aš padariau, dabar, kai mes inicijavome ir mokomės naudoti kaminą, turiu pereiti kodą ir rasti pavadintus bendrosios paskirties registrus, kurie naudojami tik vienoje paprogramėje arba pertraukoje ir niekur kitur kode ir pakeisti juos su vienu iš mūsų laikinų registrų ir stumtelėjimu. Tiesą sakant, jei pažvelgsite į kodą, parašytą mažesniems mikrovaldikliams, arba jei grįšite atgal į laiką, kai visi lustai buvo mažesni, pamatysite tik keletą bendrosios paskirties registrų, kuriuos reikėjo naudoti viskam, todėl negalėjote tiesiog išsaugokite ten vertę ir palikite ją ramybėje, nes jums tikrai reikėjo to registro kitiems dalykams. Taigi kodo vietoje matysite stumdymą ir spragtelėjimą. Galbūt turėjau pavadinti mūsų laikinus bendrosios paskirties registrus AX ir BX kaip pagarbų pagyrimą toms praeities dienoms.

Pavyzdys padės tai padaryti aiškiau.

Atkreipkite dėmesį, kad mūsų konvertavimo iš analoginio į skaitmeninį visiško pertraukimo ADC_int metu mes naudojame bendrosios paskirties registrą, kurį pavadinome mygtuku H, kurį naudojome įkeliant ADCH vertę ir palyginame ją su analoginių ir mygtukų paspaudimų konversijų paieškos lentele. Šį „buttonH“registrą naudojame tik ADC_int paprogramėje ir niekur kitur. Taigi vietoj to mes naudosime savo kintamąjį temp2, kurį naudojame kaip laikiną kintamąjį, kurį galime naudoti bet kurioje konkrečioje paprogramėje, o jo reikšmė neturės jokios įtakos už šios paprogramės ribų (ty vertė, kurią nurodome ADC_int, niekur nebus naudojama Kitas).

Kitas pavyzdys yra mūsų uždelsimo makrokomanda. Turime registrą, kurį pavadinome „milisekundėmis“, kuriame nurodomas vėlavimo laikas milisekundėmis. Šiuo atveju tai yra makrokomandoje ir mes prisimename, kad makrokomandos darbas yra tas, kad surinkėjas įdeda visą makro kodą į programos vietą, kurioje jis vadinamas. Šiuo atveju norėtume atsikratyti „milisekundžių“kintamojo ir jį pakeisti vienu iš laikinų kintamųjų. Šiuo atveju aš padarysiu tai šiek tiek kitaip, kad parodyčiau, kaip, net jei kintamojo reikšmės prireiks kitur, vis tiek galime jį naudoti naudodami krūvą. Taigi vietoj milisekundžių mes naudojame „temp“ir, kad nesugadintume kitų dalykų, kurie taip pat naudoja temp vertę, mes tiesiog pradedame „delay“makrokomandą „stumdami“temp į kaminą, tada mes jį naudojame vietoj milisekundžių, o paskui makrokomandos pabaigoje „iškrauname“ankstesnę jos vertę iš kamino.

Galutinis rezultatas yra tas, kad mes „pasiskolinome“temp ir temp2 laikinam naudojimui ir tada, kai baigsime, atkūrėme ankstesnes vertes.

Atlikus šį pakeitimą, pateikiama ADC_int nutraukimo tvarka:

ADC_int:

stumti temp; išsaugoti temp, nes mes jį modifikuojame čia, spauskite temp2; išsaugoti temp2 lds temp2, ADCH; įkelti klavišų paspaudimą ldi ZH, didelis (2*skaičiai) ldi ZL, žemas (2*skaičiai) cpi temp2, 0 breq return; jei triukšmo trigeriai nesikeičia 7 numerių nustatymo raktas: lpm temp, Z+; įkelti iš lentelės ir įrašo didinimo clc cp temp2, temp; palyginkite klavišų paspaudimą su stalu brlo PC+4; jei ADCH yra mažesnis, bandykite dar kartą lpm 7segnumber, Z; priešingu atveju įkelkite raktinių verčių lentelę su skaičiumi; didinti skaitmenų skaičių rjmp return; ir grįžti adiw ZH: ZL, 1; prieaugis Z rjmp setkey; ir grįžti į viršų grįžti: pop temp2; atkurti temp2 pop temp; atkurti temp reti

Atkreipkite dėmesį, kad krūva veikia taip, kad pirmasis įjungimas yra paskutinis. Visai kaip šūsnis popierių. Matote, kad pirmosiose dviejose mūsų eilutėse tempio reikšmę perkeliame į kaminą, tada temp2 - ant kamino, po to naudojame paprogramėje kitiems dalykams ir galiausiai vėl atkuriame ankstesnes reikšmes pirmiausia išjungus temp2 (nes jis buvo paskutinis, kuris buvo stumiamas ant jo, jis yra kamino viršuje ir bus pirmas, kurį mes atšauksime), o tada - pop.

Taigi nuo šiol mes visada naudosime šį metodą. Vienintelis laikas, kai mes iš tikrųjų paskirsime registrą kitam nei temp kintamajam, yra tada, kai mums jo reikės visur. Pavyzdžiui, registras, vadinamas „perpildymais“, yra tas, kurį naudojame keliose skirtingose programos vietose, todėl norėtume jam suteikti pavadinimą. Žinoma, mes vis tiek galėtume jį naudoti taip, kaip darėme su „temp“ir „temp2“, nes baigę atkurtume jo vertę. Bet tai per daug nuviltų dalykus. Jie pavadinti dėl priežasties, ir mes jau turime temp ir temp2 tam darbui.

6 žingsnis: Žemo dažnio filtrai ir įtampos stiprintuvas

Žemo dažnio filtrai ir įtampos stiprintuvas
Žemo dažnio filtrai ir įtampos stiprintuvas
Žemo dažnio filtrai ir įtampos stiprintuvas
Žemo dažnio filtrai ir įtampos stiprintuvas

Norėdami šiek tiek išvalyti triukšmą ir pagerinti mūsų klaviatūros veikimą, norime pridėti keletą žemo dažnio filtrų. Jie filtruoja aukšto dažnio triukšmą ir praleidžia žemo dažnio signalą. Iš esmės būdas tai padaryti yra tiesiog pridėti 68 pf kondensatorių tarp mūsų analoginės įvesties ir įžeminimo, taip pat 0,1 mikrofarado (t. Y. 104) kondensatoriaus tarp mūsų PD4 (INT0) pertraukos ir įžeminimo. Jei žaisite su jais, spausdami klaviatūros mygtukus, galėsite pamatyti, ką jie daro.

Toliau norime pagaminti įtampos stiprintuvą. Pasirodo, kad apatinėje klaviatūros klavišų eilutėje (taip pat ir pakartotinio rinkimo klavišo) yra per maža įtampa, kad būtų galima išjungti INT0 pertrauką. Analoginis prievadas yra pakankamai jautrus, kad nuskaitytų žemą šių klavišų įtampą, tačiau mūsų pertraukimo kaištis negauna pakankamai gero kylančio krašto, kad nutrauktų, kai paspausime tuos klavišus. Taigi norėtume kažkaip įsitikinti, kad gražus kylančios įtampos kraštas pasiekia PD4, bet ta pati žemos įtampos - ADC0. Tai gana aukštas užsakymas, nes abu signalai ateina iš tos pačios klaviatūros išvesties laido. Yra keletas sudėtingų būdų tai padaryti, tačiau po šios pamokos nebenaudosime savo klaviatūros, todėl tiesiog suraskime veikiantį metodą (vos).

Pirmiausia turėtumėte prijungti išorinį mygtuką, kad pakeistumėte INT0 pertrauką, ir valdyti ekraną laikydami klaviatūros klavišą ir spustelėdami mygtuką. Tai turi mažiau klaviatūros problemų ir leis jums būti tikram, kad jūsų įtampa teisingai nustatyta klaviatūros peržiūros lentelėje. Kai žinosite, kad klaviatūra yra tinkamai prijungta, atsikratykite mygtuko ir vėl įdėkite INT0 pertrauką. Tokiu būdu valdant klaviatūrą kyla rimtų triukšmo ir įtampos problemų, todėl gera žinoti, kad viskas veikia taip, kad būsimos problemos būtų atskirtos nuo INT0 klavišo.

Kai prijungsite klaviatūrą ir įtampos stiprintuvą, labai tikėtina, kad tos pačios rezistorių vertės, kurias aš naudoju, neveiks. Taigi turėsite šiek tiek eksperimentuoti, kad gautumėte vertybes, kurios jums tinka.

Jei pažvelgsite į diagramą, kurią pridėjau prie šio žingsnio, pamatysite, kaip įtampos stiprintuvas veiks. Mes naudojame kai kuriuos rezistorius ir du tranzistorius. Tranzistorių veikimo būdas (žr. Duomenų lapus!) Yra minimali įtampa, kurią turite įvesti į tranzistoriaus pagrindinį kaištį (vidurinį kaištį), kuris jį prisotins ir leis srovei tekėti tarp kolektoriaus kaiščio ir emiterio smeigtukas. Čia naudojamo 2N3904 tranzistoriaus atveju įtampa yra 0,65 V. Dabar mes imame tą įtampą iš savo išvesties iš klaviatūros ir nenorime keisti šios išvesties, todėl įdėsime didelį rezistorių tarp išvesties iš klaviatūros ir pirmojo tranzistoriaus pagrindo (aš naudojau 1Mohm). Diagramoje tai pažymėjau kaip R_1. Tada norime nustatyti įtampos skirstytuvą, kad tranzistoriaus pagrindas jau būtų „beveik“esant 0,65 voltų įtampai ir tik šiek tiek daugiau pastumtų jį virš viršaus ir prisotintų. Šis mažas trūkumas bus iš klaviatūros išvesties, kai paspausime mygtuką. Kadangi apatiniai klaviatūros klavišai skleidžia tik mažą įtampą, mes jau turime būti labai arti prisotinimo, kad jų pakaktų. Įtampos daliklių rezistoriai diagramoje pažymėti R_a ir R_b. Aš naudojau R_a = 1Mohm ir R_b = 560Kohm, tačiau beveik neabejojama, kad turėsite žaisti su šiais skaičiais, kad jie būtų tinkami jūsų sąrankai. Galbūt norėsite, kad netoliese būtų siena, į kurią reikia daužyti galvą, ir dvi ar trys taurės škotiško po ranka (aš rekomenduočiau Laphroaig - brangu, bet verta, jei mėgstate rūkyti. BV ir apsigyventi nakčiai)

Dabar pažiūrėkime, kaip tranzistoriai suteiks mums gražią kylančią pusę į INT0 klavišą ir sukurs mūsų klavišų paspaudimo pertrauką. Pirmiausia pažiūrėkime, kas atsitinka, kai nespaudžiu klavišo. Tokiu atveju pirmasis tranzistorius (diagramoje pažymėtas kaip T1) yra išjungtas. Taigi tarp kolektoriaus ir emiterio kaiščių neteka srovė. Taigi kito tranzistoriaus (pažymėto T2) pagrindas bus pakeltas aukštai, todėl jis bus prisotintas, leisdamas srovei tekėti tarp jo kaiščių. Tai reiškia, kad T2 spinduolis bus žemas, nes jis prijungtas prie kolektoriaus, kuris pats yra prijungtas prie žemės. Taigi išvestis, kuri patenka į mūsų INT0 klavišų paspaudimo pertraukimo kaištį (PD4), bus maža ir pertraukos nebus.

Kas atsitiks, kai paspausiu klavišą? Na, tada T1 bazė pakyla virš 0,65 V (apatinių klavišų atveju ji vos vos pakyla aukščiau!) Ir tada bus leista tekėti srovei, kuri T2 pagrindą nukreips iki žemos įtampos ir tai išjungs T2. Bet mes matome, kad kai T2 yra išjungtas, tada išėjimas yra patrauktas aukštai, todėl mes gausime 5 V signalą, einantį į mūsų INT0 kaištį, ir tai sukels pertrauką.

Atkreipkite dėmesį, koks yra grynasis rezultatas. Jei paspausime 1 klavišą, gausime 5 V, einantį į PD4, nekeičiant išėjimo į ADC0, o dar svarbiau, net jei paspausime žvaigždutę, 0, maišą arba pakartotinį rinkimą, mes taip pat gausime 5 V signalą, einantį į INT0 ir sukelia pertrauką! Tai svarbu, nes jei tiesiog iš klaviatūros išvesties pereisime prie INT0 kaiščio, tie klavišai beveik nesukuria įtampos ir jų nepakaks, kad suaktyvintų tą pertraukimo kaištį. Mūsų įtampos stiprintuvas išsprendė šią problemą.

7 veiksmas: 4 skaitmenų rodymo kodas ir vaizdo įrašas

Tai viskas pamokai 9! Pridėjau kodą ir vaizdo įrašą, kuriame parodyta operacija.

Tai bus paskutinis kartas, kai naudosime analoginę klaviatūrą (ačiū Dievui). Tai buvo sunku naudoti, tačiau taip pat buvo labai naudinga padėti mums sužinoti apie analoginio skaitmeninio konvertavimą, analoginius prievadus, pertraukimus, multipleksavimą, triukšmo filtrus, įtampos stiprintuvus ir daugelį surinkimo kodavimo aspektų, pradedant paieškos lentelėmis ir baigiant laikmačiu/skaitikliu. ir tt Todėl nusprendėme jį naudoti. (be to, smagu krauti daiktus).

Dabar dar kartą pažvelgsime į bendravimą ir 7 segmentų bei 4 skaitmenų ekranuose nuskaitysime kauliukų ritinius iš mūsų kauliukų ritinėlio taip pat, kaip ir su registrų analizatoriumi. Šį kartą naudosime dviejų laidų sąsają, o ne mūsų nulaužtą morzės kodo metodą.

Kai ryšiai veiks ir ekranuose pasirodys ritinėliai, pagaliau galime pagaminti pirmąjį galutinio produkto gabalą. Pastebėsite, kad be visų analoginių prievadų mūsų kodas bus žymiai trumpesnis ir tikriausiai lengviau skaitomas.

Tiems iš jūsų, kurie yra ambicingi. Čia yra „projektas“, kurį galėtumėte išbandyti, kad šiuo metu tikrai turėtumėte žinių, jei iki šiol peržiūrėjote visas šias pamokas:

Projektas: Padarykite skaičiuotuvą! Naudokite mūsų 4 skaitmenų ekraną ir klaviatūrą ir pridėkite išorinį mygtuko paspaudimą, kuris veiks kaip „įvesties“klavišas. Priskirkite žvaigždutę „laikams“, maišą, kad „padalytumėte“pakartotinį rinkimą į „pliusą“, o blykstę - į „minusą“, ir parašykite skaičiuotuvą, kuris veikia kaip vienas iš tų senų HP „atvirkštinio lenkimo“skaičiuotuvų, kuriuos turėjo visi inžinieriai atgal į dieną. T.y. jie veikia taip, kad įvedate numerį ir paspaudžiate „Enter“. Tai stumia tą skaičių ant krūvos, tada įvedate antrą skaičių ir paspaudžiate „enter“, kuris antrąjį skaičių stumia į krūvą. Galiausiai paspaudžiate vieną iš operacijų, pvz., X, /, + arba -, ir ši operacija bus taikoma dviem aukščiausiems kamino skaičiams, parodys rezultatą ir nustums rezultatą į krūvą, kad galėtumėte vėl jį naudoti, jei Kaip. Pavyzdžiui, jei norite pridėti 2+3, atliksite: 2, „įveskite“, 3, „įveskite“, „+“, o tada ekrane pasirodys 5. Jūs žinote, kaip naudoti kaminą, ekraną, klaviatūrą ir dauguma fono kodų jau yra parašyti. Tiesiog pridėkite įvesties klavišą ir skaičiuotuvui reikalingas paprogrames. Tai šiek tiek sudėtingiau, nei gali atrodyti iš pradžių, tačiau tai smagu ir įmanoma.

Pasimatysim kitą kartą!

Rekomenduojamas: