INHOUDSOPGAWE:

AVR -samestellingstudie 9: 7 -stappe
AVR -samestellingstudie 9: 7 -stappe

Video: AVR -samestellingstudie 9: 7 -stappe

Video: AVR -samestellingstudie 9: 7 -stappe
Video: Подключение генератора с автозапуском и блоком АВР 2024, November
Anonim
AVR -samestelling -tutoriaal 9
AVR -samestelling -tutoriaal 9

Welkom by Tutoriaal 9.

Vandag sal ons wys hoe u 'n 7-segment-skerm en 'n 4-syfer-skerm met ons ATmega328P- en AVR-monteringstaalkode kan beheer. In die loop hiervan sal ons moet kyk hoe ons die stapel kan gebruik om die aantal registers wat ons moet vasmaak, te verminder. Ons sal 'n paar kondensators (laagdoorlaatfilters) byvoeg om die geraas op ons klavier te verminder. Ons sal 'n spanningsversterker uit 'n paar transistors skep, sodat ons INT0 -onderbreekskakelaar beter werk vir die knoppies met die laer spanning op die onderste ry van die bedieningspaneel. En ons sal ons koppe 'n bietjie teen die muur slaan terwyl ons probeer om die regte weerstande te kry sodat die ding behoorlik werk.

Ons sal ons bedieningspaneel van tutoriaal 7 gebruik

Benewens die standaard goed, benodig u hierdie tutoriaal:

  1. 'N 7-segment vertoning

    www.sparkfun.com/products/8546

  2. 'N 4-syfer-skerm

    www.sparkfun.com/products/11407

  3. 'N Drukknoppie

    www.sparkfun.com/products/97

  4. Die gegewensblaaie vir die skerm wat afgelaai kan word vanaf hul onderskeie bladsye waarna hierbo gekoppel is.
  5. 'N Keramiekondensator van 68 pf, 'n paar 104 kondensators, 'n klomp weerstande, twee 2N3904 NPN -transistors.

Hier is 'n skakel na die volledige versameling van my tutoriale vir AVR-samestellers:

Stap 1: Koppel die 7-seg skerm

Bedrading van die 7-seg skerm
Bedrading van die 7-seg skerm
Bedrading van die 7-seg skerm
Bedrading van die 7-seg skerm
Bedrading van die 7-seg skerm
Bedrading van die 7-seg skerm

Ons gaan dieselfde kode gebruik as wat ons in Tutoriaal 7 gebruik het vir die klavier om die 7-segment vertoning te beheer. U moet 'n afskrif hiervan maak, en ons sal dit aanpas.

Ons sal die segmente soos volg aan die penne van ons mikrobeheerder toewys:

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

waar die letters van die segmente op die foto verskyn, tesame met die pinout wat ooreenstem met gewone 5V en elk van die LED -segmente, insluitend die desimale punt (dp) regs onder in die skerm. Die rede hiervoor is sodat ons die hele getal in 'n enkele register kan invoer en dit kan uitvoer na poort B en D om die segmente te verlig. Soos u kan sien, word die stukkies opeenvolgend van 0 tot 7 genommer, en dit word dus na die regte penne gekarteer sonder om individuele stukkies te stel en te verwyder.

Soos u kan sien aan die kode wat ons in die volgende stap aangeheg het, het ons ons roetine na 'n makro verskuif, en ons het die SDA- en SCL -penne vir toekomstige gebruik in die volgende handleiding vrygestel.

Ek moet byvoeg dat u 'n weerstand moet plaas tussen die gemeenskaplike anode van die skerm en die 5V -spoor. Ek het soos gewoonlik 'n weerstand van 330 ohm gekies, maar as u wil, kan u die minimum weerstand bereken om die maksimum helderheid uit die skerm te kry sonder om dit te braai. Hier is hoe u dit moet doen:

Kyk eers na die gegewensblad en let op dat dit op die eerste bladsy verskillende eienskappe van die skerm bevat. Die belangrike hoeveelhede is die "Voorwaartse stroom" (I_f = 20mA) en die "Voorwaartse spanning" (V_f = 2.2V). Dit vertel u dat die spanningsval oor die skerm sal wees as die stroom gelyk is aan die voorwaartse stroom. Dit is die maksimum stroom wat die skerm kan neem sonder om te braai. Dit is gevolglik ook die maksimum helderheid wat u uit die segmente kan kry.

Laat ons dus die wet van Ohm en die lusreël van Kirchoff gebruik om uit te vind watter minimum weerstand ons met die skerm in serie moet stel om die maksimum helderheid te kry. Kirchoff se reël sê dat die som van die spanning verander rondom 'n geslote lus in 'n stroombaan gelyk is aan nul en Ohm se wet sê dat die spanningsval oor 'n weerstand van weerstand R: V = I R is waar I die stroom is wat deur die weerstand vloei.

Gegewe die bronspanning van V en om ons kring, het ons:

V - V_f - I R = 0

wat beteken (V - V_f)/I = R. Die weerstand wat nodig is om die maksimum helderheid te kry (en waarskynlik die segmente te braai) is:

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

Dus, as u wil, kan u sonder moeite 150 ohm gebruik. Ek dink egter dat 140 ohm dit te helder maak na my smaak en daarom gebruik ek 330 ohm (dit is 'n soort van my persoonlike Goldilocks -weerstand vir LED's)

Stap 2: Monteringskode en video

Ek het die monteringskode en 'n video aangeheg wat die werking van die bedieningspaneel met die skerm wys. Soos u kan sien, het ons die herhalingsleutel eenvoudig na "r", die flitsleutel na "F", die sterretjie na "A" en die hash -teken na "H" gekarteer. Dit kan gekarteer word vir verskillende bewerkings, soos backspace, enter, en wat nie, as u die toetsbord wil gebruik om getalle op LCD-skerms of 4-syfer-skerms te tik. Ek sal hierdie keer nie lyn-vir-reël deur die kode gaan nie, aangesien dit baie ooreenstem met wat ons reeds in vorige tutoriale gedoen het. Die verskille is hoofsaaklik net meer dieselfde dinge wat ons reeds weet, soos onderbrekings en opsoektabelle. U moet net deur die kode gaan en kyk na die nuwe dinge wat ons bygevoeg het, en die dinge wat ons verander het, en dit daarvandaan uitvind. Ons gaan terug na die lyn-vir-analise in die volgende tutoriaal wanneer ons nuwe aspekte van die monteringstaalkodering op AVR-mikrobeheerders bekendstel.

Kom ons kyk nou na 'n vier-syfer-skerm.

Stap 3: Bedrading van die 4-syfer-skerm

Bedrading van die 4-syfer-skerm
Bedrading van die 4-syfer-skerm
Bedrading van die 4-syfer-skerm
Bedrading van die 4-syfer-skerm

Volgens die datablad het die 4-syfer-skerm 'n voorwaartse stroom van 60 mA en 'n voorspanning van 2,2 volt. Dus, volgens dieselfde berekening as voorheen, kon ek 'n weerstand van 47 ohm gebruik as ek wou. In plaas daarvan gaan ek 'n … hrm gebruik. Laat my sien … hoe gaan dit met 330 ohm.

Die manier waarop die 4-syfer-skerm bedraad is, is dat daar 4 anodes is, een vir elk van die syfers, en die ander penne bepaal watter segment in elkeen voorkom. U kan 4 syfers gelyktydig vertoon omdat dit gemultiplex is. Met ander woorde, net soos ons vir die dobbelsteen gedoen het, sirkel ons eenvoudig die krag deur elkeen van die anodes om die beurt, en dit knip dit een na die ander. Dit sal dit so vinnig doen dat ons oë nie sien knip nie en dit sal lyk asof al vier syfers aangeskakel is. Maar net om seker te maak, die manier waarop ons dit sal kodeer, is om al vier syfers in te stel, dan die anodes te ry, eerder as om te stel, te beweeg, te stel, te beweeg, ens..

Laat ons eers toets dat die segmente almal werk.

Plaas u weerstand van 330 ohm tussen die positiewe spoor van u broodbord en die eerste anode op die skerm. Die datablad vertel ons dat die penne van 1 tot 16 teen die kloksgewys genommer is, begin links onder (as u normaal na die skerm kyk met die desimale punte onderaan) en dit sê dat die anodes speldnommers 6 is, 8, 9 en 12.

Dus verbind ons pen 6 met 5V en neem dan 'n negatiewe voorsprong van u GND -spoor en steek dit by al die ander penne in en sien dat al die segmente lig op die syfer waarmee dit ooreenstem (wat eintlik die tweede syfer is van die reg). Maak seker dat u al 7 segmente en die desimale punt aan die lig bring.

Steek nou u GND -draad in een van die penne om een van die segmente te verlig en skuif die weerstand hierdie keer na die ander 3 anodes en sien dat dieselfde segment in elk van die ander syfers brand.

Iets ongewoons?

Dit blyk dat die pinout op die datablad verkeerd is. Dit is omdat dit die gegewensblad en die pinout is vir 'n 12-pins, 4-syfer-skerm. D.w.s. een sonder dubbelpunt of boonste desimale punt. Die skerm wat ek gekry het toe ek dit bestel het, is 'n 16-pen, 4-syfer-skerm. Trouens, op myne is die segmentanodes by penne 1, 2, 6 en 8. Die kolon -anode is pen 4 (katodepen 12) en die boonste dp -anode is pen 10 (katode is pen 9)

Oefening 1: Gebruik u weerstand en gronddraad om vas te stel watter pen ooreenstem met watter segment en desimale punt op die skerm, sodat ons die korrekte segmente verlig wanneer ons dit kodeer.

Die manier waarop ons die segmentkaart wil kodeer, is presies soos ons gedoen het met die enkelsyfer 7-segment-skerm hierbo-ons hoef niks in die kode te verander nie; die enigste ding wat ons verander, is hoe die drade verbind is op die bord. Koppel eenvoudig die korrekte poortpen op die mikrobeheerder aan die ooreenstemmende pen op die 4-syfer-skerm, sodat PB0 byvoorbeeld nog steeds na die pen kom wat ooreenstem met segment a, PB1 na segment B, ens.

Die enigste verskil is dat ons nou 4 ekstra penne vir die anodes benodig, aangesien ons nie meer na die 5V -spoor kan gaan nie. Ons het die mikrobeheerder nodig om te besluit watter syfer die sap kry.

Dus sal ons PC1, PC2, PC3 en PD4 gebruik om die anodes van die 4 syfers te beheer.

U kan net sowel die drade aansluit. (moenie die 330 ohm weerstande op die anodedrade vergeet nie!)

Stap 4: Kodering van die 4-syfer-skerm

Die kodering van die 4-syfer-skerm
Die kodering van die 4-syfer-skerm

Kom ons dink na oor hoe ons hierdie skerm wil kodeer.

Ons wil graag hê dat die gebruiker op die knoppies moet druk en dat die nommers opeenvolgend op die skerm moet verskyn terwyl hulle op elke knoppie druk. Dus, as ek 'n 1 druk, gevolg deur 'n 2, sal dit op die skerm verskyn as 12. Ek wil ook die waarde, 12, vir interne gebruik stoor, maar ons sal 'n bietjie later daarby uitkom. Op die oomblik wil ek net 'n nuwe makro skryf wat u druk op die toets druk en dit vertoon. Aangesien ons slegs 4 syfers het, wil ek seker maak dat u slegs vier getalle kan tik.

'N Ander probleem is dat die manier waarop die veelvoude 4-syfer-skerm werk, deur die anodes te ry sodat elke syfer slegs 'n split sekonde aan is voordat dit die volgende en dan die volgende vertoon en uiteindelik weer terug na die eerste, ens. het 'n manier nodig om dit te kodeer.

Ons wil ook hê dat die 'wyser' 'n spasie na regs moet skuif wanneer ons die volgende syfer tik. Sodat, as ek byvoorbeeld 1234 wil tik, nadat ek die 1 ingetik het, die wyser sal skuif sodat die volgende syfer wat ek tik op die volgende 7-segment vertoning, ensovoorts, sal verskyn. Terwyl dit gebeur, wil ek nog steeds kan sien wat ek getik het, sodat ek steeds deur die syfers moet fietsry en dit moet vertoon.

Klink dit na 'n hoë orde?

Dinge is eintlik nog erger. Ons benodig nog 4 registers vir algemene doeleindes wat ons kan gebruik om die huidige waardes van die 4 syfers wat ons wil vertoon te stoor (as ons daardeur wil blaai, moet ons dit êrens stoor) en die probleem hiermee is dat ons het registers vir algemene doeleindes soos 'n gek gebruik, en as ons nie oppas nie, het ons niks meer oor nie. Dit is dus waarskynlik 'n goeie idee om die probleem vroeër as later aan te pak en u te wys hoe u registers kan vrystel deur die stapel te gebruik.

Laat ons dus begin deur dinge effens te vereenvoudig, die stapel te gebruik en 'n paar registers vry te maak, en dan probeer ons om die getalle op die vier-syfer-skerm te lees en te vertoon.

Stap 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Daar is slegs 'n paar "Algemene Doelregisters" wat ons tot ons beskikking het, en sodra dit gebruik is, is daar nie meer nie. Dit is dus 'n goeie programmeringspraktyk om dit slegs vir 'n paar veranderlikes te gebruik, wat gebruik word as tydelike berging waarmee u hawens en SRAM kan lees en skryf, of andersins wat u oral in subroetines benodig. noem hulle. Wat ek dus gedoen het, noudat ons die stapel geïnitialiseer het en leer om dit te gebruik, is om deur die kode te gaan en die genoemde registers vir algemene doeleindes te vind wat slegs in 'n enkele subroutine of onderbreking gebruik word en nêrens anders in die kode is nie. hulle met een van ons temp registers en 'n druk en pop na die stapel. As u eintlik kyk na die kode wat vir kleiner mikrobeheerders geskryf is, of as u teruggaan in die tyd toe alle skyfies kleiner was, sien u slegs 'n paar algemene registers wat vir alles gebruik moes word, sodat u nie kon nie stoor net 'n waarde daar en laat dit met rus, want u het beslis die register vir ander dinge nodig. U sal dus oral in die kode druk en 'n poppin sien. Miskien moes ek ons temp -registers vir algemene doeleindes AX en BX genoem het as 'n eerbied vir die vervloë dae.

'N Voorbeeld help om dit duideliker te maak.

Let op dat ons in ons analoog na digitaal omskakeling volledige onderbreking ADC_int 'n algemene register gebruik wat ons buttonH genoem het, wat ons gebruik het om die waarde van ADCH te laai en dit te vergelyk met ons opzoektabel van analoog na knoppiespersomskakelings. Ons gebruik slegs hierdie knoppie H -register binne die ADC_int -subroutine en nêrens anders nie. Dus, in plaas daarvan gebruik ons ons veranderlike temp2 wat ons as tydelike veranderlike gebruik wat ons binne 'n gegewe subroutine kan gebruik, en die waarde daarvan beïnvloed niks buite die subroutine nie (dws die waarde wat ons dit in ADC_int gee, word nêrens gebruik nie anders).

Nog 'n voorbeeld is in ons vertragingsmakro. Ons het 'n register wat ons 'millisekondes' genoem het, wat ons vertragingstyd in millisekondes bevat. In hierdie geval is dit in 'n makro, en ons onthou dat die manier waarop makro werk, is dat die samesteller die hele makrokode in die plek van die program plaas waar dit genoem word. In hierdie geval wil ons van die veranderlike "millisekondes" ontslae raak en dit vervang met een van ons tydelike veranderlikes. In hierdie geval sal ek dit 'n bietjie anders doen om u te wys hoe selfs al kan die waarde van die veranderlike elders nodig wees, ons dit steeds kan gebruik deur die stapel te gebruik. Dus, in plaas van millisekondes, gebruik ons 'temp', en sodat ons nie ander dinge wat ook die waarde van temp gebruik, opdroog nie, begin ons die makro 'vertraag' deur die temp op die stapel te druk, dan gebruik ons dit in plaas van millisekondes, en dan aan die einde van die makro "pop" ons sy vorige waarde terug uit die stapel.

Die netto resultaat is dat ons temp en temp2 "geleen" het vir tydelike gebruik en dit dan na hul vorige waardes herstel het as ons klaar is.

Hier is die ADC_int -onderbreekroetine nadat u hierdie verandering aangebring het:

ADC_int:

stoot temp; stoor temp, aangesien ons dit hier verander, druk temp2; stoor temp2 lds temp2, ADCH; laai toetsdruk ldi ZH, hoog (2*getalle) ldi ZL, laag (2*getalle) cpi temp2, 0 breq opbrengs; as geraassnellers nie verander nie 7segnumber setkey: lpm temp, Z+; laai van tafel en na inkrement clc cp temp2, temp; vergelyk toetsdruk met die tafel brlo PC+4; as ADCH laer is, probeer weer lpm 7segnumber, Z; laai andersins sleutelwaarde tabel inc syfer; verhoog die syfergetal rjmp -opgawe; en stuur terug na ZH: ZL, 1; inkrement Z rjmp setkey; en keer terug na bo terug: pop temp2; herstel temp2 pop temp; herstel temp reti

Let op dat die manier waarop die stapel werk, is dat die eerste aan die laaste af is. Net soos 'n stapel papiere. U sien dat ons in ons eerste twee reëls die waarde van temp na die stapel druk, dan druk ons temp2 op die stapel, dan gebruik ons dit in die subroutine vir ander dinge, en uiteindelik herstel ons dit weer na hul vorige waardes deur die eerste keer dat temp2 afskakel (aangesien dit die laaste keer was wat dit gestoot is, is dit bo -aan die stapel en sal dit die eerste keer wees wat ons weer afskakel) en dan die temperatuur.

Dus sal ons voortaan altyd hierdie metode gebruik. Die enigste keer dat ons eintlik 'n register vir iets anders as 'n temp -veranderlike sal aanwys, is wanneer ons dit oral gaan benodig. Die register met die naam "oorloop" is byvoorbeeld 'n register wat ons op verskillende plekke in die program gebruik, en daarom wil ons dit 'n naam gee. Natuurlik kan ons dit steeds gebruik soos ons met temp en temp2 gedoen het, aangesien ons die waarde daarvan sou herstel nadat ons klaar was. Maar dit sal dinge te veel spaghetti. Hulle word om 'n rede genoem, en ons het reeds temp en temp2 aangewys vir die taak.

Stap 6: Laagdeurlaatfilters en spanningsversterker

Laagdeurlaatfilters en spanningsversterker
Laagdeurlaatfilters en spanningsversterker
Laagdeurlaatfilters en spanningsversterker
Laagdeurlaatfilters en spanningsversterker

Om die geraas 'n bietjie op te ruim en ons bedieningspaneel beter te laat werk, wil ons 'n paar laagdoorlaatfilters byvoeg. Dit filter die hoëfrekwensie -geraas uit en laat die lae frekwensie sein deur. Die manier om dit te doen, is eenvoudig deur 'n 68 pf -kondensator by te voeg tussen ons analoog invoer en grond en ook 'n 0,1 mikrofarad (dws 104) kapasitor tussen ons PD4 (INT0) onderbreking en grond. As u hiermee speel terwyl u op die knoppies op die toetsbord druk, sal u kan sien wat hulle doen.

Vervolgens wil ons 'n spanningsversterker maak. Dit blyk dat die onderste ry sleutels op die bedieningspaneel (sowel as die herhaaltoets) 'n te lae spanning uitoefen om die INT0 -onderbreking uit te skakel. Die analoogpoort is sensitief genoeg om die lae spanning van hierdie sleutels af te lees, maar ons onderbrekingspen kry nie 'n goeie genoeg stygende rand om te onderbreek as ons die sleutels druk nie. Daarom wil ons 'n manier hê om seker te maak dat 'n goeie spanningstyging PD4 tref, maar dieselfde lae spanning tref ADC0. Dit is 'n redelike groot orde, aangesien beide seine van dieselfde uitvoerdraad van ons bedieningspaneel kom. Daar is 'n aantal gesofistikeerde maniere om dit te doen, maar ons gaan ons toetsbord nie meer gebruik nie, dus laat ons net 'n metode saamwerk wat (skaars) werk.

U moet eers 'n eksterne knoppie aansluit om die INT0 -onderbreking te vervang en die skerm te beheer deur 'n sleutel op die klavier in te hou en op die knoppie te klik. Dit het minder probleme met die bedieningspaneel en sal u in staat stel om seker te wees dat u spanning korrek op die soekbord van die klavier is ingestel. Sodra u weet dat die bedieningspaneel korrek bedraad is, moet u van die knoppie ontslae raak en die INT0 -onderbreking terugsit. Daar is 'n paar ernstige probleme met geraas en spanning om die bedieningspaneel op hierdie manier te beheer, dus dit is goed om te weet dat alles werk sodat toekomstige probleme met die INT0 -sleutel geïsoleer kan word.

As u u bedieningspaneel en u spanningsversterker aansluit, is dit baie waarskynlik dat dieselfde weerstandswaardes wat ek gebruik het, nie werk nie. U sal dus moet eksperimenteer om waardes te vind wat vir u werk.

As u na die diagram kyk wat ek by hierdie stap aangeheg het, sal u sien hoe die spanningsversterker gaan werk. Ons gebruik 'n paar weerstande en twee transistors. Die manier waarop transistors werk (sien die gegewensblaaie!) speld. In die geval van die 2N3904 -transistor wat ons hier gebruik, is die spanning 0,65V. Nou neem ons die spanning van ons uitset vanaf die bedieningspaneel en wil ons nie die uitset verander nie, dus plaas ons 'n groot weerstand tussen die uitset van die bedieningspaneel en die basis van die eerste transistor (ek gebruik 1Mohm). Ek het dit as R_1 in die diagram benoem. Dan wil ons 'n spanningsverdeler instel sodat die basis van die transistor al amper 0,65 volt is, en slegs 'n klein bietjie meer sal dit bo -oor druk en dit versadig. Die klein bietjie kom uit die uitgang van die klavier wanneer ons op 'n knoppie druk. Aangesien die onderste sleutels op die bedieningspaneel slegs 'n klein spanning uitsteek, moet ons reeds naby versadiging wees om genoeg te wees. Die spanningsverdelerweerstanders is op die diagram R_a en R_b gemerk. Ek het R_a = 1Mohm en R_b = 560Kohm gebruik, maar dit is amper seker dat u met hierdie getalle sal moet speel om dit reg te stel vir u opstelling. Miskien wil u 'n muur hê om teen u kop te slaan en twee of drie glase skottelgoed byderhand (ek sal Laphroaig aanbeveel - duur, maar die moeite werd as u van rook hou. As dinge regtig kranksinnig raak, kry dan net 'n kruik van BV en gaan sit vir die nag)

Kom ons kyk nou na hoe die transistors ons 'n goeie stygende voorsprong na die INT0 -sleutel sal gee en ons toetsdrukonderbreking sal genereer. Kyk eers na wat gebeur as ek nie 'n sleutel druk nie. In daardie geval is die eerste transistor (gemerk T1 in die diagram) af. Daar vloei dus geen stroom tussen die kollektor- en emitterpenne nie. So sal die basis van die ander transistor (gemerk T2) hoog getrek word en dit sal dus versadig word sodat stroom tussen sy penne kan vloei. Dit beteken dat die emitter van T2 laag sal trek omdat dit gekoppel is aan die kollektor wat self aan die aarde gekoppel is. Die uitset wat na ons INT0 -toets -onderbrekingspen (PD4) gaan, is dus laag en daar sal geen onderbreking wees nie.

Wat gebeur nou as ek 'n sleutel druk? Dan gaan die basis van T1 bo 0.65V (in die geval van die onderste sleutels gaan dit skaars bo!) En dan kan die stroom vloei, wat die basis van T2 na laagspanning sal trek en dit sal T2 afskakel. Maar ons sien dat wanneer T2 af is, die uitset hoog word, en ons sal 'n 5V -sein na ons INT0 -pen kry, en dit sal 'n onderbreking veroorsaak.

Let op wat die netto resultaat hier is. As ons op die 1 -toets druk, kry ons 5V na PD4 sonder om die uitset na ADC0 beduidend te verander, en belangriker nog, selfs as ons Asterisk, 0, Hash of Redial druk, kry ons ook 'n 5V -sein na INT0 en ook 'n onderbreking veroorsaak! Dit is belangrik, want as ons net direk van die uitvoer van die bedieningspaneel na die INT0 -pen gaan, genereer die sleutels byna geen spanning nie en is dit nie genoeg om die onderbrekingspen te aktiveer nie. Ons spanningsversterker het hierdie probleem opgelos.

Stap 7: 4-syfer vertoonkode en video

Dit is alles vir tutoriaal 9! Ek het die kode en 'n video aangeheg wat die operasie wys.

Dit sal die laaste keer wees dat ons die analoog klavier gebruik (dank God). Dit was moeilik om te gebruik, maar dit was ook baie handig om ons te leer oor analoog-na-digitale omskakeling, analoog-poorte, onderbrekings, multiplexing, geraasfilters, spanningsversterkers en baie aspekte van monteringskodering van soektabelle na timer/tellers, ens. Daarom het ons besluit om dit te gebruik. (plus dit is lekker om dinge op te vang).

Nou gaan ons weer na kommunikasie kyk en ons 7-segmente en ons 4-syfer-skerms laat kry om ons dobbelstene uit ons dobbelsteenrol te lees, net soos ons met ons registeranaliseerder gedoen het. Hierdie keer sal ons die tweedraad-koppelvlak gebruik eerder as ons gekombineerde morse-kode metode.

Sodra die kommunikasie werk en die rolle op die skerms verskyn, kan ons uiteindelik die eerste stuk van ons finale produk maak. U sal sien dat ons kode sonder al die analoge poortmateriaal aansienlik korter en waarskynlik makliker leesbaar is.

Vir die van julle wat ambisieus is. Hier is 'n 'projek' wat u kan probeer, wat u beslis op hierdie stadium die kennis het om te doen as u al hierdie tutoriale tot nou toe deurgemaak het:

Projek: Maak 'n sakrekenaar! Gebruik ons 4-syfer-skerm en ons klavier en voeg 'n eksterne knoppie by wat 'n "enter" -toets sal wees. Gee die sterretjie 'tye', die hash om die herhaling na 'plus' te verdeel en die flits na 'minus' en skryf 'n sakrekenaarroetine wat optree soos een van die ou HP 'reverse polish' sakrekenaars wat al die ingenieurs gehad het. in die ou dae. D.w.s. Die manier waarop dit werk, is dat u 'n nommer invoer en op "enter" druk. Dit druk die nommer op die stapel, dan voer u 'n tweede nommer in en druk 'enter', wat die tweede nommer op die stapel druk. Uiteindelik druk u op een van die bewerkings soos X, /, + of - en dit sal die bewerking op die twee boonste getalle op die stapel toepas, die resultaat vertoon en die resultaat op die stapel druk sodat u dit weer kan gebruik as u soos. Byvoorbeeld, om 2+3 by te voeg, sou u doen: 2, "enter", 3, "enter", "+" en die skerm sou dan lees 5. U weet hoe u die stapel, die skerm, die bedieningspaneel en u moet gebruik die meeste agtergrondkode is reeds geskryf. Voeg net die enter -sleutel en die subroetines wat nodig is vir die sakrekenaar by. Dit is 'n bietjie ingewikkelder as wat u aanvanklik sou dink, maar dit is pret en uitvoerbaar.

Sien jou volgende keer!