Digitaalitekniikka (piirit) Joitakin vinkkejä harjoitustyö 2:n aihesiin Metropolia / AKo Sille ei voi mitään, että jotkut harjoitustyöaiheet ovat vaikeammin lähestyttäviä kuin jotkut muut. Siltä varalta, että jollain tuntuu ASM-kaavion aikaansaaminen kovin hankalalta, ja myös virheellisestä ASMkaaviosta aiheutuvan hukkatyön ehkäisemiseksi, tässä hiukan lisäselitystä eri aiheisiin. Alla on ensin luettelo kunkin harjoitustyön tuloksena olevan laitteen tulo- ja lähtösignaalien määristä. Jos olet päätynyt muihin lukemiin, mieti uusiksi tai kysy opettajalta. Tulojen määrään on luettu mukaan kellosignaali ja nollaussignaali (reset). Jos siis laitteessa on (resetin lisäksi) kaksi painonappia, on siinä 4 tulosignaalia. Osassa aiheita osa lähdöistä on testaamista helpottavia lähtöjä (t0, t1 jne). Niiden avulla on tarkoitus saada laite toimimaan niin, että laitteen jokainen tila antaa erilaisen lähtösignaalikombinaation, jolloin testaaminen harjoitustyöalustalla onnistuu. Nuo testilähdöt on tietysti laskettu mukaan lähtöjen määrään. Aihe Tuloja Lähtöjä 1 4 4 2 4 3 3 4 3 4 4 8 5 3 5 6 6 5 7 4 6 8 3 4 9 5 3 10 5 5 11 5 3 12 5 5 13 5 5 14 3 5 15 4 6 Sitten vinkkejä Osaksi näissä toistetaan samoja asioita, jotka on sanottu varsinaissa ohjeissakin, mutta ehkä hiukan eri sanoin. Osaan aiheista on annettu sitten paljonkin lisäselitystä, osaan vähemmän. 1. Jouluvalojen vilkutin. Kannattaa huomata, että kaikissa tapauksissa aina ensimmäisenä palaa sisin kehä, joten vasta tätä vastaavan tilan jälkeen tarvitsee testata valintasignaaleja. Ja silloin kannattaa huomata, että jos ensimmäinen valintasignaali = 0, niin siitä riippumatta, onko toinen valintasignaali 0 vai 1, on valosekvenssin kolme seuraavaa tilaa samat. Vasta niiden jälkeen tarvitsee testata toinen valintasignaali. Samoin jos ensimmäinen valintasignaali = 1, niin taas toisen valintasignaalin arvosta riippumatta alkutilaa (sisin palaa) seuraavat kolme tilaa ovat samat, eli vasta niiden jälkeen tarvitsee testata toinen valintasignaali. 2. Diskovalojen välkytin. Kaikissa annetuissa sekvensseissä alkutila on punainen, joten vasta sen jälkeen pitää testata valintasignaalien arvoja. Ensin testataan ensimmäinen ja sitten heti perään toinen, jolloin kaavio jakautuu neljään haaraan eli jokaiselle valintasignaaliparille 00, 01, 10, 11 oma haara. Sitten vaan kuvauksen mukaisesti kuhunkin haaraan peräkkäisiä tiloja, joissa valot palavat halutulla tavalla. 3. Maija-pelin luksus-valtinarvontakone. Aiheen ohje voisi olla selvempikin. Valtin arvonta siis tapahtuu niin, että valttipainike painetaan pohjaan, pidetään sitä siellä hetken (tai kauan), ja kun painike päästetään takaisin ylös, laite arpoo yhden maan kolmesta. Näyttö kuitenkin pysyy pimeänä siihen asti kunnes näyttöpainiketta painetaan, jolloin arvottua maata vastaava lamppu syttyy. Tuo lamppu palaa niin kauan kuin näyttöpainiketta painetaan. Jos näyttöpainikkeen painamisen loputtua valttipainiketta ei paineta uudestaan, niin näyttöpainikkeen uudelleenpainaminen sytyttää edelleen saman lampun. Jos näyttöpainikkeen painamisen loputtua valttipainiketta painetaan uudestaan, niin silloin tietysti laite arpoo uuden valtin. Miten tuo sitten toteutetaan? Alkutilassa laite odottaa valttipainiketta ja polttaa kaikkia kolmea lamppua. Sitten kun laite toteaa, että valttipainiketta on painettu, ja myös pysyy painettuna, se kiertää hurjaa vauhtia kolmen tilan muodostamassa silmukassa. Tuo hurja vauhti saadaan aikaan suurella kellotaajuudella, esim. jos se on 1 MHz, niin tila vaihtuu mikrosekunnin välein. Olkoon nuo kolme tilaa vaikka A, B ja C (käytä
toteutuksessa parempia nimiä). Noissa tiloissa A, B, C lamput ovat pimeänä. Jokaisen tilan A, B, C jälkeen on valttipainiketta vastaavan tulon testaus. Jos painike on pohjassa (eli signaali = 1), niin mennään seuraavaan tilaan. Mutta jos testaus toteaa tilan X (missä X voi olla A, B tai C) jälkeen, että valttipainike on päästetty ylös (eli signaali = 0), testataan, onko näyttöpainike pohjassa. Jos ei ole, niin palataan tilaan X. Sen jälkeenhän on taas valttipainikkeen testaus, ja kun se testaus taas antaa nollan, niin taas testataan näyttöpainike. Jos sitä ei vieläkään ole painettu, niin taas palataan tilaan X. Tässä silmukassa pyöritään siihen asti kunnes näyttöpainikkeen testaus antaa ykkösen, jolloin laite menee tilaan, jossa se näyttää yhden kolmesta mahdollisesta valtista. Minkä? Se määräytyy vaikkapa niin, että jos edellä mainittu X = A, niin näyttää hertan, jos X = B, näyttää ristin, jos X = C, näyttää ruudun. Arvotun maan näyttävän tilan jälkeen taas testataan näyttöpainike, ja niin kauan kuin painike on pohjassa, pysytään tuossa arvotun maan näyttävässä tilassa. Sitten kun näyttöpainike ei enää ole pohjassa, palataan tilaan X. 4. Reaktionopeustesteri. Tämä muistuttaa kovasti tunnilla läpimentyä suunnitteluesimerkkiä, jossa pyöritettiin 7-segmenttinäytöllä numeroita 0-1-2-3. Tarkemmin sanoen tuon esimerkin osaa 2, jossa numeroiden kiertämissuunta oli valittavissa. Reaktionopeustesterissä on lisäksi pysäytyspainike, ja tiloja (joissa jokaisessa palaa eri lamppu) on kahdeksan. Aina jokaisen tilan jälkeen on kaksi testiä. Ensin testataan pysäytyspainike, ja jos se on painettuna, jäädään pyörimään samaan tilaan. Jos pysäytyspainiketta ei ole painettu, testataan suuntakytkin, ja sen perusteella valitaan, mihin suuntaan mennään. 5. HDLC-protokollan erotteen tunnistus- ja virhepiiri. Tähän laitteeseen tulee sen (kellon ja resetin lisäksi) ainoasta tulosta bittejä samaa vauhtia kuin mitä kello käy. Tuleva bitti alkaa aina jonkin aikaa ennen kellon nousevaa reunaa ja loppuu jonkin aikaa kellon nousevan reunan jälkeen. Eli aina kellon nousevan reunan kohdalla tulobitti on joko 0 tai 1. Laite pysyy alkutilassaan niin kauan kuin tulobitti = 0. Sitten kun tulobitti = 1, laite siirtyy seuraavaan tilaan. Jos seuraaava bitti = 0, niin laite siirtyy alkutilaan, mutta jos bitti = 1, laite siirtyy seuraavaan tilaan. Tätä toistetaan kunnes päästään tilaan, jossa on tullut kuusi peräkkäistä ykköstä. Jos sen jälkeen tulee nolla, niin erote 01111110 on toteutunut, jolloin mennään tilaan, jossa erotepulssilähtö antaa ykkösen, ja sen jälkeen palataan alkuun odottelemaan seuraavaa erotetta. Sen sijaan jos kuuden ykkösen jälkeen tulee ykkönen, laitetaan virhelähtö ykköseksi, jossa se pysyy siihen asti kunnes tulee nolla, jolloin palataan alkuun. Testilähtöjen avulla saadaan aikaan systeemi, jossa lähtöjen arvojen perusteella nähdään, miten laite siirtyy tilasta toiseen. 6. Parannettu proffamuistutin. Tässä ei kannata yrittää miettiä kaikkia mahdollisia tapoja, joilla professori voisi toilailla. Kannattaa olettaa, että hän toimii järkevästi. Eli astuu matolle, jos lamppu syttyy niin poistuu matolta hakemaan tarvikkeen, astuu taas matolle, avaa oven, menee ulos, sulkee oven. Palatessaan ulkoa astuu matolle ja sitten matolta pois, jolloin ASM-kaaviossa palataan alkutilanteeseen. ASM-kaavion jokaisessa tilassa odotellaan sopivan tulobitin arvon muuttumista, joten kellotajuus saa olla iso, esim. 1 khz. 7. Peliautomaatin ohjain. Alkutilassa odotellaan rahan tunnistuspulssia (joka on yksi laitteen tuloista). Kun se antaa ykkösen, mennään tilaan, jossa lamppu palaa. Tämän tilan jälkeen testataan pelipainiketuloa. Niin kauan kuin se = 0, pysytään samassa tilassa. Sitten kun todetaan, että pelipainike on pohjassa, laite alkaa kiertää hurjaa vauhtia kymmenen tilan muodostamassa silmukassa. Tuo hurja vauhti saadaan aikaan suurella kellotaajuudella, esim. jos se on 1 MHz, niin tila vaihtuu mikrosekunnin välein. Numeroidaan nuo kymmenen tilaa vaikka 1, 2,... 10 (toteutuksessa noille pitää keksiä VHDL-kelpoiset nimet). Aina jokaisen tilan jälkeen testataan pelipainike. Jos se on pohjassa, siirrytään seuraavaan tilaan. Näin laite kiertää noiden kymmenen tilan silmukassa niin kauan kuin pelipainike on pohjassa. Mutta ennen pitkää jonkin tilan jälkeen testaus kertookin, että pelipainike on päästetty ylös, jolloin pitää päättää, tuliko voitto vai ei, ja jos tuli, niin kaksi vai viisi euroa. Voittotodennäköisyydet toteutuvat niin, että jos tuo pelipainikkeen ylösnousu havaitaan tilojen 1... 7 jälkeisessä testauksessa, voittoa ei tule, eli laite vaan palaa alkuun odottelemaan seuraavaa kolikkoa. Mutta jos pelipainikkeen nollautuminen havaitaan tilan 8 tai 9 jälkeen (jonka tapahtuman todennäköisyys on 2/10 eli 20 %), niin silloin voitto on kaksi euroa. Silloin laite jatkaa toimintaansa niin, että voittopulssilähtö antaa ensin ykkösen, sitten nollan, sitten ykkösen ja sitten nollan. Eli se antaa kaksi kellojakson pituista pulssia. Tuo toteutuu niin, että laite menee neljän tilan läpi, joista ensimmäisessä ja kolmannessa voittopulssilähtö = 1, ja toisessa ja neljännessä se = 0. Jos pelipainikkeen nollautuminen havaitaan tilan 10 jälkeen (jonka tapahtuman todennäköisyys on 1/10 eli 10 %), niin silloin voitto on viisi euroa, eli laite jatkaa toimintaansa niin, että voittopulssilähtö antaa edelläkuvatulla tavalla viisi pulssia. Tässä kannattaa älytä, että ASM-kaaviossa nuo viisi pulssia voi toteuttaa niin, että ensin toteuttaa kolme pulssia (kuudella peräkkäisellä tilalla) ja sitten kaksi viimeistä pulssia samoilla neljällä tilalla, joilla 2 euron voiton kaksi pulssia toteutuu.
Testilähtöjen avulla saadaan aikaan systeemi, jossa lähtöjen arvojen perusteella nähdään, miten laite siirtyy tiloja 1... 10 kiertäessään ja voittopulsseja antaessaan tilasta toiseen. 8. Elektroninen arpanoppa. Tämän ohjeen alussa oleva taulukko sanoo, että tässä tarvitaan neljä lähtöä. Kuinka niin, kun nopassa on seitsemän lamppua? No, nopan lukemat 1-6 voi toteuttaa neljällä lähdöllä: Lähtö 1 sytyttää keskimmäisen lampun, lähtö 2 vasemman ylänurkan ja oikean alanurkan, lähtö 3 oikean ylänurkan ja vasemman alanurkan, ja lähtö 4 kutosen vaatimat loput kaksi lamppua. Näin saadaan aikaan kaikki noppaluvut laittamalla lähtöjä 1-4 sopivasti ykkösiksi. Laitteen alkutila voi olla vaikka sellainen, jossa nopan kaikki 7 lamppua palavat. Alkutilan jälkeen laite testaa painiketta, kunnes toteaa, että sitä painetaan. Silloin laite alkaa kiertää hurjaa vauhtia kuuden tilan muodostamassa silmukassa. Tuo hurja vauhti saadaan aikaan suurella kellotaajuudella, esim. jos se on 1 MHz, niin tila vaihtuu mikrosekunnin välein. Numeroidaan nuo kuusi tilaa 1, 2,... 6 (toteutuksessa noille pitää keksiä VHDL-kelpoiset nimet). Aina jokaisen tilan jälkeen testataan painike. Jos se on pohjassa, siirrytään seuraavaan tilaan. Näin laite kiertää noiden kuuden tilan silmukassa niin kauan kuin pelipainike on pohjassa. Mutta ennen pitkää testaus kertoo, että painiketta ei enää paineta. Jos tuo toteaminen tapahtuu tilan X jälkeen, niin sitten laite menee tilaan, jossa lukua X vastaavat nopan lamput palavat. Tuon tilan jälkeen testataan taas painike, ja niin kauan kuin painiketta ei paineta, laite pysyy tilassa, jossa noppa näyttää lukua X. Mutta sitten kun painiketta taas painetaan, laite alkaa taas kiertää hurjaa vauhtia tiloja 1-6. 9. Kellopulssigeneraattori. Alkutilassa pulssilähtö antaa nollan. Ensin pitää testata jatkuvan kellon kytkin. Jos se on päällä, laite menee tilaan, jossa pulssilähtö = 1 ja sen jälkeen palaa alkuun. Näin jatkuvan kellon kytkin tuottaa pulssilähtöön vuorotellen kellojakson pituisen ykkösen ja kellojakson pituisen nollan. Eli se tuottaa signaalin, jonka taajuus on puolet kellon taajuudesta. (Jos kellon taajuus on esim. 1 khz, niin kellojakson pituus = 1 ms ja kello antaa vuorotellen 0,5 ms pitkän ykkösen ja 0,5 ms pitkän nollan. Tällöin jatkuvan kellon kytkin synnyttää pulssilähtöön vuorotellen 1 ms pitkän ykkösen ja 1 ms pitkän nollan. Eli pulssilähdön jakso = 2 ms, eli sen taajuus on 0,5 khz.) Jos jatkuvan kellon kytkin ei ole päällä, niin testataan pulssipainike. Jos sitä on painettu, laite menee tilaan, jossa pulssilähtö = 1, ja sen jälkeen tilaan jossa se = 0. Pulssipainiketta tuon tilan jälkeen testaamalla saadaan aikaan se, että pulssilähtö pysyy nollana niin kauan kuin pulssipainike on pohjassa. Sitten kun pulssipainike päästetään ylös, laite palaa alkutilaan. Jos jatkuvan kellon kytkin ei ole päällä eikä pulssipainiketta paineta, testataan kaksoispulssipainike. Jos sitä on painettu, laite menee läpi neljä tilaa käsittävän sekvenssin, jossa pulssilähtö on vuorotellen 1 ja 0. Kaksoisulssipainiketta tuon sekvenssin viimeisen tilan jälkeen testaamalla saadaan aikaan se, että pulssilähtö pysyy nollana niin kauan kuin kaksoispulssipainike on pohjassa. Sitten kun kaksoispulssipainike päästetään ylös, laite palaa alkutilaan. Testilähtöjen t0 ja t1 avulla saadaan aikaan systeemi, jossa lähtöjen arvojen perusteella nähdään, miten laite siirtyy tilasta toiseen. 10. Maija-pelin superluksus-valtinarvontakone. Aiheen ohje voisi olla selvempikin. Valtin arvonta siis tapahtuu niin, että valttipainike painetaan pohjaan, pidetään sitä siellä hetken (tai kauan), ja kun painike päästetään takaisin ylös, laite arpoo yhden maan kolmesta. Näyttö kuitenkin pysyy pimeänä siihen asti kunnes näyttöpainiketta painetaan, jolloin arvottua maata vastaava lamppu syttyy. Tuo lamppu palaa niin kauan kuin näyttöpainiketta painetaan. Jos näyttöpainikkeen painamisen loputtua valttipainiketta ei paineta uudestaan, niin näyttöpainikkeen uudelleenpainaminen sytyttää edelleen saman lampun. Jos näyttöpainikkeen painamisen loputtua valttipainiketta painetaan uudestaan, niin silloin tietysti laite arpoo uuden valtin. Jos näyttöpainikkeen painamisen loputtua painetaan testipainiketta, niin laite menee tilaan, jossa kaikki lamput palavat. Tuon tilan jälkeen testipainikkeen arvo testataan, ja niin kauan kuin testipainiketta painetaan, laite säilyy tilassa, jossa kaikki lamput palavat. Jos testipainikkeen painamisen loputtua valttipainiketta ei paineta uudestaan, niin näyttöpainikkeen painaminen sytyttää viimeksi arvottua valttia vastaavan lampun. Miten tuo sitten toteutetaan? Alkutilassa laite odottaa valttipainiketta ja kaikki kolme lamppua ovat pimeänä. Sitten kun laite toteaa, että valttipainiketta on painettu, ja myös pysyy painettuna, se kiertää hurjaa vauhtia kolmen tilan muodostamassa silmukassa. Tuo hurja vauhti saadaan aikaan suurella kellotaajuudella, esim. jos se on 1 MHz, niin tila vaihtuu mikrosekunnin välein. Olkoon nuo kolme tilaa vaikka A, B ja C (käytä toteutuksessa parempia nimiä). Noissa tiloissa A, B, C lamput ovat pimeänä. Jokaisen tilan A, B, C jälkeen
on valttipainikkeen testaus. Jos painike on pohjassa (eli signaali = 1), niin mennään seuraavaan tilaan. Mutta jos testaus toteaa tilan X (missä X voi olla A, B tai C) jälkeen, että valttipainike on päästetty ylös (eli signaali = 0), testataan, onko näyttöpainike pohjassa. Jos ei ole, niin testataan, onko testipainiketta painettu. Jos ei ole, niin palataan tilaan X. Tätä silmukkaa (tila X valttipainikkeen testaus: ei painettu näyttöpainikkeen testaus: ei painettu testipainikkeen testaus: ei painettu tila X jne) kierretään niin kauan, kunnes todetaan, että joko valttipainiketta, näyttöpainiketta tai testipainiketta painetaan. Sitten kun todetaan, että painetaan näyttöpainiketta, niin laite menee tilaan, jossa se näyttää yhden kolmesta mahdollisesta valtista Minkä? Se määräytyy vaikkapa niin, että jos edellä mainittu X = A, niin näyttää hertan, jos X = B, näyttää ristin, jos X = C, näyttää ruudun. Tämän arvotun maan näyttävän tilan jälkeen taas testataan näyttöpainike, ja niin kauan kuin painike on pohjassa pysytään tuossa arvotun maan näyttävässä tilassa. Sitten kun näyttöpainike ei enää ole pohjassa, palataan tilaan X ja laite alkaa taas kiertää silmukkaa (tila X valttipainikkeen testaus: ei painettu näyttöpainikkeen testaus: ei painettu testipainikkeen testaus: ei painettu tila X jne) jota kierretään niin kauan, kunnes todetaan, että joko valttipainiketta, näyttöpainiketta tai testipainiketta painetaan. Sitten kun todetaan, että painetaan testipainiketta, laite menee tilaan, jossa kaikki kolme lamppua palavat. Tämän tilan jälkeen taas testataan testipainike, ja niin kauan kuin painike on pohjassa pysytään tuossa kaikkia lamppuja polttavassa tilassa. Sitten kun testipainike ei enää ole pohjassa, palataan tilaan X ja laite alkaa taas kiertää silmukkaa (tila X valttipainikkeen testaus: ei painettu näyttöpainikkeen testaus: ei painettu testipainikkeen testaus: ei painettu tila X jne) jota kierretään niin kauan, kunnes todetaan, että joko valttipainiketta, näyttöpainiketta tai testipainiketta painetaan. Testilähtöjen t0 ja t1 avulla saadaan aikaan systeemi, jossa lähtöjen arvojen perusteella nähdään, miten laite siirtyy tilasta toiseen. 11. Jaskan kuppilan superhypermainos. Tämä on huomattavasti suoraviivaisempi kuin moni muu. Alkutilan (joka kannattaa olla tila, jossa kaikki sanat palavat) jälkeen testataan vuorotellen kaikkia kolmea valintasignaalia. Noiden testausten tuloksena laitteen toiminta (siis sen ASM-kaavio) jakautuu kahdeksaan haaraan, joissa kussakin toteutuu tilojen sekvenssi niin, että sanat palavat eri haaroissa tehtävämäärittelyssä kerrotulla tavalla. 12. Kolikontunnistuspiiri. Tässä pitää vähän miettiä, mitä tapahtuu, kun kolikko vierii tunnistusantureiden ohi. Oheisessa kuvassa on eri kolikkoja symboloivat ympyrät sekä kolme anturia a, b ja c. (Kolikoiden kokosuhteet eivät ole tarkasti oikein.) Kun euron kolikko (pienin) vierii antureiden ohi, niin vain a peittyy joksikin aikaa. Kun 50-senttinen (toiseksi pienin) vierii, niin ensin peittyy a, sitten peittyy b, sitten b tulee esille ja lopuksi a tulee esille. Ja kun kahden euron kolikko vierii, niin ensin peittyy a, sitten peittyy b, sitten peittyy c, sitten c tulee esille, sitten b tulee esille ja lopuksi a tulee esille. Anturien antama signaali (bitti) testataan aina kellosignaalin nousevalla reunalla. Jos laitteen kellotaajuus on kovin pieni, niin voi käydä esim. niin, että euron kolikko ei tietyn kellojakson alussa ole vielä ihan peittänyt a:ta, peittää sen tuon saman kellojakson aikana ja ehtii saman tien vielä myös a:n ohi saman kellojakson aikana. Silloin kolikko jää tunnistamatta. Siispä kellotaajuuden pitää olla riittävän iso. Silloinhan taas käy esim. niin, että euron kolikko peittää a:n usean kellojakson ajan, jolloin anturi a antaa monta ykköstä peräkkäin. Silloin tunnistaminen ei tietenkään voi toimia niin, että heti kun joku anturi antaa ykkösen, niin kolikko kuvitellaan tunnistetuksi. Näin homma toimii. Jos anturi 1 antaa ykkösen, niin sen jälkeen se antaa lisää ykkösiä (koska kellotaajuus on niin iso, että a-anturi on peitossa usean kellojakson ajan). Pitää odottaa, tuleeko noiden ykkösten jälkeen myös b-anturista ykkönen. Jos ei tule, vaan sen sijaan anturin a signaali muuttuu 0:ksi, niin tiedetään, että kolikko oli euro, jolloin laite menee tilaan, jossa euroa vastaava lähtö on ykkönen, on siinä tilassa yhden kellojakson ja menee sitten alkuun. Mutta jos a:n antamien ykkösten jälkeen myös b-anturi antaa ykkösen, niin sen jälkeen se antaa lisää ykkösiä. Pitää odottaa, tuleeko noiden ykkösten jälkeen myös c-anturista ykkönen. Jos ei tule, vaan sen sijaan anturin a signaali muuttuu 0:ksi, niin tiedetään, että kolikko oli 50-senttinen. Huom! Anturin b c b a
muuttumista nollaksi ei tarvitse testata, koska kolikon tunnistuspulssi voidaan antaa vasta, kun myös anturi a on paljastunut kolikon takaa, eli kun kolikko on kokonaisuudessaan vierinyt tunnistusantureiden ohi. Mutta jos b:n antamien ykkösten jälkeen myös c-anturi antaa ykkösen, niin tiedetään, että kolikko on 2- euronen. Sen jälkeen pitää testata anturia a, kunnes se antaa nollan (eli kolikko on ohittanut kaikki anturit), jolloin 2-eurosen tunnistuspulssi voidaan antaa. Huom! Anturien c ja b muuttumista nollaksi ei tarvitse testata, koska kolikon tunnistuspulssi voidaan antaa vasta, kun myös anturi a on paljastunut kolikon takaa. 13. Verenpaine- ja sykemittarin ohjain. Vinkkejä myöhemmin, jos joku tämän aiheen valitsee. 14. Otsalampun ohjauspiiri. Alkutila on pimeä. Tässä pysytään, kunnes painike painetaan alas. Silloin siirrytään seuraavaan tilaan, joka myös on pimeä, ja siinä pysytään, kunnes painike päästetään ylös. Sen jälkeen alkaa sekunnin kestävä vuorottelusekvenssi (siirtymissekvenssi). Tuo sekvenssi kannattaa olla 10 tilaa käsittävä, jolloin kellojakson pituus 0,1 s toimii. Silloin sekvenssin 5:nnessä ja 6:nnessa tilassa palaa sama (oikeanpuoleisin) led. Ei kannata yrittää toteuttaa laitetta niin, että siirtyminen seuraavaan sekvenssiin (kaikki ledit välkkyvät yhtä aikaa) tapahtuisi vuorottelusekvenssin keskellä. Siis laite on järkevä toteuttaa niin, että se ei reagoi mitenkään, jos painike painetaan vuorottelun aikana hyvin lyhyeksi aikaa (esim. 0.3 sekunniksi) pohjaan. Siirtyminen seuraavaan sekvenssiin toteutuu, kun painike pidetään pohjassa vuorottelusekvenssin loppuun asti ja hieman sen yli. Silloin ledit jatkavat vuorottelua, mutta sitten kun sekvenssin lopussa painike onkin ylhäällä, siirrytään seuraavaan sekvenssiin, eli kaikkien ledien välkyttämiseen. ASM-kaaviossa tämä näkyy niin, että on kymmenen peräkkäistä vuorottelutilaa, sitten on painikkeen testaus, ja jos painike on ylhäällä, toistetaan samat kymmenen tilaa. Mutta jos painike onkin alhaalla, mennään läpi kymmenen vuorottelutilaa, jotka ovat ASM-kaaviossa eri tilat kuin edelliset kymmenen. Näiden lopussa on taas painikkeen testaus. Jos painike on edelleen alhaalla, toistetaan nuo kymmenen tilaa, mutta jos painike on nostettu ylös, mennään seuraavaan sekvenssiin, jossa ledit palavat 0.1 s ja ovat pimeinä 0.1 s (jolloin vilkkumisjakso on 0.2 s, eli vilkkumistaajuus on 5 Hz). Samalla periaatteella kahdessa muussa sekvenssissä toistetaan ASM-kaaviossa sekvenssin vaatimat tilat niin, että välissä on painikkeen testaus. 15. Autohallin tilaa/täynnä-näyttöpiiri. Tämä on varsin kimurantti tapaus. Esimerkiksi näin voi tämän toteuttaa: Pitää olettaa, että halli on alussa tyhjä. Silloin ollaan alkutilassa, jossa vihreä palaa ja sisääntuloanturia (sis) testataan, ja niin kauan kuin se = 0, pysytään alkutilassa. Sitten kun sis = 1, siirrytään seuraavaan tilaan, jossa vihreä edelleen palaa. Tilan nimessä on hyvä näkyä sisällä olevien autojen määrä. Tässä tilassa pysytään niin kauan kuin sis = 1 (koska auto ei mene anturin ohi ääretöntä vauhtia, jolloin anturi antaa ykköstä usean kellojakson ajan). Sitten kun muuttuu sis = 0, pitää testata ulostuloanturin (ulo) arvo, jos se = 1, niin palataan äskeiseen tilaan. (Autoa ei tietenkään voi olla kaavion tässä kohdassa tulossa ulos silloin kun laite on vasta käynnistetty ja vain yksi auto on mennyt sisään. Mutta kun ASM-kaavio on tehty valmiiksi, todetaan että viimeksimainittuun tilaan tullaan muutakin kautta.) Jos mainittu ulo-testaus antaa 0:n, niin siirrytään seuraavaan tilaan, autoja on sisällä 1. Tässä tilassa pysytään niin kauan kuin sekä sis että ulo ovat nollia. Mutta jos sis = 1, niin silloin autoja on hallissa kaksi ja siirrytään seuraavaan tilaan. Mutta jos testaus antaa sis = 0 ja ulo = 1, niin silloin hallissa ei enää ole yhtään auto, siirrytään alkutilaan. Kun on siirrytty tilaan, jossa sisällä on kaksi autoa, niin tässä tilassa pysytään niin kauan kuin sis = 1. Sitten kun muuttuu sis = 0, pitää testata ulostuloanturin (ulo) arvo, jos se = 1, niin palataan äskeiseen tilaan, koska tällöin autojen määrä on tippumassa kolmesta kahteen. Mutta jos ulo = 0, niin mennään seuraavaan tilaan, autoja on sisällä kaksi. Testataan sis, jos se on = 1, niin autojen määrä kasvaa kolmeen, mennään seuraavaan tilaan. Jos sis = 0, testataan ulo, jos se = 0, pysytään samassa tilassa, mutta jos ulo = 1, niin autojen määrä on pienenemässä yhteen, mennään ensimmäiseen yhden auton tilaan. Samalla periaatteella kaavio rakentuu eteenpäin, kunnes päädytään tilaan, jossa autoja on viisi, jolloin punainen valo palaa. Nollan auton tiloja on yksi, kaikille muille automäärille on kaksi eri tilaa.