Tartalomjegyzék:

AVR Assembler bemutató 9: 7 lépés
AVR Assembler bemutató 9: 7 lépés

Videó: AVR Assembler bemutató 9: 7 lépés

Videó: AVR Assembler bemutató 9: 7 lépés
Videó: LDmicro 11: Последовательный контроллер температуры с ЖК-дисплеем (лестничное программирование ПЛК микроконтроллера с помощью LDmicro) 2024, Július
Anonim
AVR összeszerelő oktatóanyag 9
AVR összeszerelő oktatóanyag 9

Üdvözöljük a 9 -es oktatóanyagban.

Ma megmutatjuk, hogyan vezérelhetjük a 7 szegmenses és a 4 számjegyű kijelzőt az ATmega328P és az AVR összeállítási nyelvi kódjával. Ennek során el kell térnünk arra, hogyan használjuk a veremet a lekötendő regiszterek számának csökkentésére. Hozzáadunk néhány kondenzátort (aluláteresztő szűrőt), hogy csökkentsük a billentyűzeten a zajt. Feszültség -erősítőt hozunk létre pár tranzisztorból, hogy az INT0 megszakító kapcsolónk jobban működjön a billentyűzet alsó sorában lévő alacsonyabb feszültségű gomboknál. És egy kicsit a falba verjük a fejünket, és megpróbáljuk megszerezni a megfelelő ellenállásokat, hogy a dolog megfelelően működjön.

A 7. bemutató billentyűzetét fogjuk használni

Ennek az oktatóanyagnak a végrehajtásához a szokásos dolgokon kívül szüksége lesz:

  1. 7 szegmenses kijelző

    www.sparkfun.com/products/8546

  2. 4 számjegyű kijelző

    www.sparkfun.com/products/11407

  3. Nyomógomb

    www.sparkfun.com/products/97

  4. A kijelző adatlapjai, amelyek letölthetők a fent linkelt oldalaikról.
  5. Egy 68 pf kerámia kondenzátor, pár 104 kondenzátor, egy csomó ellenállás, két 2N3904 NPN tranzisztor.

Itt egy link az AVR összeszerelő oktatóanyagaim teljes gyűjteményéhez:

1. lépés: A 7 szegmenses kijelző bekötése

A 7 szegmenses kijelző bekötése
A 7 szegmenses kijelző bekötése
A 7 szegmenses kijelző bekötése
A 7 szegmenses kijelző bekötése
A 7 szegmenses kijelző bekötése
A 7 szegmenses kijelző bekötése

Ugyanazt a kódot fogjuk használni, amelyet a 7. oktatóanyagban használtunk a billentyűzet számára a 7 szegmenses kijelző vezérléséhez. Tehát másolatot kell készítenie erről, és módosítjuk.

A szegmenseket a mikrokontrollerünk csapjaihoz rendeljük az alábbiak szerint:

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

ahol a szegmensek betűi láthatók a képen a közös 5 V -os érintkezővel együtt, és a LED -szegmensek mindegyike, beleértve a kijelző jobb alsó sarkában lévő tizedespontot (dp). Ennek az az oka, hogy a teljes számot egyetlen regiszterbe tudjuk bevinni, és a B és D portra regisztráló kimenetet adunk ki, hogy megvilágítsuk a szegmenseket. Amint láthatja, a bitek 0 -tól 7 -ig vannak számozva, és így a megfelelő csapokhoz lesznek leképezve anélkül, hogy egyedi biteket kellene beállítani és törölni.

Amint az a következő lépésben csatolt kódból is látható, a megjelenítési rutinunkat áthelyeztük egy makróba, és felszabadítottuk az SDA- és SCL -csapokat a későbbi felhasználáshoz a következő oktatóanyagban.

Hozzá kell tennem, hogy ellenállást kell helyezni a kijelző közös anódja és az 5 V -os sín közé. A szokásos módon 330 ohmos ellenállást választottam, de ha úgy tetszik, kiszámíthatja a minimális ellenállást, amellyel sütés nélkül ki lehet hozni a kijelző maximális fényerejét. Ezt a következőképpen teheti meg:

Először nézze meg az adatlapot, és vegye észre, hogy az első oldalon a kijelző különböző tulajdonságait adja meg. A fontos mennyiségek a "Forward Current" (I_f = 20mA) és a "Forward Voltage" (V_f = 2.2V). Ezek azt jelzik, hogy a feszültségcsökkenés a kijelzőn akkor lesz, ha az áram egyenlő az előremenő árammal. Ez a maximális áram, amelyet a kijelző sütés nélkül vesz fel. Következésképpen a szegmensek maximális fényereje is.

Tehát használjuk fel Ohm törvényét és Kirchoff hurokszabályát, hogy kitaláljuk, milyen minimális ellenállást kell sorba állítanunk a kijelzővel, hogy elérjük a maximális fényerőt. A Kirchoff -szabály szerint az áramkör zárt hurok körüli feszültségváltozásainak összege nulla, és az Ohm -törvény szerint az R ellenállású ellenállás feszültségcsökkenése: V = I R ahol I az ellenálláson átfolyó áram.

Tehát adott V forrásfeszültség és az áramkörünk körül járva:

V - V_f - I R = 0

ami azt jelenti (V - V_f)/I = R. Tehát a maximális fényerő eléréséhez (és valószínűleg a szegmensek sütéséhez) szükséges ellenállás a következő lenne:

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

Tehát ha akarná, boldogan használhatna 150 ohmot aggodalom nélkül. Azt hiszem azonban, hogy a 140 ohm túl fényessé teszi az ízlésemet, és ezért 330 ohmot használok (ez egyfajta személyes Goldilocks ellenállásom a LED -eknél)

2. lépés: Összeszerelési kód és videó

Csatoltam az összeszerelési kódot és egy videót, amely bemutatja a billentyűzet és a kijelző működését. Amint láthatja, az újratárcsázási gombot egyszerűen "r" -re, a flash -kulcsot "F" -re, a csillagot "A" -ra, a hash -jelet pedig "H" -ra jelöljük. Ezeket különféle műveletekhez lehet hozzárendelni, mint például a Backspace, az Enter és a mit nem, ha továbbra is használni szeretné a billentyűzetet számok beírására LCD vagy 4 számjegyű kijelzőn. Ezúttal nem megyek végig a kódon soronként, mivel nagyon hasonlít ahhoz, amit az előző oktatóanyagokban már megtettünk. A különbségek elsősorban csak ugyanazok a dolgok, amelyeket már tudunk, mint a megszakítások és a keresőasztalok. Csak nézze át a kódot, és nézze meg az új dolgokat, amelyeket hozzáadtunk, és azokat a dolgokat, amelyeket módosítottunk, és onnan találja ki. A következő oktatóanyagban visszatérünk a soronkénti elemzéshez, amikor az AVR mikrokontrollerek összeszerelési nyelvi kódolásának új aspektusait mutatjuk be.

Nézzünk most egy 4 számjegyű kijelzőt.

3. lépés: A 4 számjegyű kijelző bekötése

A 4 számjegyű kijelző bekötése
A 4 számjegyű kijelző bekötése
A 4 számjegyű kijelző bekötése
A 4 számjegyű kijelző bekötése

Az adatlap szerint a 4 számjegyű kijelző 60 mA előremenő árammal és 2,2 voltos előremenő feszültséggel rendelkezik. Tehát ugyanazzal a számítással, mint korábban, ha akartam, használhattam egy 47 ohmos ellenállást. Ehelyett egy… hrm -t fogok használni. Hadd lássam… mi a helyzet 330 ohm -tal.

A 4 számjegyű kijelző bekötésének módja az, hogy 4 anód van, mindegyik számjegyhez egy, a másik csap pedig azt szabályozza, hogy melyik szegmens jelenik meg mindegyikben. Egyidejűleg 4 számjegyet jeleníthet meg, mert multiplexeltek. Más szóval, csakúgy, mint a kockapár esetében, egyszerűen körbeforgatjuk az áramot az egyes anódokon, és egymás után villog. Olyan gyorsan teszi ezt, hogy a szemünk nem látja a villogást, és úgy fog kinézni, mintha mind a négy számjegy rajta lenne. Azonban, hogy biztosak legyünk, a kódolás módját úgy állítjuk be, hogy mind a négy számjegyet beállítjuk, majd az anódokat ciklusozzuk, ahelyett, hogy beállítanánk, mozgatnánk, beállítanánk, mozgatnánk stb. Így pontos időzítést kapunk az egyes számjegyek megvilágítása között.

Egyelőre teszteljük, hogy minden szegmens működik.

Helyezze 330 ohmos ellenállását a kenyérsütő lemez pozitív sínje és a kijelző első anódja közé. Az adatlap azt mondja, hogy a tűk az óramutató járásával ellentétes irányban 1-től 16-ig vannak számozva a bal alsó sarokban kezdődően (ha normálisan nézi a kijelzőt.. a tizedespontokkal az alján), és azt állítja, hogy az anódok 6-os tűszámok, 8, 9 és 12.

Tehát összekötjük a 6 -os tüskét az 5 V -os feszültséggel, majd negatív vezetéket veszünk a GND sínjéről, és bedugjuk az összes többi érintkezőbe, és látjuk, hogy az összes szegmens világít azon a számjegyen, amelyiknek megfelel (ami valójában a második számjegy a jobb). Győződjön meg arról, hogy mind a 7 szegmens és a tizedespont világít.

Most ragassza a GND vezetéket az egyik csapba, hogy világítson az egyik szegmensen, és ezúttal mozgassa az ellenállást a másik 3 anódra, és nézze meg, hogy ugyanaz a szegmens világít a többi számjegyben.

Valami szokatlan?

Kiderül, hogy az adatlapon lévő pinout hibás. Ez azért van, mert ez az adatlap és a pinout egy 12 tűs, 4 számjegyű kijelzőhöz. Azaz. olyan, amelyben nincs kettőspont vagy tizedespont. A kijelző, amit megrendeléskor kaptam, egy 16 tűs, 4 számjegyű kijelző. Valójában az enyémben a szegmensanódok az 1, 2, 6 és 8 érintkezőknél vannak. A vastagbél anód a 4 -es (12 -es katódtű), a felső dp -anód pedig a 10 -es (a katód a 9 -es).

1. gyakorlat: Az ellenállás és a földvezeték segítségével térképezze fel, hogy melyik tű melyik szegmensnek és tizedespontnak felel meg a kijelzőn, hogy kódoláskor a megfelelő szegmensek világítsanak.

A szegmenstérkép kódolásának módja pontosan olyan, mint a fenti egy számjegyű, 7 szegmenses kijelzővel-nem kell semmit megváltoztatnunk a kódban, az egyetlen dolog, amit megváltoztatunk, a vezetékek csatlakoztatása a fedélzeten. Egyszerűen csatlakoztassa a mikrokontroller megfelelő portcsapját a 4-jegyű kijelző megfelelő tűjéhez, így például a PB0 továbbra is az a szegmensnek megfelelő tűhöz, a PB1 a B szegmenshez stb.

Az egyetlen különbség az, hogy most 4 extra csapra van szükségünk az anódokhoz, mivel nem tudunk egyszerűen továbbmenni az 5V -os sínhez. Szükségünk van a mikrokontrollerre, hogy eldöntsük, melyik számjegy kapja meg a levet.

Tehát a PC1, PC2, PC3 és PD4 segítségével fogjuk szabályozni a 4 számjegyű anódokat.

Esetleg menjen előre, és dugja be a vezetékeket. (ne felejtsük el a 330 ohmos ellenállást az anódvezetékeken!)

4. lépés: A négyjegyű kijelző kódolása

A 4 számjegyű kijelző kódolása
A 4 számjegyű kijelző kódolása

Gondoljuk végig, hogyan szeretnénk kódolni ezt a kijelzőt.

Szeretnénk, ha a felhasználó nyomja meg a billentyűzet gombjait, és a számok egymás után jelenjenek meg a kijelzőn, miközben minden gombot megnyomnak. Tehát ha megnyomok egy 1 -et, majd egy 2 -t, akkor a kijelzőn 12. jelenik meg. Szeretném ezt az értéket, 12 -et tárolni belső használatra, de erre egy kicsit később térünk rá. Most csak egy új makrót szeretnék írni, amely lenyomja a billentyűket és megjeleníti őket. Mivel azonban csak 4 számjegyből állunk, szeretném meggyőződni arról, hogy csak négy szám beírását teszi lehetővé.

Más kérdés, hogy a multiplexelt négyjegyű kijelző úgy működik, hogy az anódokat úgy ciklikusítja, hogy minden számjegy csak egy másodperc töredéke előtt legyen bekapcsolva, mielőtt megjeleníti a következő, majd a következőt, és végül vissza az elsőhöz, stb. szükség van ennek kódolására.

Azt is szeretnénk, ha a következő számjegy beírásakor a kurzor jobbra mozdulna. Tehát ha például 1234-et akarok beírni, akkor az 1 beírása után a kurzor át fog lépni, így a következő beírt számjegy megjelenik a következő 7 szegmenses kijelzőn és így tovább. Mindaddig, amíg ez történik, továbbra is látni akarom, amit beírtam, így továbbra is a számjegyek között kell bicikliznem és megjelenítenem őket.

Magas megrendelésnek hangzik?

A dolgok valójában még rosszabbak. Szükségünk van 4 általános célú regiszterre, amelyekkel tárolni tudjuk a megjeleníteni kívánt 4 számjegy aktuális értékeit (ha körbe akarunk menni, valahol tárolni kell őket), és ezzel az a probléma, hogy őrülten használtam az általános célú nyilvántartásokat, és ha nem vigyázunk, nem maradunk. Valószínűleg tehát jó ötlet előbb -utóbb megoldani ezt a problémát, és megmutatni, hogyan szabadíthat fel regisztereket a verem használatával.

Kezdjük tehát azzal, hogy egy kicsit leegyszerűsítjük a dolgokat, használjuk a veremet, és felszabadítunk néhány regisztert, majd megpróbáljuk teljesíteni azt a feladatot, hogy elolvassuk és megjelenítsük a számokat a 4 számjegyű kijelzőn.

5. lépés: Push 'n Pop

Push 'n Pop
Push 'n Pop

Csak néhány "általános célú nyilvántartás" áll a rendelkezésünkre, és ha egyszer használjuk őket, már nincsenek. Tehát jó programozási gyakorlat, hogy csak néhány változóhoz használja őket, amelyeket ideiglenes tárolónak használnak, amelyekre a portokról és az SRAM -ról való olvasáshoz és íráshoz szükségük van, vagy olyanokra, amelyekre mindenhol szükség lesz az alprogramokban. Nevezd meg őket. Tehát amit most tettem, most, hogy inicializáltuk és megtanuljuk használni a verem használatát, az, hogy végigmegyünk a kódon, és megkeressük a megnevezett általános célú regisztereket, amelyeket csak egyetlen alprogramban vagy megszakításban használunk, és sehol máshol a kódban. őket az egyik ideiglenes regiszterünkkel, és egy push and pop a veremre. Valójában, ha megnézi a kisebb mikrokontrollerekhez írt kódot, vagy ha visszamegy az időben, amikor minden chip kisebb volt, akkor csak néhány általános célú regisztert fog látni, amelyeket mindenre fel kellett használni, így nem tudta csak tároljon ott egy értéket, és hagyja békén, mivel biztos volt benne, hogy másra is szüksége lesz erre a regiszterre. Tehát mindenhol nyomást és pukkanást lát a kódban. Lehet, hogy az ideiglenes általános célú nyilvántartásainkat az AX és a BX nevű tiszteletreméltó dicséretnek kellett volna neveznem az elmúlt időkben.

Egy példa segít egyértelműbbé tenni ezt.

Figyeljük meg, hogy az analóg -digitális átalakítás teljes megszakításában, az ADC_int egy általános célú regisztert használunk, amelyet gombnak neveztünk el, amelyet az ADCH értékének betöltésére használtunk, és összehasonlítottuk az analóg és gombnyomásos konverziók keresési táblázatával. Ezt a buttonH regisztert csak az ADC_int alprogramon belül használjuk, és sehol máshol. Tehát ehelyett a temp2 változónkat fogjuk használni, amelyet ideiglenes változóként használunk, amelyet bármely adott alprogramon belül használhatunk, és értéke nem befolyásol semmit az alprogramon kívül (azaz az ADC_int -ben megadott értéket sehol nem fogjuk használni más).

Egy másik példa a késleltetési makrónk. Van egy "milliszekundum" nevű regiszterünk, amely a késleltetési időt milliszekundumokban tartalmazza. Ebben az esetben egy makróban van, és emlékeztetünk arra, hogy a makró munkája az, hogy az összeszerelő a teljes makrókódot a program helyére helyezi, ahol meghívják. Ebben az esetben szeretnénk megszabadulni a "ezredmásodperces" változótól, és lecserélni egy ideiglenes változóra. Ebben az esetben egy kicsit másképp teszem, hogy megmutassam, hogyan használhatjuk a verem használatával, még akkor is, ha a változó értékére máshol lesz szükség. Tehát ezredmásodpercek helyett a "temp" -t használjuk, és annak érdekében, hogy ne csavarjunk el más dolgokat, amelyek szintén a temp értékét használják, egyszerűen a "delay" makrót kezdjük a "temp" veremre tolásával, majd használjuk ezredmásodpercek helyett, majd a makró végén "kipattintjuk" korábbi értékét a veremből.

A nettó eredmény az, hogy ideiglenes használatra "kölcsönkértük" a temp és temp2 értékeket, majd ha elkészültünk, visszaállítottuk korábbi értékeiket.

Íme az ADC_int megszakítási rutin a módosítás végrehajtása után:

ADC_int:

nyomási hőmérséklet; a temp mentése, mivel itt módosítjuk, nyomja meg a temp2; mentés temp2 lds temp2, ADCH; gombnyomás betöltése ldi ZH, magas (2*szám) ldi ZL, alacsony (2*szám) cpi temp2, 0 breq return; ha a zajkioldók nem változnak 7 szám számú kulcs: lpm temp, Z+; terhelés táblázatból és utólagos növelésből clc cp temp2, temp; hasonlítsa össze a billentyűlenyomást az asztallal brlo PC+4; ha az ADCH alacsonyabb, próbálja újra lpm 7segnumber, Z; különben töltse be a kulcsérték táblázatot, beleértve a számjegyet; növelje a számjegy számát rjmp return; és visszatérés adiw ZH: ZL, 1; növekmény Z rjmp setkey; és térjen vissza az elejére return: pop temp2; temp2 pop temp visszaállítása; visszaállítási temp reti

Vegye figyelembe, hogy a verem úgy működik, hogy az első bekapcsolás az utolsó. Mint egy halom papír. Látja, hogy az első két sorunkban a temp értékét a veremre toljuk, majd a temp2 -t a veremre, majd az alprogramban más dolgokra használjuk, és végül visszaállítjuk őket korábbi értékeikre először a temp2 kikapcsolása (mivel ez volt az utolsó, amit rányomtak, a verem tetején van, és ez lesz az első, amit visszalépünk), majd a temp.

Így mostantól mindig ezt a módszert fogjuk használni. Az egyetlen alkalom, amikor valójában kijelölünk egy regisztert valami másra, mint a temp változóra, amikor mindenhol szükségünk lesz rá. Például a "túlcsordulás" nevű regisztert a program több különböző helyén használjuk, ezért szeretnénk nevet adni neki. Természetesen továbbra is használhatjuk úgy, ahogy a temp és a temp2 esetében, mivel visszaállítottuk az értékét, miután elkészültünk. De ez túlságosan elpazarolja a dolgokat. Oka miatt nevezték el őket, és a temp és a temp2 már kijelölt erre a feladatra.

6. lépés: Aluláteresztő szűrők és feszültség erősítő

Aluláteresztő szűrők és feszültség erősítő
Aluláteresztő szűrők és feszültség erősítő
Aluláteresztő szűrők és feszültség erősítő
Aluláteresztő szűrők és feszültség erősítő

Annak érdekében, hogy kissé tisztítsuk a zajt és jobban működjön a billentyűzetünk, szeretnénk hozzáadni néhány aluláteresztő szűrőt. Ezek kiszűrik a nagyfrekvenciás zajt, és átengedik az alacsony frekvenciájú jelet. Lényegében ennek az az módja, ha egyszerűen hozzáadunk egy 68 pf kondenzátort az analóg bemenet és a föld közé, valamint egy 0,1 mikrofarados (azaz 104) kondenzátort a PD4 (INT0) megszakítás és a föld közé. Ha ezekkel játszik, miközben megnyomja a billentyűzet gombjait, láthatja, hogy mit csinálnak.

Ezután feszültségerősítőt szeretnénk készíteni. Kiderült, hogy a billentyűzet alsó gombsora (valamint az újratárcsázó gomb) túl alacsony feszültséget ad le az INT0 megszakítás lekapcsolásához. Az analóg port elég érzékeny ahhoz, hogy ki tudja olvasni az alacsony feszültséget ezekből a gombokból, de a megszakítócsapunk nem kap elég jó emelkedő széleket ahhoz, hogy megszakítsuk, amikor megnyomjuk ezeket a gombokat. Ezért szeretnénk valamilyen módon megbizonyosodni arról, hogy a feszültség emelkedő éle eléri a PD4 -et, de ugyanaz az alacsony feszültség az ADC0 -t. Ez elég magas sorrend, mivel mindkét jel a billentyűzetünk ugyanazon kimeneti vezetékéről érkezik. Ennek számos kifinomult módja van, de ezt az oktatóprogramot követően nem fogjuk használni a billentyűzetünket, úgyhogy csak összeszedünk egy működő módszert (alig).

Először csatlakoztasson egy külső gombot az INT0 megszakítás cseréjéhez, és vezérelje a kijelzőt a billentyűzeten lévő gomb lenyomásával, és a gombra kattintva. Ez kevesebb kezelői problémát okoz, és biztos lehet benne, hogy a feszültség helyesen van beállítva a billentyűzet keresési táblázatában. Ha tudja, hogy a billentyűzet megfelelően van bekötve, akkor szabaduljon meg a gombból, és tegye vissza az INT0 megszakítást. Vannak komoly zaj- és feszültségproblémák, amelyek így irányítják a billentyűzetet, ezért jó tudni, hogy minden működik, így a jövőbeli problémák elkülöníthetők az INT0 gombbal.

Amikor beköti a billentyűzetet és a feszültség -erősítőt, nagyon valószínű, hogy az általam használt ellenállásértékek nem fognak működni. Tehát néhány kísérletet kell végeznie, hogy megkapja az Ön számára megfelelő értékeket.

Ha megnézi a diagramot, amelyet ehhez a lépéshez csatoltam, látni fogja, hogyan fog működni a feszültségerősítő. Néhány ellenállást és két tranzisztorot használunk. A tranzisztorok működési módja (lásd az adatlapokat!) Van egy minimális feszültség, amelyet be kell vinnie a tranziszter alapcsapjára (a középső csap), amely telíti azt, és lehetővé teszi az áram áramlását a kollektorcsap és az emitter között csap. Az itt használt 2N3904 tranzisztor esetén a feszültség 0,65V. Most ezt a feszültséget a billentyűzetről érkező kimenetünkből vesszük, és nem akarjuk megváltoztatni ezt a kimenetet, ezért nagy ellenállást teszünk a billentyűzet kimenete és az első tranzisztor bázisa közé (én 1Mohm -ot használtam). Ezt az ábrán R_1 jelöléssel jelöltem. Ezután egy feszültségosztót szeretnénk beállítani úgy, hogy a tranzisztor alapja "majdnem" már 0,65 volton legyen, és csak egy pici picivel tovább tolja a tetejét és telítse. Ez a kis gyenge bit a billentyűzet kimenetéből származik, amikor megnyomunk egy gombot. Mivel a billentyűzet alsó gombjai csak apró feszültséget adnak ki, már nagyon közel kell lennünk a telítettséghez, hogy elegendőek legyenek. A feszültségosztó ellenállások a diagramon R_a és R_b felirattal vannak ellátva. Az R_a = 1Mohm és az R_b = 560Kohm értékeket használtam, de szinte biztos, hogy ezekkel a számokkal kell játszanod, hogy megfelelő legyen a beállításhoz. Érdemes fal mellett ütni a fejét, és két -három pohár skót a kezedben (a Laphroaig -t ajánlanám - drága, de megéri, ha szereted a dohányzást. BV -ből, és telepedjen le éjszakára)

Most nézzük meg, hogyan fogják a tranzisztorok elérni az INT0 billentyű szép emelkedő élét, és generálni a billentyűleütés megszakítását. Először nézzük meg, mi történik, ha nem nyomok meg egy gombot. Ebben az esetben az első tranzisztor (a diagramon T1 jelzéssel) ki van kapcsolva. Tehát nem folyik áram a kollektor és az emitter csapjai között. Így a másik (T2 jelzésű) tranzisztor bázisa magasra húzódik, és így telítődik, lehetővé téve az áram áramlását a csapjai között. Ez azt jelenti, hogy a T2 kibocsátója alacsony lesz, mivel a kollektorhoz van csatlakoztatva, amely maga is a földhöz van csatlakoztatva. Így a kimenet, amely az INT0 gombnyomás megszakító csapjához (PD4) kerül, alacsony lesz, és nem lesz megszakítás.

Most mi történik, ha megnyomok egy gombot? Nos, akkor a T1 bázisa 0,65 V fölé megy (az alsó billentyűk esetében csak alig megy fölé!), Majd engedni kell az áramot, amely a T2 bázisát alacsony feszültségre húzza, és ez lekapcsolja a T2 -t. De látjuk, hogy amikor a T2 ki van kapcsolva, akkor a kimenetet magasra húzzuk, és így kapunk egy 5 V -os jelet az INT0 tűnkre, és ez megszakítást okoz.

Figyeld meg, mi itt a nettó eredmény. Ha megnyomjuk az 1 gombot, 5 V -ot kapunk a PD4 -re anélkül, hogy jelentősen megváltoztatnánk az ADC0 kimenetet, és ami még fontosabb, még akkor is, ha megnyomjuk a csillagot, a 0 -t, a hash -t vagy az újratárcsázást, akkor is kapunk egy 5V -os jelet az INT0 -ra és megszakítást okoz! Ez azért fontos, mert ha közvetlenül a billentyűzet kimenetéről az INT0 érintkezőre léptünk, akkor ezek a billentyűk szinte semmilyen feszültséget nem generálnak, és nem lesznek elegendőek a megszakító érintkező kiváltásához. Feszültség -erősítőnk megoldotta ezt a problémát.

7. lépés: Négyjegyű megjelenítési kód és videó

Ez minden a 9. oktatóanyaghoz! Csatoltam a kódot és egy videót, amely bemutatja a műveletet.

Ez lesz az utolsó alkalom, hogy az analóg billentyűzetet fogjuk használni (hála istennek). Nehéz volt használni, de nagyon hasznos volt az analóg-digitális átalakítás, az analóg portok, a megszakítások, a multiplexelés, a zajszűrők, a feszültségerősítők és az összeszerelési kódolás számos aspektusának megismerésében a keresési táblázatoktól az időzítőig/számlálóig, stb. Ezért döntöttünk úgy, hogy használjuk. (ráadásul szórakoztató a cuccok összegyűjtése).

Most újra megnézzük a kommunikációt, és a 7 szegmenses és a 4 számjegyű kijelzőnket úgy olvassuk ki, mint a dobókockáinkat a dobógörgőnkből, mint a regiszter-elemzőnknél. Ezúttal a kétvezetékes interfészt fogjuk használni, nem pedig a feltört morze-kód módszerünket.

Ha a kommunikáció működik, és a tekercsek megjelennek a kijelzőn, végre elkészíthetjük a végtermék első darabját. Észre fogja venni, hogy minden analóg port nélkül a kódunk lényegesen rövidebb lesz, és valószínűleg könnyebben olvasható.

Azoknak, akik ambiciózusak. Íme egy "projekt", amelyet kipróbálhat, és minden bizonnyal rendelkezik a szükséges ismeretekkel ezen a ponton, ha végigment ezen az oktatóanyagon:

Projekt: Készíts számológépet! Használja a 4 számjegyű kijelzőnket és a billentyűzetünket, és adjon hozzá egy külső gombnyomást, amely "enter" billentyűként fog működni. Térképezze le a csillagot "időkre", a hash -t, hogy "ossza" az újratárcsázást "pluszra", a vakut pedig "mínuszra", és írjon be egy számológépet, amely úgy működik, mint az egyik régi HP "fordított polírozó" számológép, amely minden mérnöknél volt a régi időkben. Azaz. működésük az, hogy beír egy számot, és megnyomja az "enter" gombot. Ezzel a számot a veremre tolja, majd beír egy második számot, és megnyomja az "enter" gombot, amely a második számot a veremre tolja. Végül megnyomja az egyik műveletet, például X, /, + vagy -, és ez a művelet a verem felső két számára vonatkozik, megjeleníti az eredményt, és az eredményt a veremre tolja, hogy újra használhassa, ha mint. Például a 2+3 hozzáadásához a következőt kell tennie: 2, "enter", 3, "enter", "+", és a kijelzőn ez olvasható: 5. Tudja, hogyan kell használni a verem, a kijelző, a billentyűzet és a háttérkód nagy része már meg van írva. Csak adja hozzá az enter billentyűt és a számológéphez szükséges alprogramokat. Kicsit bonyolultabb, mint elsőre gondolnád, de szórakoztató és kivitelezhető.

Találkozunk legközelebb!

Ajánlott: