Sisällysluettelo:

Binaarinen desimaalipeli: 10 vaihetta
Binaarinen desimaalipeli: 10 vaihetta

Video: Binaarinen desimaalipeli: 10 vaihetta

Video: Binaarinen desimaalipeli: 10 vaihetta
Video: Hyperadrenergic POTS & Hyperadrenergic OH 2024, Marraskuu
Anonim
Image
Image
Kellonjakajan asettaminen
Kellonjakajan asettaminen

Tässä ohjeessa näytetään prosessi ja moduulit, joita tarvitaan binäärinen desimaalipeli -pelimme luomiseen. 60 sekunnin kuluessa käyttäjät kääntävät ja syöttävät niin monta satunnaisesti luotua desimaalilukua seitsemän segmentin näytöllä binääriksi vaihtamalla kytkimiä ja lähettämällä arvauspainikkeella. Kun olet valmis, lopullinen pisteet näytetään ja palautetaan toistettavaksi.

Binaaristen ja nopeiden refleksien ymmärtäminen on hyödyllistä, jos haluat menestyä hyvin, mutta nollauspainike on käytettävissä, jos haluat yrittää heti uudelleen.

Vaihe 1: Kellonjakajan asentaminen

Koko tämän projektin selkäranka tulee tämän gizmo -laitteen kaikkien osien oikeasta synkronoinnista. Finite State Machine käyttää sisäistä kelloa, mutta seitsemän segmentin näytön ja ajastimen on käytettävä kellon muutettua versiota.

Tämä "uusi kello" tulee jakamalla sisäinen kello halutulla ajanjaksolla, jotta saavutetaan tietty taajuus, jota tarvitaan kullekin tietylle komponentille. Tämä on tehty aiemmissa laboratorioissa ja kokemuksesta tiedämme, että ajastimen "yhden" numero on asetettu 0,1 Hz: iin ja "kymmenien" numero on 1 Hz

Tulot: ClkIn, jakaja (32 -bittinen)

Lähdöt: ClkOut

Vaihe 2: Äärellisen tilan koneen (FSM) luominen

Äärimmäisen tilan koneen (FSM) luominen
Äärimmäisen tilan koneen (FSM) luominen
Äärimmäisen tilan koneen (FSM) luominen
Äärimmäisen tilan koneen (FSM) luominen
Äärimmäisen tilan koneen (FSM) luominen
Äärimmäisen tilan koneen (FSM) luominen

Äärellisessä tilakoneessamme päätimme, että viisi tilaa (alku, näyttö, tarkistus, pisteet ja loppu) ovat tarpeen viiden tulon (aloitus, nollaus, arvaus, yhtä suuri, aikakatkaisu) kanssa. Tilakoneemme ainoa lähtö on 3 -bittinen luku, joka edustaa käyttäjän tilaa (000, 001, 011, 101, 100) alla olevien tilojen suhteen.

Muista, että äärellinen tilakone ei itse esimuodosta alla olevia toimintoja, vaan kertoo vain, missä tilassa ohjelma on ja mitä. Mitä todellisuudessa tapahtuu, määritetään alla selostetulla ylämoduulilla.

Lähtötila (000)

Käynnistystila on paikka, jossa käyttäjä aloittaa, kunnes käynnistystulo on korkea. Tämä on myös tila, joka saavutetaan aina, kun nollauspainiketta painetaan.

Pelitila (001)

Pelin tila on pelin alku, jossa satunnaisluku luodaan ja käyttäjä vaihtaa kytkintä syöttön luomiseksi. Kun arvauspainiketta on painettu, peli siirretään tarkistustilaan.

Tarkista tila (011)

Tässä tilassa käytetään vertailua, joka vertaa käyttäjän syötteen arvoja ja satunnaisesti luotua lukua. Jos lähetys on oikein, sama arvo on korkea ja Mikronesia siirtyy pisteytystilaan; kuitenkin, jos lähetys on virheellinen, Mikronesia palaa takaisin näyttötilaan, kunnes lähetys on oikea.

Tämä tarkistustila tapahtuu suhteellisen nopeasti muihin verrattuna, koska se tapahtuu vain niin kauan kuin tarkistuspainiketta painetaan

Pistetilanne (101)

Koska sama arvo on korkea, lähetys oli oikea. Tässä tilassa pistemäärä kasvaa yhdellä ja käyttäjä luo uuden numeron syötettäväksi. Tämä uusi numero tuo meidät takaisin aloitustilaan, jossa käyttäjä vaihtaa jälleen kytkimiä.

Loppu tila (100)

Kun 60 sekunnin ajastin on kulunut umpeen, aikakatkaisutulo on korkea ja käyttäjä saavuttaa lopputilan, jossa lopputulos näytetään. Reset -tuloa painetaan ja FSM alkaa uudelleen aloitustilassa.

Tulot: Clk, ensimmäinen, alku, arvaus, yhtä suuri, aikakatkaisu

Lähtö: tila (3 bittiä)

Vaihe 3: Seitsemän segmentin näytön kartoittaminen

Seitsemän segmentin näytön kartoitus
Seitsemän segmentin näytön kartoitus
Seitsemän segmentin näytön kartoitus
Seitsemän segmentin näytön kartoitus
Seitsemän segmentin näytön kartoitus
Seitsemän segmentin näytön kartoitus

Seitsemän segmentin näyttö on keskeinen osa koko projektia, koska näytön kahta ensimmäistä numeroa käytetään satunnaislukugeneraattorin ulostulona, kun taas kaksi viimeistä numeroa ovat ajastin. Vaikka olemme toteuttaneet tästä esimerkin viimeisessä laboratoriossa sen suhteen, että näytöllä on numeroita, se näytettiin heksadesimaalina. Korjasimme tämän ongelman muuntimella ja kellonjakajalla, joka selitetään tarkemmin alla.

Näytössä näkyy kaikki 0, kunnes Mikronesia siirtyy pelitilaan; lopputilassa näytön pitäisi kuitenkin näyttää vain käyttäjän pisteet.

Koska käytämme seitsemän segmentin näytön kaikkia neljää numeroa, meidän on selattava jokainen anodi riittävän nopeasti 300 Hz: n taajuudella, jotta meidät havaitaan aina palaviksi.

Tulot: Clk, seitsemän segmenttiä

Lähdöt: katodit (7 bittiä), anodit (4 bittiä)

Vaihe 4: Vertailijan luominen

Vertailijan luominen
Vertailijan luominen

Tätä alimoduulia käytetään tarkistustilassa siinä, miten se vertaa 7 -bittistä binääritettyä arvausta todelliseen desimaaliarvoon.

Meillä oli if -lause, joka arvioi sekä panoksia että kahta lähtöä sen mukaan, onko sama arvo korkea vai matala. Niin tärkeä kuin tämä moduuli on, se on ylivoimaisesti yksi yksinkertaisimmista ohjelmista suunnitella tässä projektissa.

Tulot: kytkimet (8 bittiä), numero (8 bittiä)

Lähtö: EQ

Vaihe 5: Ajastimen asettaminen

Ajastimen asettaminen
Ajastimen asettaminen
Ajastimen asettaminen
Ajastimen asettaminen

Ajastimemme on lähinnä kaksi eri laskuria, jotka kasvavat eri tahtiin. Yksi laskuri "yhden" arvossa (seitsemän ensimmäisen segmentin näyttö) ja yksi "kymmenen" arvon laskuri (toinen numero seitsemän segmentin näytössä). Jokainen numero perustuu kellon nousevaan reunaan, ja kun laskuri saavuttaa 60 sekuntia, time_out on korkea ja peli päättyy ja palaa aloitustilaan.

Tulot: Clk, tila (3 bittiä), aloitus

Lähdöt: Virta (8 bittiä), aikakatkaisu

Vaihe 6: Pseudo -satunnaislukugeneraattorin suunnittelu

Pseudo -satunnaislukugeneraattorin suunnittelu
Pseudo -satunnaislukugeneraattorin suunnittelu

Toinen vaihtoehtoinen tapa nimenomaan tässä tapauksessa käytettävälle numeronmuodostajalle on toistolaskuri 0-99 (binäärinä), joka antaa lasketun numeron, kun tulo on korkea, koska tämä poistaisi tarpeen käyttää LFSR: ää.

Numero muuttuu sisäisen kellon jokaisesta nousevasta reunasta (10 nanosekuntia) ja käy läpi kaikki 100 numeroa yhdessä mikrosekunnissa. Aina kun käyttäjä haluaa uuden numeron numerogeneraattorista, se antaa numeron, jolla se oli, Vaikka tämä prosessi ei ole täysin satunnainen, todennäköisyys löytää asiaan liittyviä tuloksia tästä prosessista on riittävän pieni ollakseen näennäissatunnainen.

Tulot: Clk, muutos, yhtä suuri

Lähdöt: numero (8 bittiä)

Vaihe 7: Muuntimen luominen

Muuntimen luominen
Muuntimen luominen

Tarvittava komponentti on muunnin, jolla käytimme desimaalilukuja seitsemän segmentin näytössä alkuperäisen heksadesimaalin sijasta. Vaikka molemmat numerot perustuvat 7 -bittiseen binäärilukuun, loimme kokonaisen moduulin, joka on suunniteltu muuttamaan heksadesimaali desimaaliluvuksi.

Jos esimerkiksi pisteemme lopputulos olisi 0010001 (seitsemäntoista), seitsemän segmentin näytössä olisi heksadesimaaliluku 11 desimaaliluvun 17 sijasta.

Tulo: Numin (8 bittiä)

Lähtö: Numout (8 bittiä)

Vaihe 8: Kokoa kaikki yhteen pelimoduulissa

Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa
Kaikki yhdessä pelimoduulissa

Komponenteissamme käytimme tarvittavia kytkimiä 0-6, jotta käyttäjä voi vaihtaa, ja kolme painiketta toimivat käyttäjän syöttöinä käynnistykseen, nollaus- ja arvaukseen. Seitsemän segmentin näyttö- ja kellokomponentit ovat myös komponentteja, jotka olemme tehneet aiemmista laboratorioista, mutta joita oli muutettava, jotta ne sopisivat tähän projektiin.

Jaamme tämän projektin kuuteen edellä esitettyyn moduuliin, jotta koko gizmo voidaan jakaa moniin työosiin, mutta tapa, jolla ne on kytketty, on melko monimutkainen ja näkyy liitteenä olevasta mustan laatikon kuvasta.

Pelin aikana 7 LED -valoa syttyy ilmoittamaan käyttäjälle, mikä kytkin käyttää, ja kun peli päättyy, ohjelmoimme myös LED -valot vilkkumaan

Tulot: kytkimet (8 bittiä), Clk, nollaus, käynnistys, arvaus

Lähdöt: katodit (7 bittiä), anodit (4 bittiä), LEDit (7 bittiä)

Vaihe 9: Lisäongelmia

Vaikka tässä pelissä käytetään vain seitsemää kytkintä, koodi on asettanut sen 8 -bittiseksi numeroksi. Teimme tämän, jotta meillä olisi kätevämpi vertailija, joka vertaisi näitä 8 bittiä satunnaislukugeneraattorista luomaamme 8 bitin numeroon.

Pisteet antoivat meille myös aluksi vähän ongelmia, koska asetimme sen nostamaan yhden pisteen, kun Mikronesia oli pisteytyksessä; sen sijaan tapahtui, että pisteet kasvoivat niin kauan kuin valtio oli päällä, mikä antoi meille kohtuuttoman korkean pistemäärän, jota emme voineet käsitellä. Korjasimme tämän lisäämällä pulssisignaalin, joka synkronoitiin kellon nousevan reunan kanssa, kuten koodissa vaiheessa 8 näkyy.

Lopuksi ajastimen vianetsintä vei paljon aikaa, koska se vääristäisi seitsemän segmentin näyttöä, kun sitä laskettiin alas, joten jouduimme muuttamaan sen laskemisesta 60: sta laskemiseen 0: sta.

Vaihe 10: Lähdetiedostot ja rajoitukset

Jos haluat mieluummin vetää lähdetiedostoistamme omien luomisen sijaan, tässä ne ovat. Myös rajoitustiedosto on mukana.

Suositeltava: