Sisukord:
- 1. samm: kellajaguri seadistamine
- 2. samm: piiratud olekuga masina (FSM) loomine
- 3. samm: seitsme segmendi kuva kaardistamine
- 4. samm: võrdleva seadme loomine
- Samm: taimeri seadistamine
- 6. samm: pseudojuhuslike numbrite generaatori kujundamine
- Samm: muunduri loomine
- Samm 8: Mängumoodulisse kõik kokku panna
- 9. samm: esinenud lisaprobleemid
- 10. samm: lähtefailid ja piirangud
Video: Binaar- ja kümnendkohtamismäng: 10 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
See juhend annab ülevaate protsessist ja moodulitest, mis on vajalikud meie binaar- ja kümnendkohtamismängu loomiseks. 60 sekundi jooksul tõlgivad ja sisestavad kasutajad nii palju juhuslikult genereeritud kümnendnumbreid seitsme segmendi ekraanil binaariks, lülitite ümberlülitamise ja arvamisnupu abil esitamise teel. Kui olete lõpetanud, kuvatakse lõppskoor ja seejärel lähtestatakse uuesti mängima.
Kahend- ja kiirreflekside mõistmine on kasulik, et hästi hakkama saada, kuid lähtestamisnupp on olemas juhuks, kui soovite koheselt uuesti proovida.
1. samm: kellajaguri seadistamine
Kogu selle projekti selgroog tuleneb selle gizmo kõigi osade korrektsest sünkroonimisest. Meie lõpliku oleku masin kasutab sisemist kella, kuid seitsme segmendi ekraan ja taimer peavad kasutama kella muudetud versiooni.
See "uus kell" tuleneb sisemise kella jagamisest soovitud perioodiga, et saavutada iga konkreetse komponendi jaoks vajalik sagedus. Seda on tehtud varasemates laborites ja kogemuste põhjal teame, et taimeril on "üks" number seatud 0,1 Hz ja "kümned" numbrid on 1 Hz
Sisendid: ClkIn, jagaja (32 bit)
Väljundid: ClkOut
2. samm: piiratud olekuga masina (FSM) loomine
Meie piiratud olekuga masinas otsustasime, et viis olekut (algus, kuva, kontroll, skoor ja lõpp) on vajalikud viie sisendiga (algus, lähtestamine, oletus, võrdne, ajalõpp). Meie olekumasina ainus väljund on 3 -bitine number, mis näitab, millises olekus kasutaja on (000, 001, 011, 101, 100) allpool olekute suhtes.
Pidage meeles, et piiratud olekuga masin ei eelda tegelikult allolevaid funktsioone, vaid ütleb lihtsalt, millises olekus programm on ja mis. Mis tegelikult juhtub, määrab allpool selgitatud ülemine moodul.
Algusolek (000)
Algusolek on koht, kus kasutaja alustab, kuni käivitussisend on kõrge, see on ka olek, mis saavutatakse iga kord, kui lähtestusnuppu vajutatakse.
Mängu olek (001)
Mängu olek on mängu algus, kus genereeritakse juhuslik arv ja kasutaja lülitab lülitid sisendi loomiseks. Kui oletusnuppu vajutatakse, viiakse mäng kontrollimise olekusse.
Kontrolli olekut (011)
Selles olekus kasutatakse võrdlust, mis võrdleb kasutaja sisendi väärtusi ja juhuslikult genereeritud numbrit. Kui esitamine on õige, on võrdne väärtus kõrge ja Mikroneesia läheb punktiskoori; kui aga esitamine on vale, naaseb Mikroneesia tagasi kuvatud olekusse, kuni esitamine on õige.
See kontrollimise olek toimub teistega võrreldes suhteliselt kiiresti, kuna see toimub ainult seni, kuni kontrollnuppu on vajutatud
Skoori olek (101)
Kuna võrdne väärtus on kõrge, oli esitamine õige. Selles olekus suureneb skoori väärtus ühe võrra ja kasutaja jaoks genereeritakse uus number. See uus number viib meid tagasi algseisundisse, kus kasutaja lülitab lülitid uuesti sisse.
Lõppseisund (100)
Kui 60 -sekundiline taimer on möödas, on ajalõpu sisend kõrge ja kasutaja jõuab lõppseisu, kus kuvatakse lõppskoor. Seejärel vajutatakse lähtestussisendit ja FSM alustab uuesti algusolekust.
Sisendid: Clk, esimene, algus, oletus, võrdne, ajalõpp
Väljund: olek (3 bitti)
3. samm: seitsme segmendi kuva kaardistamine
Seitsme segmendi kuva on kogu projekti põhiosa, kuna juhuslike numbrite generaatori väljundina kasutatakse ekraani kahte esimest numbrit, kaks viimast numbrit on taimer. Ehkki oleme viimases laboris selle kohta näite rakendanud, kuna ekraanil on numbrid, kuvati see kuueteistkümnendsüsteemis. Selle probleemi lahendamiseks kasutasime muundurit ja kellajaoturit, mida selgitatakse allpool.
Ekraanil kuvatakse kõik 0, kuni Mikroneesia jõuab mängu olekusse; lõppseisundis peaks ekraan aga näitama lihtsalt kasutaja skoori.
Kuna me kasutame seitsme segmendi ekraani kõiki nelja numbrit, peame iga anoodi 300 Hz juures piisavalt kiiresti ringi liikuma, et meid oleks alati valgustatud.
Sisendid: Clk, seitsmesegment
Väljundid: katoodid (7 bitti), anoodid (4 bitti)
4. samm: võrdleva seadme loomine
Seda alammoodulit kasutatakse kontrollimise olekus selle järgi, kuidas võrrelda 7 -bitist binaarset sisestatud oletust tegeliku kümnendväärtusega.
Meil oli if avaldus, mis hindas nii sisendeid kui ka kahte väljundit sõltuvalt sellest, kas võrdne väärtus oli kõrge või madal. Nii tähtis kui see moodul ka pole, on see selle projekti jaoks kindlasti üks lihtsamaid programme.
Sisendid: lülitid (8 bitti), number (8 bitti)
Väljund: EQ
Samm: taimeri seadistamine
Meie taimer on sisuliselt kaks erinevat loendurit, mis suurenevad erineva kiirusega. Üks loendur "oma" väärtuses (esimese seitsme segmendi kuva) ja üks loendur "kümne" väärtuse jaoks (teine number seitsme segmendi ekraanil). Iga number põhineb kella tõusvas servas ja kui loendur jõuab 60 sekundini, on time_out kõrge ning mäng lõpeb ja naaseb algusolekusse.
Sisendid: Clk, olek (3 bit), algus
Väljundid: vool (8 bitti), ajalõpp
6. samm: pseudojuhuslike numbrite generaatori kujundamine
Teine alternatiivne meetod numbrigeneraatori jaoks spetsiaalselt selle juhtumi jaoks on korduv loendur vahemikus 0–99 (kahendsüsteemis), mis väljastab loetud arvu, kui sisend on kõrge, kuna see võtaks ära vajaduse kasutada LFSR-i.
Number muudab sisemise kella iga tõusva serva (10 nanosekundit) ja liigub läbi kõik 100 numbrit ühes mikrosekundis. Kui kasutaja soovib numbrigeneraatorilt uut numbrit, väljastab see numbri, millel see oli, Kuigi see protsess ei ole täiesti juhuslik, on tõenäosus leida sellest protsessist seotud väljundeid piisavalt väike, et olla pseudo-juhuslik.
Sisendid: Clk, changenum, võrdne
Väljundid: number (8 bitti)
Samm: muunduri loomine
Vajalik komponent on muundur, mida kasutasime kümnendarvude kuvamiseks seitsme segmendi ekraanil algse kuueteistkümnendiku asemel. Kuigi mõlemad numbrid põhinevad 7 -bitisel kahendarvul, lõime terve mooduli, mis on määratud kuueteistkümnendkoha kümnendkohaks teisendamiseks.
Näiteks kui meie lõpptulemus skoori jaoks oli 0010001 (seitseteist), näitaks seitsme segmendi ekraan kümnendkoha numbri 17 asemel kuueteistkümnendväärtust 11.
Sisend: Numin (8 bit)
Väljund: Numout (8 bit)
Samm 8: Mängumoodulisse kõik kokku panna
Oma komponentide jaoks kasutasime kasutaja lülitamiseks vajalikke lülitid 0–6, kusjuures kolm nuppu toimisid käivitamiseks, lähtestamiseks ja arvamiseks kasutaja sisenditena. Seitsme segmendi kuvari ja kella komponendid on samuti komponendid, mida oleme teinud eelmistest laboritest, kuid pidime selle projektiga sobitamiseks muutma.
Jagasime selle projekti kuueks ülaltoodud mooduliks, et jagada kogu gizmo paljudeks tööosadeks, kuid nende ühendamise viis on üsna keeruline ja on näidatud lisatud musta kasti pildil.
Mängu ajal põlevad 7 LED -i, et teavitada kasutajat, milliseid lüliteid kasutada, ja mängu lõppedes programmeerisime ka LED -id vilkuma
Sisendid: lülitid (8 bitti), Clk, lähtestamine, käivitamine, arvamine
Väljundid: katoodid (7 bitti), anoodid (4 bitti), LED -id (7 bitti)
9. samm: esinenud lisaprobleemid
Kuigi selles mängus kasutatakse ainult seitset lülitit, on kood määranud selle 8 -bitiseks numbriks. Tegime seda selleks, et oleks mugavam võrdlusmasin, mis võrdleks neid 8 bitti juhusliku arvu generaatorist genereeritud 8 -bitise numbriga.
Skoor tekitas alguses ka natuke probleeme, sest seadsime selle suurendama ühe punkti, kui Mikroneesia oli punktisüsteemis; selle asemel juhtus aga see, et tulemus suurenes seni, kuni osariik oli, andes meile ebamõistlikult kõrge tulemuse, millega me hakkama ei saanud. Parandasime selle, lisades pulsisignaali, mis sünkrooniti kella tõusva servaga, nagu on näha 8. sammu koodis.
Lõpuks võttis taimer silumiseks palju aega, kuna see moonutaks meie seitsme segmendi kuva, kui seda loendati, seega pidime selle muutma 60 -lt loenduselt 0 -lt loendamisele.
10. samm: lähtefailid ja piirangud
Kui soovite oma failide loomise asemel pigem meie lähtefailidest tõmmata, siis siin need on. Samuti on lisatud piirangute fail.
Soovitan:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
Binaar- kuni kümnendarvukalkulaator: 8 sammu
Binaar- kuni kümnendarvukalkulaator: üheteistkümnenda klassi arvutitehnika jaoks pidin otsustama lõpliku projekti. Alguses ei teadnud ma, mida teha, sest see pidi sisaldama teatud riistvarakomponente. Mõne päeva pärast ütles mu klassivend mulle, et teeksin projekti, mis põhineb nelja bitilisel lisal