Obsah:

AVR Assembler Tutorial 9: 7 krokov
AVR Assembler Tutorial 9: 7 krokov

Video: AVR Assembler Tutorial 9: 7 krokov

Video: AVR Assembler Tutorial 9: 7 krokov
Video: AVR Ассемблер. Урок 8. Внешние прерывания. AVR Assembler. Lesson 8. External interrupts. 2024, Júl
Anonim
Výučba montéra AVR 9
Výučba montéra AVR 9

Vitajte v návode 9.

Dnes si ukážeme, ako ovládať 7-segmentový displej a 4-miestny displej pomocou nášho kódu montážneho jazyka ATmega328P a AVR. V priebehu toho budeme musieť urobiť odklon k tomu, ako použiť zásobník na zníženie počtu registrov, ktoré potrebujeme spojiť. Pridáme pár kondenzátorov (nízkopriepustné filtre), aby sme sa pokúsili znížiť šum na našej klávesnici. Z niekoľkých tranzistorov vytvoríme zosilňovač napätia, aby náš vypínač prerušenia INT0 lepšie fungoval pre tlačidlá nižšieho napätia v dolnom rade klávesnice. A trochu si tresneme hlavami o stenu a pokúsime sa získať správne odpory, aby vec správne fungovala.

Našu klávesnicu budeme používať z tutoriálu 7

Na vykonanie tohto tutoriálu budete okrem štandardných vecí potrebovať:

  1. 7-segmentový displej

    www.sparkfun.com/products/8546

  2. 4-miestny displej

    www.sparkfun.com/products/11407

  3. Tlačidlo

    www.sparkfun.com/products/97

  4. Karty údajov pre displej, ktoré je možné stiahnuť z príslušných stránok, na ktoré sa odkazuje vyššie.
  5. Keramický kondenzátor 68 pf, pár 104 kondenzátorov, zväzok rezistorov a dva tranzistory 2N3904 NPN.

Tu je odkaz na kompletnú zbierku mojich návodov k assembleru AVR:

Krok 1: Zapojenie 7-seg displeja

Zapojenie 7-seg displeja
Zapojenie 7-seg displeja
Zapojenie 7-seg displeja
Zapojenie 7-seg displeja
Zapojenie 7-seg displeja
Zapojenie 7-seg displeja

Na ovládanie 7-segmentového displeja použijeme rovnaký kód, ktorý sme použili v Tutoriáli 7 pre klávesnicu. Budete si teda musieť vytvoriť kópiu a my ju upravíme.

Segmenty namapujeme na piny nášho mikrokontroléra nasledovne:

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

kde písmená segmentov sú na obrázku zobrazené spolu s vývodom zodpovedajúcim spoločným 5 V a každým zo segmentov LED vrátane desatinnej čiarky (dp) v pravom dolnom rohu displeja. Dôvodom je to, že môžeme zadať celé číslo do jedného registra a výstup, ktorý sa zaregistruje do portov B a D, rozsvietiť segmenty. Ako vidíte, bity sú číslované postupne od 0 do 7, a tak sa budú mapovať na správne piny bez toho, aby ste museli nastavovať a mazať jednotlivé bity.

Ako vidíte na kóde, ktorý sme priložili v nasledujúcom kroku, presunuli sme rutinu zobrazovania do makra a uvoľnili sme piny SDA a SCL na budúce použitie v nasledujúcom návode.

Mal by som dodať, že medzi spoločnú anódu displeja a 5V lištu musíte vložiť odpor. Vybral som si odpor 330 ohmov ako obvykle, ale ak chcete, môžete vypočítať minimálny odpor potrebný na dosiahnutie maximálneho jasu z displeja bez toho, aby ste ho vyprážali. Tu je postup, ako to urobiť:

Najprv sa pozrite na list s údajmi a všimnite si, že na prvej stránke poskytuje rôzne vlastnosti zobrazenia. Dôležitými veličinami sú „prúd vpred“(I_f = 20 mA) a „napätie vpred“(V_f = 2,2 V). Tieto vám hovoria, že chcete, aby pokles napätia na displeji bol, ak sa prúd rovná doprednému prúdu. Toto je maximálny prúd, ktorý displej spotrebuje bez vyprážania. V dôsledku toho je to tiež maximálny jas, ktorý môžete zo segmentov získať.

Použime teda Ohmov zákon a pravidlo Kirchoffovej slučky, aby sme zistili, aký minimálny odpor by sme potrebovali klásť do série s displejom, aby sme získali maximálny jas. Kirchoffovo pravidlo hovorí, že súčet zmien napätia okolo uzavretej slučky v obvode sa rovná nule a Ohmov zákon hovorí, že úbytok napätia na odpore odporu R je: V = I R kde I je prúd pretekajúci odporom.

Takže vzhľadom na zdrojové napätie V a obchádzanie nášho obvodu máme:

V - V_f - I R = 0

čo znamená (V - V_f)/I = R. Takže odpor potrebný na získanie maximálneho jasu (a pravdepodobne vyprážanie segmentov) bude:

R = (V - V_f)/I_f = (5,0 V - 2,2 V)/0,02 A = 140 ohmov

Takže ak by ste chceli, môžete bez obáv používať 150 ohmov. Myslím si však, že 140 ohmov je podľa môjho vkusu príliš svetlých, a preto používam 330 ohmov (čo je akýsi môj osobný zlatý odpor pre LED diódy)

Krok 2: Kód zostavy a video

Priložil som montážny kód a video ukazujúce činnosť klávesnice s displejom. Ako vidíte, jednoducho sme mapovali kľúč opakovanej voľby na „r“, kľúč blesku na „F“, hviezdičku na „A“a znak hash na „H“. Dali by sa mapovať na rôzne operácie, ako napríklad backspace, enter a čo nie, ak by ste chceli naďalej používať klávesnicu na písanie čísel na LCD displejoch alebo 4-miestnych displejoch. Tentokrát neprejdem kódom riadok po riadku, pretože je veľmi podobný tomu, čo sme už urobili v predchádzajúcich tutoriáloch. Rozdiely sú hlavne v tých istých veciach, ktoré už vieme, ako robiť prerušenia a vyhľadávacie tabuľky. Mali by ste si prejsť kód a pozrieť sa na nové veci, ktoré sme pridali a na veci, ktoré sme zmenili, a odtiaľ prísť na to. V nasledujúcom návode sa vrátime k analýze riadok po riadku, keď predstavíme nové aspekty kódovania montážneho jazyka na mikrokontroléroch AVR.

Pozrime sa teraz na 4-miestny displej.

Krok 3: Zapojenie 4-miestneho displeja

Zapojenie 4-miestneho displeja
Zapojenie 4-miestneho displeja
Zapojenie 4-miestneho displeja
Zapojenie 4-miestneho displeja

Podľa údajového listu má 4-miestny displej predný prúd 60 mA a predné napätie 2,2 voltu. Takže podľa rovnakého výpočtu ako predtým by som mohol použiť 47 ohmový odpor, keby som chcel. Namiesto toho použijem … hod… uvidíme … ako 330 ohmov.

Štvormiestny displej je zapojený tak, že existujú 4 anódy, jedna pre každú z číslic a druhé piny určujú, ktorý segment sa na každej z nich objaví. Môžete zobrazovať 4 číslice súčasne, pretože sú multiplexované. Inými slovami, rovnako ako pre pár kociek, jednoducho cyklujeme energiou cez každú z anód postupne a bude ich blikať jedna po druhej. Urobí to tak rýchlo, že naše oči žmurkanie neuvidia a bude to vyzerať, že sú zapnuté všetky štyri číslice. Lenže pre istotu spôsob, akým ho budeme kódovať, je nastaviť všetky štyri číslice, potom cyklovať anódy, nie nastavovať, presúvať, nastavovať, presúvať atď. Tak môžeme získať presné načasovanie medzi rozsvietením každej číslice..

Zatiaľ si vyskúšajme, či všetky segmenty fungujú.

Umiestnite odpor 330 ohmov medzi kladnú lištu dosky a prvú anódu na displeji. Datasheet nám hovorí, že piny sú očíslované od 1 do 16 proti smeru hodinových ručičiek začínajúce vľavo dole (keď sa normálne pozeráte na displej.. s desatinnými čiarkami v spodnej časti) a uvádza, že anódy sú čísla pinov 6, 8, 9 a 12.

Pripojíme teda kolík 6 na 5 V, potom odoberieme záporný vodič z vašej koľajnice GND a zasunieme ho do všetkých ostatných kolíkov a uvidíme, že všetky segmenty sa rozsvietia na číslici, ktorej zodpovedá (čo je vlastne druhá číslica z vpravo). Uistite sa, že sa rozsvieti všetkých 7 segmentov a desatinná čiarka.

Teraz prilepte svoj vodič GND do jedného z kolíkov, aby sa rozsvietil jeden zo segmentov, a tentoraz presuňte odpor k ďalším 3 anódam a uvidíte, že ten istý segment sa rozsvieti na každej z ďalších číslic.

Niečo neobvyklé?

Ukazuje sa, že pinout v technickom liste je nesprávny. Dôvodom je to, že ide o údajový list a vývod pre 12-kolíkový 4-miestny displej. Tj. jeden bez dvojbodky alebo hornej desatinnej čiarky. Displej, ktorý som dostal pri objednávke, je 16-pinový, 4-miestny displej. V skutočnosti sú moje anódy na kolíkoch 1, 2, 6 a 8. Hrubá anóda je kolík 4 (katódový kolík 12) a horná dp anóda je kolíková 10 (katóda je kolíková 9)

Cvičenie 1: Pomocou rezistora a uzemňovacieho vodiča zmapujte, ktorý kolík zodpovedá ktorému segmentu a desatinnej čiarke na displeji, aby sa nám pri kódovaní rozsvietili správne segmenty.

Spôsob, akým chceme kódovať segmentovú mapu, je presne taký, ako sme to urobili pri vyššie uvedenom jednomiestnom 7-segmentovom zobrazení-v kóde nemusíme nič meniť, jediné, čo meníme, je spôsob pripojenia vodičov. na tabuli. Jednoducho zapojte správny kolík portu na mikrokontroléri do zodpovedajúceho kolíka na 4-miestnom displeji, aby napríklad PB0 stále prechádzal na kolík zodpovedajúci segmentu a, PB1 prešiel do segmentu B atď.

Jediným rozdielom je, že teraz potrebujeme 4 ďalšie kolíky na anódy, pretože už nemôžeme jednoducho ísť na 5V lištu. Potrebujeme mikrokontrolér, aby rozhodol, ktorá číslica dostane šťavu.

Na ovládanie anód 4 číslic teda použijeme PC1, PC2, PC3 a PD4.

Môžete tiež pokračovať a zapojiť káble. (Nezabudnite na 330 ohmové odpory na anódových vodičoch!)

Krok 4: Kódovanie 4-miestneho displeja

Kódovanie 4-miestneho displeja
Kódovanie 4-miestneho displeja

Zamyslime sa, ako chceme tento displej kódovať.

Chceli by sme, aby používateľ stláčal tlačidlá klávesnice a aby sa čísla postupne zobrazovali na displeji pri každom stlačení tlačidla. Ak teda stlačím 1 a potom 2, zobrazí sa na displeji ako 12. Chcel by som tiež uložiť túto hodnotu 12 na vnútorné použitie, ale k tomu sa dostaneme o niečo neskôr. Zatiaľ chcem napísať nové makro, ktoré stlačí vaše klávesy a zobrazí ich. Pretože však máme iba 4 číslice, chcem sa uistiť, že vám to umožní zadať iba štyri čísla.

Ďalším problémom je, že multiplexovaný 4-miestny displej funguje tak, že cykluje anódy tak, že každá číslica je zapnutá iba na zlomok sekundy, než sa zobrazí ďalšia a potom ďalšia a nakoniec sa opäť vráti k prvej atď. potrebuje spôsob, ako to kódovať.

Chceme tiež, aby pri zadávaní ďalšej číslice presunul „kurzor“doprava o medzeru. Ak teda napríklad chcem napísať 1234, po zadaní čísla 1 sa kurzor presunie tak, aby sa ďalšia číslica, ktorú zadám, zobrazila na nasledujúcom 7-segmentovom displeji a podobne. Aj keď sa to deje, stále chcem byť schopný vidieť, čo som napísal, takže stále musí prechádzať číslicami a zobrazovať ich.

Znie to ako vysoký poriadok?

Veci sú v skutočnosti ešte horšie. Potrebujeme ďalšie 4 registre na všeobecné účely, ktoré môžeme použiť na uloženie aktuálnych hodnôt 4 číslic, ktoré chceme zobraziť (ak ich budeme cyklovať, musíme ich niekde uložiť) a problémom je, že máme používa bláznivé registre na všeobecné účely, a ak si nedáme pozor, nezostanú nám žiadne. Preto je pravdepodobne vhodné zaoberať sa týmto problémom skôr než neskôr a ukázať vám, ako uvoľniť registre pomocou zásobníka.

Začnime teda trochou zjednodušením, použijeme zásobník a uvoľníme niektoré registre a potom sa pokúsime splniť úlohu čítania a zobrazovania našich čísel na 4-miestnom displeji.

Krok 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

K dispozícii je iba niekoľko „univerzálnych registrov“, ktoré po použití už neexistujú. Je preto dobrou programátorskou praxou používať ich iba pre niekoľko premenných, ktoré sa používajú ako dočasné úložisko a ktoré potrebujete na čítanie a zápis do portov a pamäte SRAM alebo iné porty, ktoré budete potrebovať v podprogramoch všade, a tak pomenuj ich. Takže to, čo som urobil, teraz, keď sme inicializovali a učíme sa používať Stack, je prejsť kódom a nájsť pomenované registre na všeobecné účely, ktoré sa používajú iba vo vnútri jedného podprogramu alebo prerušenia a nikde inde v kóde a nahradiť ich s jedným z našich dočasných registrov a push a pop do zásobníka. V skutočnosti, keď sa pozriete na kód napísaný pre menšie mikrokontroléry, alebo sa vrátite v čase, keď boli všetky čipy menšie, uvidíte iba niekoľko registrov na všeobecné účely, ktoré bolo potrebné použiť na všetko, takže ste nemohli Uložte si tam hodnotu a nechajte to na pokoji, pretože ste si boli istí, že tento register budete potrebovať pre ďalšie veci. V kóde teda uvidíte tlačenie a tlačenie všade. Možno som mal pomenovať naše dočasné registre na všeobecné účely AX a BX ako úctyhodné chvály k týmto zašlým časom.

Príklad to pomôže objasniť.

Všimnite si, že v našom úplnom prerušení konverzie analógovo -digitálneho ADC_int používame univerzálny register, ktorý sme pomenovali buttonH, ktorý sme použili na načítanie hodnoty ADCH a porovnanie s našou vyhľadávacou tabuľkou analógových prevodov na konverzie stlačením tlačidla. Tento register buttonH používame iba v rámci podprogramu ADC_int a nikde inde. Namiesto toho teda použijeme našu premennú temp2, ktorú použijeme ako dočasnú premennú, ktorú môžeme použiť v rámci akéhokoľvek daného podprogramu a jeho hodnota neovplyvní nič mimo tohto podprogramu (tj hodnota, ktorú uvedieme v ADC_int, nebude nikde použitá. inak).

Ďalší príklad je v našom makre oneskorenia. Máme register, ktorý sme pomenovali „milisekundy“, ktorý obsahuje náš čas oneskorenia v milisekundách. V tomto prípade je to v makre a pripomíname, že práca makra je taká, že assembler umiestni celý kód makra na miesto programu, kde sa volá. V tomto prípade by sme sa chceli zbaviť premennej "milisekundy" a nahradiť ju jednou z našich dočasných premenných. V tomto prípade to urobím trochu inak, aby som vám ukázal, že aj keď bude hodnota premennej potrebná inde, stále ju môžeme použiť pomocou zásobníka. Takže namiesto milisekúnd použijeme „temp“a aby sme nepokazili ďalšie veci, ktoré tiež používajú hodnotu temp, jednoducho začneme makro „delay“„tlačením“temp na zásobník, potom ho použijeme namiesto milisekúnd a potom na konci makra „vyskočíme“jeho predchádzajúcu hodnotu späť zo zásobníka.

