Përmbajtje:

Tutoriali i AVR Assembler 9: 7 Hapa
Tutoriali i AVR Assembler 9: 7 Hapa

Video: Tutoriali i AVR Assembler 9: 7 Hapa

Video: Tutoriali i AVR Assembler 9: 7 Hapa
Video: AVR Ассемблер. Урок 9. USART. AVR Assembler. Lesson 9. USART. 2024, Korrik
Anonim
Udhëzues AVR Assembler 9
Udhëzues AVR Assembler 9

Mirësevini në Tutorial 9.

Sot do të tregojmë se si të kontrollojmë një ekran me 7 segmente dhe një ekran me 4 shifra duke përdorur kodin tonë të gjuhës së asamblesë ATmega328P dhe AVR. Gjatë kryerjes së kësaj ne do të na duhet të marrim devijime se si të përdorim grumbullin për të zvogëluar numrin e regjistrave që duhet të lidhim. Ne do të shtojmë disa kondensatorë (filtra me kalim të ulët) në përpjekje për të zvogëluar zhurmën në tastierën tonë. Ne do të krijojmë një përforcues të tensionit nga disa transistorë në mënyrë që ndërprerësi ynë ndërprerës INT0 të funksionojë më mirë për butonat e tensionit më të ulët në rreshtin e poshtëm të tastierës. Dhe ne do t'i përplasim kokën pak në mur duke u përpjekur të marrim rezistorët e duhur në mënyrë që gjëja të funksionojë siç duhet.

Ne do të përdorim tastierën tonë nga Tutorial 7

Për ta bërë këtë tutorial, përveç gjërave standarde, do t'ju duhet:

  1. Një ekran me 7 segmente

    www.sparkfun.com/products/8546

  2. Një ekran me 4 shifra

    www.sparkfun.com/products/11407

  3. Një buton

    www.sparkfun.com/products/97

  4. Fletët e të dhënave për ekranin të cilat mund të shkarkohen nga faqet e tyre përkatëse të lidhura më sipër.
  5. Një kondensator qeramik 68 pf, disa 104 kondensatorë, një tufë rezistencash, dy transistorë 2N3904 NPN.

Këtu keni një lidhje me koleksionin e plotë të mësimeve të mia të montuesit AVR:

Hapi 1: Instalimi i ekranit me 7 seg

Instalimi i ekranit me 7 segë
Instalimi i ekranit me 7 segë
Instalimi i ekranit me 7 segë
Instalimi i ekranit me 7 segë
Instalimi i ekranit me 7 segë
Instalimi i ekranit me 7 segë

Ne do të përdorim të njëjtin kod që kemi përdorur në Tutorial 7 për tastierën për të kontrolluar ekranin me 7 segmente. Kështu që do t'ju duhet të bëni një kopje të asaj dhe ne do ta modifikojmë.

Ne do t'i hartojmë segmentet në kunjat e mikrokontrolluesit tonë si më poshtë:

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

ku shkronjat e segmenteve tregohen në figurë së bashku me pinout -in që korrespondon me 5V të zakonshme dhe secilin nga segmentet LED duke përfshirë pikën dhjetore (dp) në të djathtën e poshtme të ekranit. Arsyeja për këtë është kështu që ne mund të futim të gjithë numrin në një regjistër të vetëm dhe dalje që regjistrohen në portet B dhe D për të ndriçuar segmentet. Siç mund ta shihni, bitët numërohen në mënyrë të njëpasnjëshme nga 0 në 7 dhe kështu ato do të hartohen në kunjat e duhur pa pasur nevojë të vendosni dhe pastroni bitët individualë.

Siç mund ta shihni me kodin që kemi bashkangjitur në hapin tjetër, ne kemi zhvendosur rutinën tonë të shfaqjes në një makro dhe kemi liruar kunjat SDA dhe SCL për përdorim në të ardhmen në Tutorialin tjetër.

Duhet të shtoj se duhet të vendosni një rezistencë midis anodës së zakonshme të ekranit dhe shiritit 5V. Zgjodha një rezistencë 330 ohm si zakonisht, por nëse ju pëlqen mund të llogaritni rezistencën minimale të nevojshme për të marrë shkëlqimin maksimal nga ekrani pa e skuqur atë. Ja se si ta bëni atë:

Fillimisht shikoni fletën e të dhënave dhe vini re se në faqen e parë jep veçori të ndryshme të ekranit. Sasitë e rëndësishme janë "Rryma Përpara" (I_f = 20mA) dhe "Tensioni Përpara" (V_f = 2.2V). Këto tregojnë se doni që rënia e tensionit në ekran të jetë nëse rryma është e barabartë me rrymën përpara. Kjo është rryma maksimale që do të marrë ekrani pa u skuqur. Rrjedhimisht është edhe shkëlqimi maksimal që mund të merrni nga segmentet.

Pra, le të përdorim ligjin e Ohmit dhe rregullin e lakut të Kirchoff për të kuptuar se çfarë rezistence minimale do të na duhej të vendosnim në seri me ekranin për të marrë shkëlqimin maksimal. Rregulli i Kirchoff thotë se shuma e ndryshimeve të tensionit rreth një lak të mbyllur në një qark është e barabartë me zero dhe ligji i Ohmit thotë se rënia e tensionit në një rezistencë të rezistencës R është: V = I R ku unë është rryma që rrjedh përmes rezistorit.

Duke pasur parasysh një tension të burimit të V dhe duke shkuar rreth qarkut tonë, ne kemi:

V - V_f - I R = 0

që do të thotë (V - V_f)/I = R. Pra, rezistenca e nevojshme për të marrë shkëlqimin maksimal (dhe ndoshta skuqjen e segmenteve) do të ishte:

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

Pra, nëse dëshironi, mund të përdorni me kënaqësi 150 Ohm pa merak. Sidoqoftë, unë mendoj se 140 ohms e bëjnë atë shumë të ndritshme sipas dëshirës sime dhe kështu përdor 330 ohms (që është një lloj rezistence e mia personale Goldilocks për LED)

Hapi 2: Kodi i Asamblesë dhe Video

Unë kam bashkangjitur kodin e montimit dhe një video që tregon funksionimin e tastierës me ekranin. Siç mund ta shihni, ne thjesht kemi shënuar çelësin e Redial në "r", çelësin flash në "F", yllin në "A" dhe shenjën e hash në "H". Këto mund të përputhen me operacione të ndryshme si prapa, futni dhe çfarë-jo nëse dëshironi të vazhdoni të përdorni tastierën për të shtypur numra në ekranet LCD ose ekranet me 4 shifra. Këtë herë nuk do ta kaloj kodin rresht pas rreshti pasi është shumë i ngjashëm me atë që kemi bërë tashmë në mësimet e mëparshme. Dallimet janë kryesisht më shumë nga të njëjtat gjëra që ne tashmë dimë të bëjmë si ndërprerjet dhe tabelat e kërkimit. Thjesht duhet të kaloni përmes kodit dhe të shikoni gjërat e reja që kemi shtuar dhe gjërat që kemi ndryshuar dhe ta kuptoni që atje. Ne do t'i kthehemi analizës rresht pas rreshti në tutorialin tjetër kur të prezantojmë aspekte të reja të kodimit të gjuhës së asamblesë në mikrokontrolluesit AVR.

Le të shikojmë tani një ekran me 4 shifra.

Hapi 3: Instalimi i ekranit me 4 shifra

Instalimi i ekranit me 4 shifra
Instalimi i ekranit me 4 shifra
Instalimi i ekranit me 4 shifra
Instalimi i ekranit me 4 shifra

Sipas fletës së të dhënave, ekrani me 4 shifra ka një Rrymë Forward prej 60 mA dhe një tension përpara prej 2.2 volt. Pra, me të njëjtën llogaritje si më parë, unë mund të përdor një rezistencë 47 Ohm nëse do të doja. Në vend të kësaj unë do të përdor një … hrm.. më lejoni të shoh … sa për 330 ohms.

Mënyra se si lidhet ekrani 4-shifror është se ka 4 anoda, një për secilën prej shifrave, dhe kunjat e tjera kontrollojnë se cili segment vjen në secilën. Mund të shfaqni 4 shifra njëkohësisht sepse ato janë të shumëfishta. Me fjalë të tjera, ashtu siç bëmë për palën e zareve, ne thjesht ciklojmë fuqinë përmes secilës prej anodave me radhë dhe do t'i ndezë ato njëra pas tjetrës. Do ta bëjë këtë aq shpejt sa sytë tanë nuk do të shohin që vezullojnë dhe do të duket sikur të katër shifrat janë të ndezura. Sidoqoftë, vetëm për të qenë të sigurt, mënyra se si do ta kodojmë është të vendosim të katër shifrat, pastaj të ciklojmë anodat, në vend që të vendosim, lëvizim, vendosim, lëvizim, etj. Në atë mënyrë ne mund të marrim një kohë të saktë midis ndriçimit të çdo shifre Me

Tani për tani, le të testojmë që të gjitha segmentet funksionojnë.

Vendosni rezistencën tuaj 330 ohm midis shiritit pozitiv të bordit tuaj të bukës dhe anodës së parë në ekran. Fleta e të dhënave na tregon se kunjat numërohen nga 1 në 16 në drejtim të kundërt të akrepave të orës duke filluar nga poshtë majtas (kur shikoni ekranin normalisht.. me pikat dhjetore përgjatë pjesës së poshtme) dhe thotë se anodat janë numra pin 6, 8, 9 dhe 12.

Pra, ne lidhim pin 6 me 5V dhe pastaj marrim një drejtim negativ nga hekurudha juaj GND dhe e futim atë në të gjitha kunjat e tjerë dhe shohim që të gjitha segmentet të ndriçojnë në shifrën që i korrespondon (e cila në fakt është shifra e dytë nga e drejta). Sigurohuni që të merrni të 7 segmentet dhe pikën dhjetore të ndizet.

Tani ngjiteni telin tuaj GND në njërën nga kunjat për të ndriçuar një nga segmentet dhe këtë herë lëvizni rezistencën në 3 anodat e tjera dhe shihni se i njëjti segment ndizet në secilën prej shifrave të tjera.

A ka ndonjë gjë të pazakontë?

Rezulton se pinout në fletën e të dhënave është e gabuar. Kjo ndodh sepse është fleta e të dhënave dhe pinout për një ekran 12-pin, 4-shifror. Dmth një pa zorrë ose pikë dhjetore të sipërme. Ekrani që mora kur e porosita është një ekran 16-pin, 4-shifror. Në fakt, në timen, anodat e segmentit janë në kunjat 1, 2, 6 dhe 8. Anoda e zorrës së trashë është kunja 4 (kodi i katodës 12) dhe anoda e sipërme e dp është kunja 10 (katoda është kunja 9)

Ushtrimi 1: Përdorni rezistencën dhe telin tuaj të tokëzimit për të përcaktuar se cila kunj korrespondon me cilin segment dhe pikë dhjetore në ekran, kështu që ndriçojmë segmentet e sakta kur e kodojmë.

Mënyra se si duam të kodojmë hartën e segmentit është saktësisht siç bëmë me ekranin një-shifror me 7 segmente më sipër-nuk kemi pse të ndryshojmë asgjë në kod, e vetmja gjë që ndryshojmë është mënyra se si lidhen telat në tabelë. Thjesht lidhni pinin e duhur të portës në mikrokontrolluesin në pinin përkatës në ekranin me 4 shifra, në mënyrë që, për shembull, PB0 të shkojë akoma te kunja që korrespondon me segmentin a, PB1 të shkojë në segmentin B, etj.

Dallimi i vetëm është se tani na duhen 4 kunja shtesë për anodat pasi nuk mund të shkojmë më në hekurudhën 5V. Ne kemi nevojë për mikrokontrolluesin për të vendosur se cila shifër merr lëngun.

Pra, ne do të përdorim PC1, PC2, PC3 dhe PD4 për të kontrolluar anodat e 4 shifrave.

Ju gjithashtu mund të shkoni përpara dhe të lidhni telat. (mos harroni rezistencat 330 Ohm në telat e anodës!)

Hapi 4: Kodimi i Ekranit 4-shifror

Kodimi i ekranit me 4 shifra
Kodimi i ekranit me 4 shifra

Le të mendojmë se si duam ta kodojmë këtë ekran.

Ne do të donim që përdoruesi të shtyjë butonat e tastierës dhe numrat të shfaqen në mënyrë të njëpasnjëshme në ekran ndërsa shtypin çdo buton. Pra, nëse shtyj një 1 të ndjekur nga një 2 do të shfaqet në ekran si 12. Unë gjithashtu do të doja ta ruaja atë vlerë, 12, për përdorim të brendshëm, por do ta arrijmë atë pak më vonë. Tani për tani unë thjesht dua të shkruaj një makro të re e cila merr shtypjet e tastit tuaj dhe i shfaq ato. Sidoqoftë, meqenëse kemi vetëm 4 shifra, dua të sigurohem që ju lejon të shkruani vetëm katër numra.

Një çështje tjetër është se mënyra se si funksionon ekrani 4-shifror i shumëfishtë është duke cikluar anodat në mënyrë që secila shifër të jetë e ndezur vetëm për një sekondë të ndarë para se të shfaqë tjetrën, pastaj tjetrën dhe më në fund përsëri te e para, etj. Pra, ne keni nevojë për një mënyrë për ta koduar këtë.

Ne gjithashtu duam që ajo të lëvizë "kursorin" në një hapësirë në të djathtë kur shtypim shifrën tjetër. Kështu që nëse dua të shkruaj 1234 për shembull, pasi të shtyp 1, kursori do të lëvizë në mënyrë që shifra tjetër që shkruaj të shfaqet në ekranin e ardhshëm me 7 segmente dhe kështu me radhë. Gjatë gjithë kohës që kjo po ndodh, unë ende dua të jem në gjendje të shoh atë që kam shtypur, kështu që ende duhet të kaloj nëpër shifra dhe t'i shfaq ato.

Tingëllon si një porosi e gjatë?

Gjërat në fakt janë edhe më keq. Ne kemi nevojë për 4 regjistra të tjerë për qëllime të përgjithshme që mund t'i përdorim për të ruajtur vlerat aktuale të 4 shifrave që duam të shfaqim (nëse do t'i kalojmë nëpër to ne duhet t'i ruajmë diku) dhe problemi me këtë është se ne kemi po përdornim regjistra për qëllime të përgjithshme si të çmendur dhe nëse nuk kujdesemi nuk do të na mbetet. Pra, është ndoshta një ide e mirë që ta trajtoni atë çështje herët se sa vonë dhe t'ju tregojë se si të lironi regjistrat duke përdorur pirgun.

Pra, le të fillojmë duke i thjeshtuar pak gjërat, të përdorim grumbullin dhe të lirojmë disa regjistra dhe më pas do të përpiqemi të përmbushim detyrën e leximit dhe shfaqjes së numrave tanë në ekranin 4 shifror.

Hapi 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Ekzistojnë vetëm disa "Regjistra me Qëllim të Përgjithshëm" që ne kemi në dispozicion dhe pasi të përdoren ato nuk ka më. Pra, është praktikë e mirë programimi që t'i përdorni vetëm për disa ndryshore që përdoren si ruajtje e përkohshme që ju nevojiten për të lexuar dhe shkruar në porte dhe SRAM, ose për ato që do t'ju nevojiten në nënrutina kudo dhe kështu emërtojini ato. Pra, ajo që kam bërë, tani që kemi inicuar dhe po mësojmë të përdorim Stack, është të kalojmë nëpër kod dhe të gjejmë regjistrat e emëruar për qëllime të përgjithshme që përdoren vetëm brenda një nën -rutine të vetme ose ndërprejnë dhe askund tjetër në kod dhe zëvendësojnë ato me një nga regjistrat tanë të temperaturës dhe një shtytje dhe dalje në pirg. Në fakt, nëse shikoni kodin e shkruar për mikrokontrolluesit më të vegjël, ose nëse ktheheni pas në kohë kur të gjitha patate të skuqura ishin më të vogla, do të shihni vetëm disa regjistra të përdorimit të përgjithshëm që duheshin përdorur për gjithçka, kështu që nuk mundeni thjesht ruani një vlerë atje dhe lini atë vetëm pasi keni qenë të sigurt se keni nevojë për atë regjistër për gjëra të tjera. Kështu që ju do të shihni pushin 'dhe një poppin' kudo në kod. Ndoshta duhet t'i kisha emëruar regjistrat tanë për qëllime të përgjithshme AX dhe BX si një lavdërim respektues për ato ditë të kaluara.

Një shembull do ta ndihmojë këtë ta bëjë më të qartë.

Vini re se në ndërprerjen tonë të plotë të konvertimit analog në dixhital ADC_int ne përdorim një regjistër për qëllime të përgjithshme të cilin e kemi quajtur buttonH të cilin e kemi përdorur për të ngarkuar vlerën e ADCH dhe për ta krahasuar atë me tabelën tonë të kërkimit të konvertimeve të shtypit analog në buton. Ne e përdorim këtë regjistër butonH vetëm në nënrutinën ADC_int dhe askund tjetër. Pra, në vend të kësaj ne do të përdorim ndryshoren tonë temp2 të cilën e përdorim si një ndryshore të përkohshme që mund ta përdorim brenda çdo nën -rutine të caktuar dhe vlera e saj nuk do të ndikojë në asgjë jashtë asaj nënrutine (p.sh. vlera që i japim në ADC_int nuk do të përdoret askund tjetër).

Një shembull tjetër është makroja jonë e vonesës. Ne kemi një regjistër që e kemi quajtur "milisekonda" i cili përmban kohën tonë të vonesës në milisekonda. Në këtë rast është në një makro dhe ne kujtojmë se mënyra e funksionimit të makros është se montuesi vendos të gjithë makro kodin në vendin e programit ku quhet. Në këtë rast ne do të donim të heqim qafe ndryshoren "milisekonda" dhe ta zëvendësojmë atë me një nga ndryshoret tona të përkohshme. Në këtë rast, unë do ta bëj atë pak më ndryshe për t'ju treguar se si edhe nëse vlera e ndryshores do të jetë e nevojshme diku tjetër, ne ende mund ta përdorim atë duke përdorur pirgun. Pra, në vend të milisekondave ne përdorim "temp" dhe në mënyrë që të mos vidhosim gjëra të tjera që gjithashtu përdorin vlerën e temp, ne thjesht fillojmë makro "vonesë" duke "shtyrë" temp në stekë, atëherë ne e përdorim atë në vend të milisekondave, dhe pastaj në fund të makro -së ne "nxjerrim" vlerën e saj të mëparshme mbrapa nga pirgu.

Rezultati neto është se ne kemi "huazuar" temp dhe temp2 për përdorim të përkohshëm dhe më pas i kemi rikthyer ato në vlerat e tyre të mëparshme kur të kemi mbaruar.

Këtu është rutina e ndërprerjes ADC_int pasi keni bërë këtë ndryshim:

ADC_int:

temperaturë shtytëse; ruaj temp pasi ne e modifikojmë këtu shtyjmë temp2; ruani temp2 lds temp2, ADCH; shtypni tastin ldi ZH, të lartë (2*numra) ldi ZL, të ulët (2*numra) cpi temp2, 0 kthim breq; nëse nxitësit e zhurmës nuk ndryshojnë çelësin e numrit 7 të numrit: lpm temp, Z+; ngarkesa nga tabela dhe shtimi i postës clc cp temp2, temp; krahaso shtypjen e tastit me tabelën brlo PC+4; nëse ADCH është më e ulët, provoni përsëri lpm 7segnumber, Z; përndryshe ngarkoni tabelën me vlerë kyçe inc shifër; rrit numrin e shifrës kthimi rjmp; dhe kthehu adiw ZH: ZL, 1; rritje Z rjmp setkey; dhe kthehu në krye kthimi: pop temp2; rivendos temp2 pop temp; rivendosni temp reti

Vini re se mënyra e funksionimit të pirgut është se ndezja e parë është zbritja e fundit. Ashtu si një pirg letrash. Ju shikoni që në dy rreshtat tanë të parë ne e shtyjmë vlerën e temp në pirg, pastaj e shtyjmë temp2 në stiv, pastaj i përdorim në nënrutinë për gjëra të tjera, dhe në fund i rikthejmë përsëri në vlerat e tyre të mëparshme fillimisht hapja e temp2 fikur (meqenëse ishte e fundit e shtyrë mbi të është në krye të pirgut dhe do të jetë e para që do të zbresim) dhe më pas popping temp.

Kështu që tani e tutje ne gjithmonë do ta përdorim këtë metodë. E vetmja herë që ne në të vërtetë do të caktojmë një regjistër për diçka tjetër përveç një ndryshoreje temp është kur do të na nevojitet kudo. Për shembull, regjistri i quajtur "tejmbushur" është ai që ne përdorim në disa vende të ndryshme në program dhe kështu ne do të donim t'i jepnim një emër. Sigurisht që ne ende mund ta përdorim atë siç kemi bërë me temp dhe temp2 pasi do të rivendosim vlerën e tij pasi të kemi mbaruar. Por kjo do t'i spagetizonte gjërat shumë. Ata janë emëruar për një arsye dhe ne kemi temp dhe temp2 të caktuar tashmë për atë punë.

Hapi 6: Filtra me kalim të ulët dhe përforcues i tensionit

Filtra me kalim të ulët dhe përforcues i tensionit
Filtra me kalim të ulët dhe përforcues i tensionit
Filtra me kalim të ulët dhe përforcues i tensionit
Filtra me kalim të ulët dhe përforcues i tensionit

Në mënyrë që të pastrojmë pak zhurmën dhe ta bëjmë tastierën tonë të funksionojë më mirë, ne duam të shtojmë disa filtra me kalim të ulët. Këto filtrojnë zhurmën me frekuencë të lartë dhe lejojnë kalimin e sinjalit me frekuencë të ulët. Në thelb mënyra për ta bërë këtë është thjesht të shtoni një kondensator 68 pf midis hyrjes dhe tokës sonë analoge dhe gjithashtu një kondensator 0.1 mikrofarad (dmth. 104) midis ndërprerësit dhe tokëzimit tonë PD4 (INT0). Nëse luani me këto ndërsa shtypni butonat në tastierë do të jeni në gjendje të shihni se çfarë bëjnë ata.

Tjetra ne duam të bëjmë një përforcues të tensionit. Rezulton se rreshti i poshtëm i çelësave në tastierë (si dhe çelësi i thirrjes) po vënë një tension shumë të ulët për të fikur ndërprerjen INT0. Porta analoge është mjaft e ndjeshme për të lexuar tensionet e ulëta nga këto çelësa, por kunja jonë e ndërprerjes nuk po merr një avantazh mjaft të mirë në rritje për të ndërprerë kur i shtyjmë ato çelësa. Prandaj ne do të donim një mënyrë për t'u siguruar që një avantazh i bukur i tensionit të godasë PD4, por i njëjti tension i ulët godet ADC0. Ky është një urdhër mjaft i gjatë pasi të dy sinjalet vijnë nga i njëjti tel dalës i tastierës sonë. Ka një numër mënyrash të sofistikuara për ta bërë këtë, por ne nuk do të përdorim tastierën tonë më pas këtij mësimi, kështu që le të krijojmë së bashku një metodë që funksionon (mezi).

Së pari duhet të lidhni një buton të jashtëm për të zëvendësuar ndërprerjen INT0 dhe të kontrolloni ekranin duke mbajtur një çelës në tastierë dhe duke klikuar butonin. Kjo ka më pak probleme me tastierën dhe do t'ju lejojë të jeni të sigurt se tensionet tuaja janë vendosur saktë në tryezën e kërkimit të tastierës. Pasi ta dini që tastiera është e lidhur siç duhet, hiqeni butonin dhe vendoseni përsëri ndërprerjen INT0. Ka disa çështje serioze të zhurmës dhe tensionit që kontrollojnë tastierën në këtë mënyrë, kështu që është mirë të dini se gjithçka funksionon në mënyrë që problemet e ardhshme të mund të izolohen në çelësin INT0.

Kur lidhni tastierën dhe përforcuesin tuaj të tensionit, ka shumë të ngjarë që të njëjtat vlera të rezistencës që kam përdorur nuk do të funksionojnë. Kështu që do të duhet të bëni disa eksperimente për të marrë vlerat që funksionojnë për ju.

Nëse shikoni diagramin që i kam bashkangjitur këtij hapi do të shihni se si do të funksionojë përforcuesi i tensionit. Ne përdorim disa rezistorë dhe dy transistorë. Mënyra se si funksionojnë tranzistorët (shikoni fletët e të dhënave!) Është se ekziston një tension minimal që ju nevojitet për të futur në kunjin bazë në transistor (kunja e mesme) i cili do ta ngopë atë dhe do të lejojë që rryma të rrjedhë midis pinit të kolektorit dhe emetuesit gjilpere. Në rastin e transistorit 2N3904 që ne po përdorim këtu tensioni është 0.65V. Tani ne po marrim atë tension nga dalja jonë nga tastiera dhe nuk duam ta ndryshojmë atë dalje kështu që ne do të vendosim një rezistencë të madhe midis daljes nga tastiera dhe bazës së tranzistorit të parë (kam përdorur 1Mohm). Unë e kam etiketuar këtë si R_1 në diagram. Pastaj ne duam të vendosim një ndarës të tensionit në mënyrë që baza e tranzistorit të jetë "pothuajse" në 0.65 volt tashmë dhe vetëm pak më shumë se një adoleshent do ta shtyjë atë mbi krye dhe do ta ngopë atë. Ai copëza e re e keqe do të vijë nga dalja e tastierës kur shtypim një buton. Meqenëse çelësat e poshtëm në tastierë po japin vetëm një tension të vogël, ne duhet të jemi shumë afër ngopjes tashmë në mënyrë që ato të jenë të mjaftueshme. Rezistencat e ndarjes së tensionit janë etiketuar R_a dhe R_b në diagram. Kam përdorur R_a = 1Mohm dhe R_b = 560Kohm, por është pothuajse e sigurt që do të duhet të luani me këta numra për ta marrë atë siç duhet për konfigurimin tuaj. Ju mund të dëshironi të keni një mur aty pranë për të përplasur kokën dhe dy ose tre gota skoce në dorë (Unë do të rekomandoja Laphroaig - e shtrenjtë, por ia vlen nëse ju pëlqen tymi. Nëse gjërat bëhen vërtet të çmendura, atëherë merrni vetëm një enë të BV dhe vendosuni për natën)

Tani le të shohim sesi transistorët do të na japin një avantazh të bukur në rritje duke shkuar në çelësin INT0 dhe do të gjenerojë ndërprerjen tonë të shtypjes së tastit. Së pari le të shohim se çfarë ndodh kur nuk jam duke shtypur një çelës. Në atë rast, tranzistori i parë (i etiketuar T1 në diagram) është i fikur. Pra, asnjë rrymë nuk rrjedh midis kunjave të kolektorit dhe emetuesit. Kështu, baza e tranzistorit tjetër (e etiketuar T2) do të tërhiqet lart dhe kështu do të ngopet duke lejuar që rryma të rrjedhë midis kunjave të tij. Kjo do të thotë se emetuesi i T2 do të tërhiqet ulët pasi është i lidhur me kolektorin i cili vetë është i lidhur me tokën. Kështu, dalja që shkon në pinin tonë të ndërprerjes së shtypjes së tastit INT0 (PD4) do të jetë e ulët dhe nuk do të ketë ndërprerje.

Tani çfarë ndodh kur shtyp një çelës? Epo atëherë baza e T1 shkon mbi 0.65V (në rastin e çelësave të poshtëm ajo mezi shkon mbi!) Dhe pastaj do të lejohet të rrjedhë rryma e cila do të tërheqë bazën e T2 në tension të ulët dhe kjo do të mbyll T2. Por ne shohim që kur T2 është i fikur, atëherë dalja tërhiqet lart dhe kështu ne do të marrim një sinjal 5V që shkon në pinin tonë INT0 dhe do të shkaktojë një ndërprerje.

Vini re se cili është rezultati neto këtu. Nëse shtypim butonin 1, marrim 5V që shkon në PD4 pa ndryshuar ndjeshëm daljen që shkon në ADC0, dhe më e rëndësishmja, edhe nëse shtyjmë Asterisk, 0, Hash ose Redial, ne gjithashtu marrim një sinjal 5V që shkon në INT0 dhe gjithashtu duke shkaktuar një ndërprerje! Kjo është e rëndësishme pasi që nëse kalojmë drejtpërdrejt nga dalja e tastierës në pinin INT0, ato çelësa nuk po gjenerojnë pothuajse asnjë tension dhe nuk do të jenë të mjaftueshëm për të shkaktuar atë kunj ndërprerës. Përforcuesi ynë i tensionit e ka zgjidhur këtë problem.

Hapi 7: Kodi dhe Video me 4 shifra të ekranit

Kjo është e gjitha për tutorialin 9! Unë kam bashkangjitur kodin dhe një video që tregon operacionin.

Kjo do të jetë hera e fundit që do të përdorim tastierën analoge (falë Zotit). Ishte e vështirë për t'u përdorur, por ishte gjithashtu shumë e dobishme për të na ndihmuar të mësojmë rreth konvertimit analog-në-dixhital, porteve analoge, ndërprerjeve, multipleximit, filtrave të zhurmës, përforcuesve të tensionit dhe shumë aspekte të kodimit të montimit nga tabelat e kërkimit në kohëmatës/numërues, etj Kjo është arsyeja pse ne vendosëm ta përdorim atë. (plus është kënaqësi të pastrosh gjëra).

Tani ne do të shikojmë sërish komunikimin dhe do të bëjmë që ekranet tona 7-segmentëshe dhe 4-shifrore të lexojnë rrotullat tona të zareve nga rrotulla jonë e zareve në të njëjtën mënyrë siç bëmë me analizuesin tonë të regjistrit. Këtë herë ne do të përdorim ndërfaqen me dy tela sesa metodën tonë të koduar së bashku të kodit morse.

Pasi të kemi komunikimet që funksionojnë dhe rrotullat shfaqen në ekranet, më në fund mund të bëjmë pjesën e parë të produktit tonë përfundimtar. Ju do të vini re se pa të gjitha sendet e portit analog kodi ynë do të jetë shumë më i shkurtër dhe ndoshta më i lehtë për t’u lexuar.

Për ata prej jush që janë ambiciozë. Këtu është një "projekt" që mund të provoni që me siguri keni njohuri për të bërë në këtë pikë nëse i keni kaluar të gjitha këto udhëzime deri në këtë pikë:

Projekti: Bëni një kalkulator! Përdorni ekranin tonë 4-shifror dhe tastierën tonë dhe shtoni një shtypje të jashtme të butonit që do të veprojë si një çelës "fut". Hartoni yllin në "herë", hash për të "ndarë" ri -thirrjen në "plus" dhe blicin në "minus" dhe shkruani një rutinë llogaritëse që vepron si një nga ato kalkulatorët e vjetër të HP "polish të kundërt" që kishin të gjithë inxhinierët përsëri atë ditë. Dmth mënyra se si ata punojnë është se ju futni një numër dhe shtypni "enter". Kjo e shtyn atë numër në pirg, pastaj futni një numër të dytë dhe shtypni "enter", i cili e shtyn numrin e dytë në pirg. Së fundi ju shtypni një nga operacionet si X, /, + ose - dhe ai do ta zbatojë atë operacion në dy numrat e parë në pirg, do të shfaqë rezultatin dhe do ta shtyjë rezultatin në pirg në mënyrë që ta përdorni përsëri nëse si Për shembull për të shtuar 2+3 ju do të bënit: 2, "enter", 3, "enter", "+" dhe ekrani pastaj do të lexonte 5. Ju e dini se si të përdorni pirgun, ekranin, tastierën dhe ju kanë shumicën e kodit të sfondit të shkruar tashmë. Thjesht shtoni çelësin e hyrjes dhe nën -programet e nevojshme për kalkulatorin. Isshtë pak më e komplikuar nga sa mund të mendonit në fillim, por është argëtuese dhe e arritshme.

Shihemi heren tjeter!

Recommended: