Hlavní navigace

Jak spočítat, kolikrát projelo autíčko na autodráze?

19. 8. 2009
Doba čtení: 3 minuty

Sdílet

Vypadá to jednoduše. Na autodráhu se přidělá světelná závora a výstup se přivede na některý ze vstupů paralelního portu. Pak již jen čteme ve smyčce stav vstupů paralelního portu a při změně (na autodráze je celkem jedno, jestli při náběžné hraně nebo sestupné hraně, ale ne na obou) přičítáme jedničku.

Jenomže se občas stane, že si počítač nějakého průjezdu nevšimne. Takže je potřeba nějaká paměť na průjezdy.

Čítač

Nejjednodušším řešením je čítač. Čítač je zařízení, které dostává na vstup impulsy a na výstupu má číslo. Vyrábějí se různé obvody s čítači. Čítače binární (počítají jen 0 a 1, takže je to vlastně dělička kmitočtů dvěma), dekadické (počítají od 0 do 9 a při přechodu 9 → 0 pošlou na výstup impuls, nebo se jako impuls použije dekadická 0), hexadecimální (což jsou 4 binární za sebou), nebo třeba děliče 32768 (32768 Hz je běžný kmitočet hodinových krystalů, takže tento čítač vyrobí pulsy dlouhé 1 s). Připojovat k počítači dekadický čítač je spíše nepraktické, protože nevyužijeme všechny kombinace vstupů. Také se vyrábějí čítače, které umí čítat vpřed i vzad. Připojit jde samozřejmě jakýkoliv čítač, jen je potřeba, aby měl vyvedené všechny bity, které chceme brát v úvahu.

Jak takový čítač funguje uvnitř? Vzpomeňte si na popis klopného obvodu D. Při aktivním signálu C (hodiny) se přepíše stav vstupu D na výstup Q (a na /Q je pak samozřejmě negace Q). Co se stane, když zapojíme výstup /Q na vstup D? Při každém příchodu hodin se změní stav čítače, protože na /Q je vždy opačný stav, než byl naposledy na D. Obvody, které byly nakresleny minulém článku měly ovládání hodin úrovní. Obvod by tedy fungoval tak, že by se při log 1 na hodinovém vstupu rozkmital, protože by přepsal D → Q, tím by změnil /Q a tedy i D a to by zase přepsal na Q. Takový obvod by byl dost k ničemu. Běžné obvody D mají naštěstí hodiny řízené hranou a ne úrovní (jejich vnitřní zapojení je o něco složitější – obsahuje de facto dva klopné obvody R-S a nějaká hradla navíc), takže je lze takto zapojit.

Binární čítač

Na vstup C tedy přivádíme signál a na výstupu Q se nám mění signál vždy po vzestupné (nebo sestupné – podle použitého obvodu) hraně vstupního signálu, takže má poloviční kmitočet. Z hodnoty je vždy vidět, zda dosud přišel sudý, nebo lichý počet vstupních pulsů. Máme tedy binární čítač (umí dva stavy – 0 a 1).

Vícebitový čítač

Těchto čítačů není problém zapojit za sebe více – výstup Q jednoho se připojí na vstup C dalšího. Výsledný čítač je tolikabitový, kolik jich zapojíme. Například z pěti klopných obvodu D je čítač od 0 do 31. Pak samozřejmě čítač přeteče, takže nelze poznat, jestli mezi čteními přišlo 32 impulsů, 64 impulsů, nebo žádný.

5bitový čítač

Atomické čtení

Proč zrovna pět bitů? Paralelní port má pět vstupu. Možná vás napadne, proč nepoužít multiplexer vstupů …

Řekněme, že máme osmibitový čítač připojený přes čtyřbitový multiplexer. Na čítači je hodnota 0×2f. Čteme spodní půlku. Získali jsme ‚f‘. Přepneme multiplexer. Během toho přijde vstupní impuls a překlopí čítač na 0×30. Přečteme horní půlku. Získáme ‚3‘. Myslíme si, že na čítači je 0×3f, což je zjevně špatně. Správné hodnoty jsou 0×2f, nebo 0×30. Problém je tedy ve čtení nadvakrát. Řešení je použít nějaký registr, do kterého se hodnota přepíše najednou a pak ho postupně přečteme. Registr musí být alespoň stejně velký, jako čítač. To už jsme dělali při zvyšování počtu výstupu paralelního portu. Takže připojíme 16-bit čítač – to je 16 klopných obvodů, k tomu dalších 16 klopných obvodů na zapamatování a další obvody na multiplexer. To bude pěkně velká deska. A přesně takový šestnáctibitový čítač je v osmibitovém mikroprocesoru atmega8, což je jedno pouzdro za 32 Kč (také tam museli vyřešit atomické čtení 16-bit slova do dvou 8-bit registrů). Z toho je vidět, že nemá smysl dělat velké čítače z jednotlivých klopných obvodů (nejsou-li extrémní nároky na rychlost).

DT24

Čítač jako výstup

Je-li potřeba více výstupů, ale procházejí se cyklicky všechny, nebo se procházejí vždy vzestupně a nevadí, když se na chvíli zapne nějaký nepotřebný, je možno ušetřit nějaké výstupy oproti dekodéru 1zN použitím čítače. Čítač potřebuje jeden výstup (kterým se čítá) a jeden vstup (kterým se zjišťuje, kdy je na začátku), případně druhý vstup (kterým se resetuje).

Za pomoci vhodně zapojených čítačů by šlo například připojit binární hodiny na jediný výstup paralelního portu (nebo by je samozřejmě šlo udělat jenom z čítačů a krystalového oscilátoru – tak fungují i běžné digitálky).

Byl pro vás článek přínosný?