Čistým výsledkom je, že sme si „požičali“temp a temp2 na dočasné použitie a potom ich po dokončení obnovíme na predchádzajúce hodnoty.

Tu je rutina prerušenia ADC_int po vykonaní tejto zmeny:

ADC_int:

tlačná teplota; uložte teplotu, pretože ju tu upravujeme, stlačte temp2; uložiť temp2 lds temp2, ADCH; načítať stlačenie klávesu ldi ZH, vysoký (2*čísla) ldi ZL, nízky (2*čísla) cpi temp2, 0 breq návrat; ak sa nezmenia spúšťače šumu 7segnumber setkey: lpm temp, Z+; zaťaženie z tabuľky a prírastku clc cp temp2, temp; porovnať stlačenie klávesu s tabuľkou brlo PC+4; ak je ADCH nižší, skúste to znova lpm 7segnumber, Z; inak načítajte tabuľku hodnôt kľúčov vrátane číslice; zvýšiť číselné číslo rjmp návrat; a vrátiť sa ZH: ZL, 1; prírastok Z rjmp setkey; a vráťte sa na začiatok návrat: pop temp2; obnoviť temp2 pop temp; obnoviť teplotu reti

Všimnite si toho, že zásobník funguje tak, že prvé zapnutie je posledné vypnutie. Rovnako ako hromada papierov. Vidíte, že v našich prvých dvoch riadkoch tlačíme hodnotu temp na zásobník, potom tlačíme temp2 na zásobník, potom ich používame v podprograme na iné veci a nakoniec ich vrátime na svoje predchádzajúce hodnoty znova najskôr vypnite temp2 (pretože bol posledný, ktorý bol na neho zatlačený, je v hornej časti zásobníka a bude prvým, ktorý vyskočíme) a potom popping temp.

Takže odteraz budeme vždy používať túto metódu. Register skutočne určíme pre niečo iné ako dočasnú premennú iba vtedy, keď to budeme potrebovať kdekoľvek. Register s názvom „pretečenie“je napríklad register, ktorý používame na niekoľkých rôznych miestach programu, a preto by sme mu chceli dať názov. Samozrejme, stále by sme to mohli používať tak, ako sme to urobili s temp a temp2, pretože by sme obnovili jeho hodnotu potom, čo sme skončili. To by však veci príliš spagetizovalo. Sú pomenované z nejakého dôvodu a pre túto prácu už máme určené temp a temp2.

Krok 6: Nízkopriepustné filtre a zosilňovač napätia

Nízkopriepustné filtre a zosilňovač napätia
Nízkopriepustné filtre a zosilňovač napätia
Nízkopriepustné filtre a zosilňovač napätia
Nízkopriepustné filtre a zosilňovač napätia

Aby sme trochu vyčistili hluk a lepšie fungovali naše klávesnice, chceme pridať niekoľko nízkopriepustných filtrov. Tieto filtrujú vysokofrekvenčný šum a umožňujú prechod nízkofrekvenčného signálu. V podstate je to jednoducho tak, že medzi náš analógový vstup a zem a pridáme kondenzátor 68 pf medzi náš prerušovač PD4 (INT0) a uzemnenie a kondenzátor 0,1 mikrofarad (t.j. 104). Ak sa s nimi budete hrať a stlačíte tlačidlá na klávesnici, uvidíte, čo robia.

Ďalej chceme urobiť zosilňovač napätia. Ukazuje sa, že spodný rad klávesov na klávesnici (rovnako ako tlačidlo opätovného vytáčania) vydáva príliš nízke napätie na vypnutie prerušenia INT0. Analógový port je dostatočne citlivý na to, aby prečítal nízke napätie z týchto klávesov, ale náš prerušovací kolík nedostáva dostatočne dobrú stúpajúcu hranu na prerušenie, keď tieto klávesy stlačíme. Preto by sme chceli nejaký spôsob, ako zaistiť, aby pekná stúpajúca hrana napätia zasiahla PD4, ale rovnaké nízke napätie zasiahlo ADC0. Je to dosť vysoká objednávka, pretože oba signály pochádzajú z rovnakého výstupného vodiča našej klávesnice. Existuje niekoľko sofistikovaných spôsobov, ako to dosiahnuť, ale po tomto návode už nebudeme používať našu klávesnicu, takže si poďme spojiť metódu, ktorá funguje (sotva).

Najprv by ste mali pripojiť externé tlačidlo, aby ste nahradili prerušenie INT0, a ovládať displej podržaním klávesu na klávesnici a kliknutím na tlačidlo. To má menej problémov s klávesnicou a umožní vám byť si istý, že vaše napätie je v tabuľke vyhľadávania klávesnice správne nastavené. Hneď ako zistíte, že je klávesnica správne zapojená, zbavte sa tlačidla a vráťte prerušenie INT0. Ovládanie klávesnice týmto spôsobom spôsobuje vážne problémy s hlukom a napätím, takže je dobré vedieť, že všetko funguje tak, že budúce problémy je možné izolovať pomocou klávesu INT0.

Keď zapojíte klávesnicu a zosilňovač napätia, je veľmi pravdepodobné, že rovnaké hodnoty odporu, ktoré som použil, nebudú fungovať. Takže budete musieť urobiť nejaké experimenty, aby ste dosiahli hodnoty, ktoré vám vyhovujú.

Ak sa pozriete na diagram, ktorý som pripojil k tomuto kroku, uvidíte, ako bude zosilňovač napätia fungovať. Používame niektoré odpory a dva tranzistory. Fungovanie tranzistorov (pozri listy s údajmi!) Existuje minimálne napätie, ktoré musíte vložiť do základného kolíka na tranzistore (stredný kolík), ktorý ho nasýti a umožní prúdenie prúdu medzi kolektorovým kolíkom a emitorom špendlík. V prípade tranzistora 2N3904, ktorý tu používame, je napätie 0,65 V. Teraz odoberáme toto napätie z nášho výstupu z klávesnice a nechceme tento výstup meniť, takže medzi výstup z klávesnice a základňu prvého tranzistora vložíme veľký odpor (použil som 1Mohm). V diagrame som to označil ako R_1. Potom chceme nastaviť delič napätia tak, aby základňa tranzistora bola „takmer“na úrovni 0,65 voltu a iba malý kúsok ho vytlačil cez vrchol a nasýtil ho. Tento malý kúsok bude pochádzať z výstupu klávesnice, keď stlačíme tlačidlo. Pretože spodné klávesy na klávesnici vydávajú iba malé napätie, musíme byť už veľmi blízko k nasýteniu, aby ich bolo dosť. Rezistory deliča napätia sú na diagrame označené R_a a R_b. Použil som R_a = 1Mohm a R_b = 560Kohm, ale je takmer isté, že sa s týmito číslami budete musieť pohrať, aby ste ich dosiahli správne. Možno budete chcieť mať v blízkosti stenu, o ktorú sa budete búchať hlavou, a po ruke dva alebo tri poháre škótskej (odporučil by som Laphroaig - drahé, ale stojí za to, ak máte radi dym. Ak sa veci naozaj zbláznia, potom si dajte džbán BV a usadiť sa na noc)

Teraz sa pozrime na to, ako nám tranzistory prinesú príjemnú stúpajúcu hranu vstupujúcu do kľúča INT0 a generujúce naše prerušenie stlačenia klávesu. Najprv sa pozrime, čo sa stane, keď nestlačím kláves. V takom prípade je prvý tranzistor (na obrázku označený T1) vypnutý. Medzi kolektormi a emitorovými kolíkmi teda netečie žiadny prúd. Preto bude základňa druhého tranzistora (označená T2) vytiahnutá vysoko, a tým bude nasýtená, čím prúdi prúd medzi jeho kolíkmi. To znamená, že žiarič T2 bude ťahaný nízko, pretože je pripojený k kolektoru, ktorý je sám spojený so zemou. Výstup, ktorý prejde na náš kolík prerušenia stlačenia klávesu INT0 (PD4), bude nízky a nedôjde k žiadnemu prerušeniu.

Čo sa teraz stane, keď stlačím kláves? Potom základňa T1 prekročí 0,65 V (v prípade dolných kláves to len sotva prekročí!) A potom bude môcť prúdiť prúd, ktorý pritiahne základňu T2 na nízke napätie a tým sa T2 vypne. Vidíme však, že keď je T2 vypnutý, potom je výstup vytiahnutý vysoko, a preto dostaneme 5V signál smerujúci na náš pin INT0 a spôsobí to prerušenie.

Tu si všimnite, aký je čistý výsledok. Ak stlačíme kláves 1, dostaneme 5V na PD4 bez toho, aby sme výrazne zmenili výstup na ADC0, a čo je dôležitejšie, aj keď stlačíme Asterisk, 0, Hash alebo Redial, dostaneme tiež 5V signál idúci na INT0 a tiež spôsobuje prerušenie! To je dôležité, pretože ak sme práve prešli priamo z výstupu klávesnice na pin INT0, tieto kľúče nevytvárajú takmer žiadne napätie a nebudú stačiť na spustenie tohto prerušovacieho pinu. Náš zosilňovač napätia tento problém vyriešil.

Krok 7: 4-miestny kód zobrazenia a video

To je všetko pre tutoriál 9! Prikladám kód a video, ktoré ukazuje operáciu.

Toto bude poslednýkrát, čo použijeme analógovú klávesnicu (vďaka bohu). Jeho používanie bolo náročné, ale bolo tiež veľmi užitočné, aby nám pomohlo dozvedieť sa o analógovo-digitálnej konverzii, analógových portoch, prerušeniach, multiplexovaní, filtroch šumu, zosilňovačoch napätia a mnohých aspektoch kódovania zostavy od vyhľadávacích tabuliek po časovač/čítače. atď. Preto sme sa ho rozhodli použiť. (a navyše je zábavné mrhať vecami).

Teraz sa znova pozrieme na komunikáciu a prinútime naše 7-segmentové a naše 4-miestne displeje, aby čítali naše kocky z nášho valčeka na kocky rovnako, ako sme to robili s naším registračným analyzátorom. Tentoraz použijeme skôr dvojvodičové rozhranie ako metódu morseovského kódu.

Akonáhle budeme mať komunikáciu funkčnú a rolky sa budú zobrazovať na displejoch, môžeme konečne vyrobiť prvý kus nášho konečného produktu. Všimnite si, že bez všetkých vecí z analógových portov bude náš kód výrazne kratší a pravdepodobne aj čitateľnejší.

Pre tých z vás, ktorí sú ambiciózni. Tu je „projekt“, ktorý by ste mohli skúsiť a v tomto bode určite máte znalosti, ktoré ste urobili, ak ste všetky tieto návody prešli týmto bodom:

Projekt: Vyrobte si kalkulačku! Použite náš 4-miestny displej a klávesnicu a pridajte externé tlačidlo, ktoré bude fungovať ako kláves „Enter“. Namapujte hviezdičku na „časy“, hash na „rozdelenie“opakovanej voľby na „plus“a záblesk na „mínus“a napíšte rutinu kalkulačky, ktorá funguje ako jedna z tých starých kalkulačiek „reverzného leštenia“HP, ktoré mali všetci inžinieri. späť v deň. Tj. fungujú tak, že zadáte číslo a stlačíte „Enter“. Toto číslo sa vytlačí na stoh, potom zadáte druhé číslo a stlačíte „Enter“, čím sa druhé číslo posunie na stoh. Nakoniec stlačíte jednu z operácií ako X, /, + alebo - a táto operácia sa použije na prvé dve čísla v zásobníku, zobrazí sa výsledok a výsledok sa vytlačí do zásobníka, aby ste ho mohli znova použiť, ak Páči sa mi to. Ak napríklad chcete pridať 2+3, urobíte to: 2, „zadať“, 3, „zadať“, „+“a na displeji sa potom zobrazí 5. Viete, ako používať zásobník, displej, klávesnicu a vy väčšina kódu pozadia je už napísaná. Stačí pridať kláves Enter a podprogramy potrebné pre kalkulačku. Je to trochu komplikovanejšie, ako by ste si na prvý pohľad mysleli, ale je to zábavné a realizovateľné.

Uvidíme sa nabudúce!

Odporúča: