Sisällysluettelo:

AVR -kokoonpanon opetusohjelma 9: 7 vaihetta
AVR -kokoonpanon opetusohjelma 9: 7 vaihetta

Video: AVR -kokoonpanon opetusohjelma 9: 7 vaihetta

Video: AVR -kokoonpanon opetusohjelma 9: 7 vaihetta
Video: ЛЕГКИЙ детский кардиган с пандой крючком (с капюшоном) 🐼💝 2024, Heinäkuu
Anonim
AVR -kokoonpanon opetusohjelma 9
AVR -kokoonpanon opetusohjelma 9

Tervetuloa opetusohjelmaan 9.

Tänään näytämme kuinka hallita sekä 7-segmenttistä näyttöä että 4-numeroista näyttöä ATmega328P- ja AVR-kokoonpanokielikoodillamme. Tätä tehdessämme meidän on pohdittava, kuinka pinon käyttöä vähennetään sitomisten rekisterien lukumäärää. Lisäämme pari kondensaattoria (alipäästösuodatin), jotta voimme vähentää näppäimistön melua. Luomme jännitevahvistimen parista transistorista, jotta INT0 -keskeytyskytkimemme toimii paremmin näppäimistön alarivin alemman jännitteen painikkeille. Ja lyömme päätämme seinää vasten hieman yrittäen saada oikeat vastukset niin, että asia toimii oikein.

Käytämme opetusohjelman 7 näppäimistöä

Tämän opetusohjelman suorittamiseen tarvitset tavallisten tavaroiden lisäksi:

  1. 7-segmenttinen näyttö

    www.sparkfun.com/products/8546

  2. 4-numeroinen näyttö

    www.sparkfun.com/products/11407

  3. Painike

    www.sparkfun.com/products/97

  4. Näytön tietolomakkeet, jotka voidaan ladata vastaavilta sivuilta, jotka on linkitetty yllä.
  5. 68 pf keraaminen kondensaattori, pari 104 kondensaattoria, nippu vastuksia, kaksi 2N3904 NPN -transistoria.

Tässä on linkki koko AVR-kokoonpanon opetusohjelmien kokoelmaan:

Vaihe 1: 7-segmenttisen näytön kytkentä

7-segmenttisen näytön kytkentä
7-segmenttisen näytön kytkentä
7-segmenttisen näytön kytkentä
7-segmenttisen näytön kytkentä
7-segmenttisen näytön kytkentä
7-segmenttisen näytön kytkentä

Käytämme samaa koodia, jota käytimme opetusohjelmassa 7 näppäimistöllä 7-segmenttisen näytön ohjaamiseen. Joten sinun on otettava kopio siitä ja me muutamme sitä.

Kartoitamme segmentit mikrokontrollerimme nastoihin seuraavasti:

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

jossa segmenttien kirjaimet näkyvät kuvassa yhdessä yhteistä 5 V: n pinoutia ja kunkin LED -segmentin kanssa, desimaalipiste (dp) näytön oikeassa alakulmassa. Syy tähän on se, että voimme syöttää koko numeron yhteen rekisteriin ja tulostaa sen, joka rekisteröi portit B ja D segmenttien sytyttämiseksi. Kuten näette, bitit on numeroitu peräkkäin 0: sta 7: een, joten ne kartoitetaan oikeisiin nastoihin ilman, että yksittäisiä bittejä on asetettava ja tyhjennettävä.

Kuten seuraavassa vaiheessa liittämämme koodin perusteella näet, olemme siirtäneet näyttörutiinin makroon ja vapauttaneet SDA- ja SCL -nastat tulevaa käyttöä varten seuraavassa opetusohjelmassa.

Haluan lisätä, että sinun on asetettava vastus näytön yhteisen anodin ja 5V -kiskon väliin. Valitsin 330 ohmin vastuksen tavalliseen tapaan, mutta jos haluat, voit laskea vähimmäisvastuksen, joka tarvitaan näytön maksimaalisen kirkkauden saamiseksi ilman paistamista. Voit tehdä sen seuraavasti:

Katso ensin tietolomaketta ja huomaa, että ensimmäisellä sivulla se antaa erilaisia näytön ominaisuuksia. Tärkeitä määriä ovat "eteenpäin suuntaava virta" (I_f = 20mA) ja "eteenpäin suunnattu jännite" (V_f = 2,2V). Nämä kertovat, että haluat jännitteen putoavan näytön poikki, jos virta on yhtä suuri kuin eteenpäin tuleva virta. Tämä on suurin virta, jonka näyttö kestää ilman paistamista. Se on näin ollen myös suurin kirkkaus, jonka voit saada segmentteistä.

Käytämme siis Ohmin lakia ja Kirchoffin silmukkasääntöä selvittääksemme, mikä vähimmäisvastus meidän on asetettava sarjaan näytön kanssa saadaksemme maksimaalisen kirkkauden. Kirchoffin sääntö sanoo, että jännitteen muutosten summa piirin suljetun silmukan ympärillä on nolla ja Ohmin laki sanoo, että jännitehäviö vastuksen R vastuksen yli on: V = I R missä I on vastuksen läpi kulkeva virta.

Joten kun otetaan huomioon lähdejännite V ja kiertämällä piiriämme, meillä on:

V - V_f - I R = 0

mikä tarkoittaa (V - V_f)/I = R. Joten maksimaalisen kirkkauden (ja luultavasti segmenttien paistamisen) saamiseksi tarvittava vastus olisi:

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

Joten jos haluat, voit käyttää onnellisesti 150 ohmia huoletta. Luulen kuitenkin, että 140 ohmia tekee siitä liian kirkkaan makuuni, ja siksi käytän 330 ohmia (mikä on eräänlainen henkilökohtainen kultakellon vastus LED -valolle)

Vaihe 2: Kokoonpanokoodi ja video

Olen liittänyt kokoonpanokoodin ja videon, joka näyttää näppäimistön toiminnan näytön kanssa. Kuten näette, olemme yksinkertaisesti yhdistäneet uudelleenvalintanäppäimen kohtaan "r", flash -näppäimen "F", tähti "A" ja hajautusmerkin "H". Nämä voidaan yhdistää eri toimintoihin, kuten askelpalautin, enter ja mitä ei, jos haluat jatkaa näppäimistön käyttöä numeroiden kirjoittamiseen nestekidenäytöille tai 4-numeroisille näytöille. En mene läpi koodia rivi kerrallaan tällä kertaa, koska se on hyvin samanlainen kuin mitä olemme jo tehneet aiemmissa opetusohjelmissa. Eroja ovat lähinnä vain samat asiat, joita jo osaamme tehdä, kuten keskeytykset ja hakutaulukot. Sinun pitäisi vain käydä koodi läpi ja katsoa uusia asioita, joita olemme lisänneet ja mitä olemme muuttaneet, ja selvittää se sieltä. Palaamme rivikohtaiseen analyysiin seuraavassa opetusohjelmassa, kun esittelemme uusia näkökohtia kokoonpanokielen koodaukseen AVR-mikro-ohjaimissa.

Katsotaan nyt 4-numeroista näyttöä.

Vaihe 3: 4-numeroisen näytön kytkentä

4-numeroisen näytön kytkentä
4-numeroisen näytön kytkentä
4-numeroisen näytön kytkentä
4-numeroisen näytön kytkentä

Tietolomakkeen mukaan 4-numeroisen näytön etuvirta on 60 mA ja lähtöjännite 2,2 volttia. Joten samalla laskelmalla kuin aiemmin, voisin käyttää 47 ohmin vastusta, jos haluaisin. Sen sijaan aion käyttää… hrm.. anna minun nähdä… entä 330 ohmia.

Nelinumeroinen näyttö on kytketty siten, että siinä on 4 anodia, yksi kullekin numerolle, ja muut nastat ohjaavat, mikä segmentti syttyy kussakin. Voit näyttää 4 numeroa samanaikaisesti, koska ne ovat multipleksoituja. Toisin sanoen, aivan kuten teimme noppaparille, yksinkertaisesti kiertämme voimaa jokaisen anodin läpi vuorotellen ja se vilkuttaa niitä peräkkäin. Se tekee tämän niin nopeasti, että silmämme eivät näe vilkkumista ja näyttää siltä, että kaikki neljä numeroa ovat päällä. Kuitenkin vain varmuuden vuoksi tapa, jolla koodaamme sen, on asettaa kaikki neljä numeroa ja sitten kiertää anodit sen sijaan, että asetat, siirrät, asetat, siirrät jne. Näin voimme saada tarkan ajoituksen jokaisen numeron sytyttämisen välillä.

Testaamme toistaiseksi, että kaikki segmentit toimivat.

Aseta 330 ohmin vastus leipälevyn positiivisen kiskon ja näytön ensimmäisen anodin väliin. Tietolomake kertoo, että nastat on numeroitu 1-16 vastapäivään vasemmasta alakulmasta alkaen (kun katsot näyttöä normaalisti.. desimaalipisteet alhaalla) ja siinä todetaan, että anodit ovat nastanumeroita 6, 8, 9 ja 12.

Joten liitämme nastan 6 - 5 V ja otamme sitten negatiivisen johdon GND -kiskostasi ja pistämme sen kaikkiin muihin nastoihin ja näemme, että kaikki segmentit syttyvät vastaavalle numerolle (joka on itse asiassa toinen numero oikea). Varmista, että saat kaikki 7 segmenttiä ja desimaalipilkun syttymään.

Kiinnitä nyt GND -lanka yhteen nastoista valaistaksesi yksi segmenteistä ja tällä kertaa siirrä vastus kolmelle muulle anodille ja katso, että sama segmentti syttyy kaikissa muissa numeroissa.

Jotain epätavallista?

On käynyt ilmi, että lomakkeen lomake on virheellinen. Tämä johtuu siitä, että se on 12-nastaisen, 4-numeroisen näytön datalehti ja pinout. Toisin sanoen jossa ei ole kaksoispistettä tai ylempää desimaalia. Näyttö, jonka sain tilauksen yhteydessä, on 16-nastainen, 4-numeroinen näyttö. Itse asiassa, minun, segmenttianodit ovat nastoissa 1, 2, 6 ja 8. Kaksoispisteanodi on nasta 4 (katoditappi 12) ja ylempi dp -anodi on nasta 10 (katodi on nasta 9)

Harjoitus 1: Käytä vastusta ja maadoitusjohtoa kartoittaaksesi, mikä nasta vastaa mitä segmenttiä ja desimaalipistettä näytöllä, jotta saamme oikeat segmentit syttymään koodatessamme sitä.

Tapa, jolla haluamme koodata segmenttikartan, on täsmälleen sama kuin edellä olevalla yksinumeroisella 7-segmenttinäytöllä-meidän ei tarvitse muuttaa mitään koodissa, muutamme vain tapaa, jolla johdot on kytketty laudalla. Liitä vain mikrokontrollerin oikea porttitappi 4-numeroisen näytön vastaavaan nastaan, jotta esimerkiksi PB0 menee edelleen segmenttiä a vastaavaan nastaan, PB1 menee segmenttiin B jne.

Ainoa ero on, että nyt tarvitsemme 4 ylimääräistä nastaa anodeille, koska emme voi enää yksinkertaisesti mennä 5V -kiskoon. Tarvitsemme mikro -ohjaimen päättämään, mikä numero saa mehun.

Joten käytämme PC1: tä, PC2: ta, PC3: ta ja PD4: tä 4 numeron anodien hallintaan.

Voit myös mennä eteenpäin ja kytkeä johdot. (älä unohda anodijohtimien 330 ohmin vastuksia!)

Vaihe 4: 4-numeroisen näytön koodaus

4-numeroisen näytön koodaus
4-numeroisen näytön koodaus

Ajatellaanpa, miten haluamme koodata tämän näytön.

Haluamme, että käyttäjä painaa näppäimistön painikkeita ja että numerot näkyvät näytössä peräkkäin, kun he painavat kutakin painiketta. Joten jos painan 1 ja sen jälkeen 2, se näkyy näytöllä 12. Haluan myös tallentaa arvon 12 sisäiseen käyttöön, mutta tulemme siihen hieman myöhemmin. Tällä hetkellä haluan vain kirjoittaa uuden makron, joka painaa näppäimiä ja näyttää ne. Koska meillä on kuitenkin vain 4 numeroa, haluan varmistaa, että sen avulla voit kirjoittaa vain neljä numeroa.

Toinen ongelma on, että tapa, jolla multipleksoitu 4-numeroinen näyttö toimii, on kiertää anodit niin, että jokainen numero on päällä vain sekunnin murto-osassa, ennen kuin se näyttää seuraavan ja sitten seuraavan ja lopulta takaisin ensimmäiseen jne. tarvitaan tapa koodata tämä.

Haluamme myös, että se siirtää "kohdistimen" oikealle välilyönnille, kun kirjoitamme seuraavan numeron. Joten jos haluan kirjoittaa esimerkiksi 1234, sen jälkeen kun olen kirjoittanut 1, kohdistin siirtyy niin, että seuraava kirjoittamani numero näkyy seuraavassa 7-segmentin näytössä ja niin edelleen. Koko tämän ajanjakson ajan haluan silti nähdä kirjoittamani, joten sen täytyy silti selata numeroita ja näyttää ne.

Kuulostaako korkealta tilaukselta?

Asiat ovat itse asiassa vielä pahempia. Tarvitsemme neljä yleiskäyttöistä rekisteriä, joiden avulla voimme tallentaa näytettävien 4 numeron nykyiset arvot (jos aiomme selata niitä, meidän on pidettävä ne jossakin) ja ongelmana on, että meillä on olemme käyttäneet yleiskäyttörekistereitä kuin hulluja, ja jos emme varo, meillä ei ole jäljellä. Joten on luultavasti hyvä idea puuttua tähän ongelmaan ennemmin kuin myöhemmin ja näyttää, kuinka voit vapauttaa rekisterit pinoa käyttämällä.

Aloitetaan siis yksinkertaistamalla asioita hieman, käyttämällä pinoa ja vapauttamalla joitain rekistereitä, ja sitten yritämme suorittaa tehtävänmme lukea ja näyttää numeromme 4-numeroisella näytöllä.

Vaihe 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Käytössämme on vain muutama "yleiskäyttörekisteri", ja kun niitä käytetään, niitä ei enää ole. Joten on hyvä ohjelmointikäytäntö käyttää niitä vain muutamille muuttujille, joita käytetään väliaikaisena tallennustilana, joita tarvitset lukemiseen ja kirjoittamiseen porteista ja SRAM: stä tai muille, joita tarvitset aliohjelmissa kaikkialla ja niin nimetä ne. Joten mitä olen tehnyt nyt, kun olemme alustaneet ja opimme käyttämään pinoa, on käydä koodi läpi ja löytää nimetyt yleiskäyttörekisterit, joita käytetään vain yhden aliohjelman tai keskeytyksen sisällä eikä missään muualla koodissa ja korvata heillä on yksi väliaikaisista rekistereistämme ja push ja pop pinoon. Itse asiassa, jos tarkastelet koodia, joka on kirjoitettu pienemmille mikro -ohjaimille, tai jos palaat ajassa taaksepäin, kun kaikki sirut olivat pienempiä, näet vain pari yleiskäyttöistä rekisteriä, jotka oli käytettävä kaikkeen, joten et voinut vain tallenna arvo sinne ja jätä se rauhaan, koska tarvit varmasti kyseisen rekisterin muihin asioihin. Joten näet pushin 'ja poppin' kaikkialla koodissa. Ehkä minun olisi pitänyt nimetä väliaikaiset yleiskäyttörekisterimme AX ja BX kunnioittavana kunnioituksena menneille päiville.

Esimerkki auttaa selventämään tätä.

Huomaa, että analogisesta digitaaliseen muuntamiseen perustuvassa täydellisessä keskeytyksessä ADC_int käytämme yleistä rekisteriä, jonka olemme nimenneet painikkeella H ja jota käytimme lataamaan ADCH -arvon ja vertaamaan sitä hakutaulukkoomme analogisesta painikkeeseen. Käytämme tätä buttonH -rekisteriä vain ADC_int -aliohjelman sisällä eikä missään muualla. Joten sen sijaan käytämme muuttujamme temp2, jota käytämme väliaikaisena muuttujana, jota voimme käyttää missä tahansa aliohjelmassa, eikä sen arvo vaikuta mihinkään kyseisen aliohjelman ulkopuolelle (eli arvoa, jonka annamme sille ADC_intissa, ei käytetä missään muu).

Toinen esimerkki on viivästysmakro. Meillä on nimetty rekisteri "millisekuntia", joka sisältää viiveemme millisekunteina. Tässä tapauksessa se on makrossa, ja muistamme, että tapa, jolla makro työskentelee, on se, että kokoonpanija sijoittaa koko makrokoodin ohjelman kohtaan, jossa sitä kutsutaan. Tässä tapauksessa haluamme päästä eroon "millisekuntien" muuttujasta ja korvata sen jollakin väliaikaisista muuttujistamme. Tässä tapauksessa teen sen hieman eri tavalla näyttääkseni, kuinka voimme käyttää muutosta pinon avulla, vaikka muuttujan arvoa tarvittaisiin muualla. Käytämme siis millisekuntien sijasta "temp" ja jotta emme sekoita muita asioita, jotka käyttävät myös temp -arvoa, aloitamme "delay" -makron yksinkertaisesti "työntämällä" temp pinoon, sitten käytämme sitä millisekuntien sijasta, ja sitten makron lopussa "ponnahdamme" sen edellisen arvon takaisin pinosta.

Tuloksena on, että olemme "lainanneet" temp ja temp2 väliaikaiseen käyttöön ja palauttaneet ne sitten aikaisempiin arvoihinsa, kun olemme valmiit.

Tässä on ADC_int -keskeytysrutiini tämän muutoksen jälkeen:

ADC_int:

työntölämpötila; tallenna lämpötila, koska muokkaamme sitä täällä push temp2; tallenna temp2 lds temp2, ADCH; lataa näppäimen painallus ldi ZH, korkea (2*numerot) ldi ZL, matala (2*numeroa) cpi temp2, 0 breq return; jos kohinan laukaisimet eivät muutu 7 -numeroinen asetuspainike: lpm temp, Z+; lataa taulukosta ja post lisäys clc cp temp2, temp; vertaa näppäimen painallusta taulukkoon brlo PC+4; jos ADCH on pienempi, yritä uudelleen lpm 7segnumber, Z; muuten lataa avainarvotaulukko sisältäen numeron; lisää numeroa rjmp return; ja palauta adiw ZH: ZL, 1; lisäys Z rjmp setkey; ja palaa alkuun paluu: pop temp2; palauta temp2 pop -lämpötila; palauta lämpötila eläkkeelle

Huomaa, että pino toimii siten, että ensimmäinen käynnistys on viimeinen. Aivan kuin paperipino. Näet, että kahdella ensimmäisellä rivillämme työnnämme temp -arvon pinoon, sitten temp2: n pinoon, sitten käytämme niitä aliohjelmassa muihin asioihin ja lopulta palaamme ne aiempiin arvoihinsa ensimmäinen ponnahdus temp2 pois (koska se oli viimeinen työntänyt se on pinon yläosassa ja on ensimmäinen, jonka ponnahdamme takaisin) ja sitten popping temp.

Joten tästä lähtien käytämme aina tätä menetelmää. Ainoa kerta, kun nimitämme rekisterin muulle kuin lämpömuuttujalle, on silloin, kun tarvitsemme sitä kaikkialla. Esimerkiksi rekisteriä nimeltä "ylivuoto" käytämme useissa eri paikoissa ohjelmassa, joten haluamme antaa sille nimen. Tietenkin voisimme silti käyttää sitä samalla tavalla kuin olemme tehneet temp ja temp2 kanssa, koska palauttaisimme sen arvon valmistumisen jälkeen. Mutta se vääristäisi asioita liikaa. Ne on nimetty syystä ja meillä on temp ja temp2 jo nimetty kyseistä työtä varten.

Vaihe 6: Alipäästösuodattimet ja jännitevahvistin

Alipäästösuodattimet ja jännitevahvistin
Alipäästösuodattimet ja jännitevahvistin
Alipäästösuodattimet ja jännitevahvistin
Alipäästösuodattimet ja jännitevahvistin

Puhdistaaksemme melua hieman ja saadaksemme näppäimistön toimimaan paremmin, haluamme lisätä pari alipäästösuodatinta. Nämä suodattavat pois korkeataajuisen kohinan ja antavat matalien taajuuksien signaalin kulkea läpi. Pohjimmiltaan tapa tehdä tämä on yksinkertaisesti lisätä 68 pf: n kondensaattori analogisen tulomme ja maan välille ja myös 0,1 mikrofaradin (eli 104) kondensaattori PD4 (INT0) -katkoksen ja maadoituksen väliin. Jos leikit näillä näppäimillä ja painat näppäimiä, näet, mitä he tekevät.

Seuraavaksi haluamme tehdä jännitevahvistimen. On käynyt ilmi, että näppäimistön alin näppäinrivi (samoin kuin uudelleenvalintanäppäin) antaa liian alhaisen jännitteen INT0 -keskeytyksen laukaisemiseksi. Analoginen portti on riittävän herkkä lukemaan näiden näppäinten matalat jännitteet, mutta keskeytystappi ei saa tarpeeksi hyvää nousevaa reunaa keskeyttääkseen, kun painamme näitä näppäimiä. Siksi haluaisimme jonkin tavan varmistaa, että mukava jännitteen nouseva reuna osuu PD4: ään, mutta sama matalajännite osuu ADC0: een. Tämä on melko korkea järjestys, koska molemmat signaalit tulevat näppäimistön samasta lähtöjohdosta. On olemassa useita kehittyneitä tapoja tehdä tämä, mutta emme aio käyttää näppäimistöämme enää tämän opetusohjelman jälkeen, joten yhdistämme vain toimivan menetelmän (tuskin).

Liitä ensin ulkoinen painike INT0 -keskeytyksen korvaamiseksi ja ohjaa näyttöä pitämällä näppäimistön näppäintä painettuna ja napsauttamalla painiketta. Tällä on vähemmän näppäimistöongelmia ja voit olla varma, että jännitteet on asetettu oikein näppäimistön hakutaulukossa. Kun tiedät, että näppäimistö on kytketty oikein, päästä eroon painikkeesta ja aseta INT0 -keskeytys takaisin. Näppäimistöä ohjataan tällä tavalla vakavilla melu- ja jänniteongelmilla, joten on hyvä tietää, että kaikki toimii niin, että tulevat ongelmat voidaan erottaa INT0 -näppäimestä.

Kun liität näppäimistön ja jännitevahvistimen, on erittäin todennäköistä, että samat vastuksen arvot, joita olen käyttänyt, eivät toimi. Joten sinun on tehtävä kokeiluja saadaksesi arvot, jotka toimivat sinulle.

Jos katsot kaaviota, jonka olen liittänyt tähän vaiheeseen, näet kuinka jännitevahvistin toimii. Käytämme joitain vastuksia ja kahta transistoria. Tapa, jolla transistorit toimivat (katso tietolomakkeet!), On olemassa vähimmäisjännite, joka sinun on syötettävä transistorin (keskimmäinen nasta) pohjaan, joka kyllästää sen ja antaa virran kulkea keräimen tapin ja emitterin välillä tappi. Tässä käyttämämme 2N3904 -transistorin tapauksessa jännite on 0,65 V. Nyt otamme tämän jännitteen lähdöstämme näppäimistöstä, emmekä halua muuttaa tätä lähtöä, joten asetamme suuren vastuksen näppäimistön lähdön ja ensimmäisen transistorin kannan väliin (käytin 1Mohm). Olen merkinnyt tämän kaaviossa R_1: ksi. Sitten haluamme perustaa jännitteenjakajan niin, että transistorin kanta on "melkein" 0,65 voltin jännitteellä ja vain pieni osa lisää työntää sen päälle ja kyllästää sen. Tämä pieni heikko bitti tulee näppäimistön lähdöstä, kun painamme painiketta. Koska näppäimistön alemmat näppäimet tuottavat vain pienen jännitteen, meidän on oltava hyvin lähellä kylläisyyttä jo ennen kuin ne riittävät. Jännitteenjakajan vastukset on merkitty kaaviossa R_a ja R_b. Käytin R_a = 1Mohm ja R_b = 560Kohm, mutta on lähes varmaa, että joudut leikkimään näillä numeroilla, jotta saat oikean asennuksen. Haluat ehkä saada seinän lähelle lyömään päätäsi ja kaksi tai kolme lasillista scotchia käsissäni (suosittelen Laphroaigia - kallista, mutta sen arvoista, jos pidät savusta. Jos asiat muuttuvat todella hulluksi, hanki vain kannu BV: stä ja asettua yöksi)

Katsotaan nyt, kuinka transistorit saavat meidät mukavan nousevan reunan menemään INT0 -näppäimeen ja luomaan näppäinpainalluksen. Katsotaan ensin, mitä tapahtuu, kun en paina näppäintä. Siinä tapauksessa ensimmäinen transistori (merkitty kaaviossa T1) on pois päältä. Joten keräimen ja emitterin nastojen välillä ei virtaa virtaa. Siten toisen transistorin (merkitty T2) kanta vedetään korkealle ja siten se kyllästyy sallien virran kulkea nastojensa välillä. Tämä tarkoittaa, että T2: n säteilijä vedetään matalalle, koska se on kytketty keräimeen, joka itse on kytketty maahan. Näin ollen INT0 -näppäinpainalluksen keskeytystappiin (PD4) tuleva lähtö on alhainen eikä keskeytyksiä ole.

Mitä nyt tapahtuu, kun painan näppäintä? No sitten T1: n kanta nousee yli 0,65 V: n (alempien näppäinten tapauksessa se tuskin ylittää!) Ja sitten virran annetaan virrata, mikä vetää T2: n kannan matalajännitteeseen ja tämä sulkee T2: n. Mutta näemme, että kun T2 on pois päältä, niin ulostulo vedetään korkealle ja siksi saamme 5 V: n signaalin INT0 -nastaamme ja se aiheuttaa keskeytyksen.

Huomaa, mikä nettotulos on täällä. Jos painamme 1 -näppäintä, saamme 5 V: n PD4: lle muuttamatta merkittävästi ADC0: n lähtöä, ja mikä tärkeintä, vaikka painamme Asteriskia, 0, Hashia tai Uudelleenvalintaa, saamme myös 5 V: n signaalin INT0: lle ja myös aiheuttaa keskeytyksen! Tämä on tärkeää, koska jos menimme vain suoraan näppäimistön ulostulosta INT0 -nastaan, nämä näppäimet eivät tuota lähes mitään jännitettä eivätkä ne riitä laukaisemaan tätä keskeytystappia. Jännitevahvistimemme on ratkaissut tämän ongelman.

Vaihe 7: 4-numeroinen näyttökoodi ja video

Siinä kaikki opetusohjelmassa 9! Olen liittänyt koodin ja videon toiminnasta.

Tämä on viimeinen kerta, kun käytämme analogista näppäimistöä (luojan kiitos). Sitä oli vaikea käyttää, mutta se oli myös erittäin hyödyllinen, jotta saimme tietää analogia-digitaalimuunnoksesta, analogisista porteista, keskeytyksistä, multipleksoinnista, kohinasuodattimista, jännitevahvistimista ja monista kokoonpanokoodauksen näkökohdista hakutaulukoista ajastimiin/laskureihin jne. Siksi päätimme käyttää sitä. (Lisäksi on hauskaa kerätä tavaroita).

Nyt aiomme tarkastella viestintää uudelleen ja saada 7-segmenttimme ja 4-numeroiset näyttömme lukemaan noppapullomme noppapullistamme samalla tavalla kuin rekisteri-analysaattorillamme. Tällä kertaa käytämme kaksijohtimista käyttöliittymää hakkeroidun morsekoodimenetelmän sijasta.

Kun viestintä toimii ja rullat näkyvät näytöillä, voimme lopulta tehdä lopullisen tuotteen ensimmäisen osan. Huomaat, että ilman kaikkia analogisia porttitietoja koodistamme tulee huomattavasti lyhyempi ja luultavasti helpompi lukea.

Niille teistä, jotka ovat kunnianhimoisia. Tässä on "projekti", jota voisit kokeilla, että sinulla on varmasti tarvittavat tiedot tässä vaiheessa, jos olet käynyt läpi kaikki nämä opetusohjelmat tähän asti:

Projekti: Tee laskin! Käytä 4-numeroista näyttöämme ja näppäimistöämme ja lisää ulkoinen painike, joka toimii kuin "enter" -näppäin. Yhdistä tähti "aikoihin", hajautus "jaa" uudelleenvalinta "plus": ksi ja salama "miinukseksi" ja kirjoita laskinrutiini, joka toimii kuin yksi niistä vanhoista HP: n "käänteisistä kiillotuslaskimista", jotka kaikilla insinööreillä oli takaisin päivällä. Toisin sanoen ne toimivat siten, että annat numeron ja painat "enter". Tämä työntää kyseisen numeron pinoon, syötät sitten toisen numeron ja painat "enter", joka työntää toisen numeron pinoon. Lopuksi painat jotain toiminnoista, kuten X, /, + tai -, ja se soveltaa kyseistä toimintoa pinon kahteen ylimpään numeroon, näyttää tuloksen ja työntää tuloksen pinolle, jotta voit käyttää sitä uudelleen, jos Kuten. Jos haluat esimerkiksi lisätä 2+3: suurin osa taustakoodista on jo kirjoitettu. Lisää vain enter -näppäin ja laskimen tarvitsemat aliohjelmat. Se on hieman monimutkaisempaa kuin aluksi luulisi, mutta se on hauskaa ja mahdollista.

Nähdään ensi kerralla!

Suositeltava: