Počítače a moderné prístroje

Pri prevádzke zariadenia s mikrokontrolérom je často potrebné počítať „antropomorfný“ čas – koľko zlomkov sekundy má LED svietiť, maximálny čas dvojitého kliknutia atď. Vo všeobecnosti počítajte nielen nano- a mikrosekúnd, ale aj desiatok milisekúnd, či dokonca sekúnd, minút a dokonca hodín (obávam sa povedať, že o dňoch...).
Zároveň je v mikrokontroléroch často potrebné súčasne riešiť mikrosekundy - periódy impulzov, anti-bounce čakanie atď.
Existujú aj zariadenia, ktoré pracujú nepretržite mnoho hodín a dokonca dní - letecké zariadenia, automobilové zariadenia, zariadenia na zem (niekedy hovoríme o nepretržitej prevádzke niekoľko dní). V týchto prípadoch je pretečenie časovačov a 8-bitových premenných neprijateľné.
Chcel by som toto všetko spojiť do jedného elegantného a univerzálneho riešenia – mať prostriedok na meranie času s mikrosekundovou presnosťou, ktorý nepretečie niekoľko dní.
Prečo nie? Nejaký čas som trpel a prišiel som s riešením pre 8-bitové mikrokontroléry AVR. Na tento účel som použil 8-bitové počítadlo časovača a 4-bajtovú premennú. V súčasnosti nepracujem s PIC a AT89 a nepoznám iné vstavané platformy. Ak však čitatelia pomôžu, urobím to aj pre nich.
Výhody – kód je vysoko opakovateľný (vyrábam s ním už 5. zariadenie); jednoduchosť obsluhy (pre klientskú časť diela sa nepoužívajú prerušenia); klientska časť kódu je podmienene nezávislá od platformy; v prerušení - jedna operácia sčítania (avšak pre 4-bajtovú hodnotu); neexistuje žiadne externé zariadenie - časovač v reálnom čase.
Našiel som len jednu nevýhodu - jeden taký užitočný a vždy potrebný časovač je zaneprázdnený...
Článok bude zaujímať predovšetkým začiatočníkov - tu som neobjavil Ameriku.

teória

Takže mám k dispozícii zariadenie založené na Atmega16A s 12 MHz quartzom. Zoberme si jeho časovač-počítadlo 0. Toto je osembitový časovač - to nám stačí. prečo? Počítame:
  1. vezmeme 12 MHz z kremeňa a vezmeme deliaci faktor o 8 - dostaneme frekvenciu 1500 KHz;
  2. Vezmeme režim CTC (reset na koincidenciu) a nastavíme prerušenie tak, aby sa zhodovalo so 150 - dostaneme frekvenciu prerušenia 10 KHz;
  3. práve na tomto prerušení inkrementujeme premennú (prírastok sa získava každých 0,1 milisekúnd);
  4. ak ide o 32-bitovú hodnotu bez znamienka, pretečie približne po
    • 429496729,6 milisekúnd;
    • 42949,7 sekúnd;
    • 7158,3 minút;
    • 119,3 hodiny;
    • 4,97 dňa.
Inými slovami, toto riešenie vytvára časovač s presnosťou 0,1 milisekúnd na (takmer) 5 dní (treba však počítať s tým, že skutočný kremeň má chybu – o tom neskôr). A ak analyzujete aj hodnotu samotného časovača 0 - zvyšuje sa každé 2/3 mikrosekundy - potom môžete získať počítadlo s presnosťou 0,67 mikrosekundy.
Dosť? Za mojimi očami. Pomocou počítadla 0,1 milisekúnd v mojich projektoch:
  • Počítam trvanie žiary a prestávky medzi LED diódami;
  • Beriem do úvahy časové limity pri práci s UART, USB;
  • V testovacom zariadení nastavujem všemožné situácie – zložité časopriestorové kombinácie;
  • Dodržiavam špecifikované časové intervaly pri dopytovaní ADC a iných senzorov;
  • Oznamujem počítaču čas svojej činnosti (zariadenia) a prenášam informácie v danom časovom intervale;
  • Berúc do úvahy počítadlo s presnosťou na mikrosekundu, vykonávam anti-bounce kontrolu pri stláčaní kláves, analyzujem impulzy v dlhých riadkoch.
A to všetko sa ľahko zmestí do JEDNÉHO OVLÁDAČA ATmega16! Navyše to nie je Assembler, ale cross-platform C! A žiadne externé počítadlo v reálnom čase!
Nie je to zlé, však?

Nastavenie pre AVR

Ako to všetko urobiť v AVR?
Najprv vytvoríme externú premennú, ktorú nazývam „DeciMilliSecond“:
// v main.h typedef unsigned long dword; // 32-bitové celé číslo bez znamienka externe volatile dword dmsec; // 0,1 ms // v main.c volatile dword dmsec;
Ako @no-smoking správne poznamenal, táto premenná musí byť volatilná, aby sa ju kompilátor nesnažil optimalizovať.
Inicializujem túto premennú vo funkcii:
dmsec = 0;
Ďalej nastavím prevádzkový režim časovača 0:
// . časovač 0 – 0,1 ms Timer0_Mode (TIMER_Mode_CTC | TIMER0_Clk_8); Timer0_Cntr(149); Timer_Int(Timer0_Cmp);
Zároveň v niektorých MCU_init.h deklarujem všetko, čo je potrebné:
// v mcu_init.h #include // . TIMSK #define Timer0_Cmp (1<< 1) // совпадение таймера 0 // . TCCRn #define WGM1 (1 << 3) #define CS1 (1 << 1) // . источник сигнала для таймера 0 #define TIMER0_Clk_8 CS1 // предделитель 8 // . режим работы таймера #define TIMER_Mode_CTC WGM1 // CTC (сброс при совпадении) // . настройка таймера #define Timer_Int(Mode) TIMSK = (Mode) #define Timer0_Mode(Mode) TCCR0 = (Mode) #define Timer0_Cntr(Cntr) OCR0 = (Cntr)
Potom, keď je to možné, povolím prerušenia:
#asm("SEI")
Zostáva popísať prerušenie. Toto je jednoduchšie ako všetko predtým:
#include prerušenie Timer0_Compare (neplatné) ( ++dmsec; )
To je všetko, časovač je popísaný, nakonfigurovaný a spustený!

Nastavenie pre PIC

Tu je to, čo mi milí fanúšikovia PIC povedali:

V špičkách to možno jednoducho zopakovať pomocou modulu Timer2. Zhodou okolností má podobnú funkciu prerušenia.

PR2 = 75 - hodnota, pri ktorej sa časovač vynuluje a vygeneruje prerušenie
T2CON.T2CKPS = 2 - preddelička 1:16
T2CON.T2OUTPS = 0 - bez postscaler
T2CON.TMR2ON = on - časovač je povolený

IPR1.TMR2IP = 1 -- prerušenie s vysokou prioritou
PIR1.TMR2IF = off -- resetovať príznak prerušenia
PIE1.TMR2IE = on -- povolí prerušenie, keď sa TMR2 a PR2 zhodujú
INTCON.GIE = ​​​​on -- povoliť spracovanie prerušenia

Ako vidíte, preddelička je tu 2-krát väčšia, preto je PR2 2-krát menšia.
Tieto nastavenia budú generovať prerušenia s frekvenciou 10 kHz na systémovej frekvencii 48 MHz (časovač je nastavený na Fosc/4) – štandardná frekvencia pre USB Full Speed.

Použitie

Kód pre klienta tohto časovača je multiplatformový (okrem prístupu k hodnote časovača 0 v AVR).
Tu je úryvok kódu zdieľania USB:
#include "main.h" // tu je premenná dmsec, next_USB_timeout #include "FT245R.h" // tu sú funkcie pre prácu s modulom USB #include "..\Protocol.h" // tu je mikrokontrolér -protokol výmeny počítača // * * // ** Analyzovať pakety USB // ** void AnalyzovaťUSB (void) ( #define RECEIVE_BYTE(B) while (!FT245R_IsToRead)\ ( if (dmsec > end_analyze) return; )\ B = FT245_ReadByte (); #define RECEIVE_WORD(W) // podobné pre 2 bajty #define RECEIVE_DWORD(W) // podobné pre 4 bajty dword end_analyze, d; NewAnalyze: if (!FT245R_IsToRead) // žiadne pakety? dm end_analyze? return; + max_USB_timeout; // časový limit pre aktuálnu analýzu next_USB_timeout = dmsec + MaxSilence_PC_DEV; // časový limit pre všeobecnú výmenu RECEIVE_BYTE (b) // prepínač hlavičky paketu (b) ( prípad SetFullState: RECEIVE_DWORD (d); // prečítajte si slovo is_initialized 1; // spracovať ChangeIndicator () ; break; ) // prepnúť (baliť) na NewAnalyze; #undef RECEIVE_BYTE // zrušiť #define #undef RECEIVE_WORD #undef RECEIVE_DWORD )
Makro funkcie RECEIVE_BYTE, RECEIVE_WORD, RECEIVE_DWORD implementujú procedúry čítania zohľadňujúce časový limit pre danú fázu výmeny. Výsledkom je, že ak niečo visí na druhej strane, mikrokontrolér neprejde do hibernácie. Pozor - WatchDog nie je potrebný! A to všetko vďaka premennej/konštantnej max_USB_timeout, ktorá nastavuje časový limit s presnosťou 0,1 milisekúnd.
Analýza „ticha na vzduchu“ pomocou premennej next_USB_timeout je implementovaná rovnakým spôsobom. To umožňuje mikrokontroléru 1) vedieť, že počítač niekde zmizol, 2) to nejako signalizovať (v mojom prípade sa rozsvieti LED „chyba“). Konštantný/variabilný MaxSilence_PC_DEV vám umožňuje meniť koncept „ticha“ v najširšom rozsahu – od zlomku milisekúnd až po niekoľko dní.
Všetky ostatné body sú implementované podobne.
Ak potrebujete použiť počítadlo mikrosekúnd, objaví sa tam porovnávacia funkcia:
#define GetUSec(A,B) ( #asm ("CLI"); A = dmsec; B = TCNT0; #asm ("SEI"); ) // ** // ** Časový rozdiel medzi udalosťami s presnosťou na 2/ 3usec // ** rozdiel dword (dword prev_dmsec, byte prev_usec) ( dword cur_dmsec; byte cur_usec; ​​​​dword dif; // . všimnite si aktuálny čas GetUSec (cur_dmsec, cur_usec); // vypočítajte rozdiel dif = cur_dmsec prev dif<<= 8; if (cur_usec < prev_usec) dif += 255 + (dword) cur_usec - prev_usec; else dif += cur_usec - prev_usec; return dif; }
Funkcia je odovzdaná v predchádzajúcom časovom bode - predchádzajúca hodnota dmsec a časovač 0.
Najprv použijeme makro GetUSec na zastavenie prerušení, aby sa v čase kopírovania nepoškodila hodnota dmsec a počítadlo. A skopírujte aktuálny čas.
Ďalej prevedieme časový rozdiel na formát 2/3 mikrosekundy, berúc do úvahy pretečenie.
No vráťme sa tentoraz.
A potom to používame v bežnom prípade na kontrolu anti-bounce a iných opatrení. Len nezabudnite pozastaviť prerušenia aj pri označovaní aktuálneho okamihu – alebo ešte lepšie, použite makro GetUSec.

výsledky

Tento časovač sa pre mňa ukázal ako mimoriadne pohodlné riešenie. Myslím, že to bude užitočné aj pre vás. A použil som ho vo svojich nasledujúcich projektoch:
  • Situácie oplotenia rozvádzačov. Ide o mohutnú polmetrovú dosku s tromi ovládačmi - ATmega128 ako centrálny a ATmega64 ako dva pomocné (pravá a ľavá strana). Medzi tromi ovládačmi a ich komponentmi nie je galvanické prepojenie - napájanie je založené na ionistoroch, komunikácia cez optočleny. Centrálny ovládač nabíja skupiny niektorých ionistorov a v tomto čase napája obe strany z iných ionistorov. Tu sme museli urobiť viacstupňový algoritmus na prepínanie tohto všetkého, aby sme minimalizovali vzájomné prepojenie. Hovoríme najmä o koordinovanej práci 8 relé - časovače tu pracujú na 3,3 ms (garantovaný čas odozvy relé). No v skutočnosti obe strany ovládajú 10 relé a asi pol stovky multiplexerov. Všetky tieto zariadenia pracujú s jasne definovanými časovými charakteristikami (s presnosťou 1 ms, maximálna doba trvania je 6 sekúnd). No a nakoniec banálny časový limit pre USB, UART.
  • Snímač hĺbky. Tu riešim ďalší problém (rozpracovaný projekt). Existujú dva vodiče (veľa metrov dlhé), ktoré definujú situáciu „posun hore o 1 cm“ a „posun dole o 1 cm“. Existuje mnoho spôsobov, ako určiť smer. V každom prípade ide o určité kombinácie impulzov. Pomocou tohto časovača určím odraz a trvanie stabilného pulzu. Maximálny povolený čas odrazu (tu stačí 10 mikrosekúnd), čakanie proti odrazu a minimálne/maximálne trvanie impulzu sa nastavuje z počítača. Existuje režim ladenia - snímač sa stáva logickým analyzátorom. To vám umožní odladiť prevádzku linky a upraviť koeficienty. Opäť časový limit, LED diódy.
  • Senzor analógového signálu. Banálny 8-kanálový ADC. Tu používam časovač na udržiavanie potrebných prestávok.
Vážení používatelia habra z iných platforiem mi môžu povedať inicializačný kód pre príslušný časovač, ako aj pravidlá prístupu k nemu - pridám ho sem. Pre iné platformy môže byť potrebné vybrať iné časy. Ale v každom prípade by to malo byť niečo v rozmedzí niekoľkých jednotiek mikrosekúnd pre samotný časovač a niečo násobky 100 mikrosekúnd pre premennú počítadla. Pretože, ako sa ukazuje, niekedy jedna milisekunda nestačí.

Každý vie, prečo existuje mikrokalkulačka, ale ukazuje sa, že okrem matematických výpočtov dokáže oveľa viac. Upozorňujeme, že ak stlačíte tlačidlo „1“, potom „+“ a potom stlačíte „=“, potom s každým stlačením tlačidla „=“ sa číslo na displeji zvýši o jeden. Prečo nie digitálne počítadlo?

Ak sú dva vodiče prispájkované k tlačidlu „=“, môžu sa použiť ako vstup počítadla, napríklad počítadlo otáčok pre navíjací stroj. A koniec koncov, počítadlo môže byť aj reverzibilné, aby ste to urobili, musíte najprv vytočiť číslo na displeji, napríklad počet otáčok cievky, a potom stlačiť tlačidlo „-“ a tlačidlo „1“ . Teraz, zakaždým, keď stlačíte „=“, číslo sa zníži o jednu.

Potrebný je však senzor. Najjednoduchšou možnosťou je jazýčkový spínač (obr. 1). Jazýčkový spínač pripojíme vodičmi paralelne k tlačidlu „=“, samotný jazýčkový spínač stojí na stacionárnej časti navíjacieho stroja a magnet upevníme na pohyblivú tak, aby pri jednej otáčke cievky magnet prešiel v blízkosti jazýčkového spínača, čo spôsobí jeho zatvorenie.

To je všetko. Musíte navinúť cievku, urobiť „1+“ a potom s každým otočením, to znamená, že s každým otočením sa hodnoty na displeji zvýšia o jednu. Musíte odvinúť cievku - zadajte počet otáčok cievky na displeji mikrokalkulačky a urobte „-1“, potom s každou otáčkou odvíjania cievky sa hodnoty na displeji znížia o jednu.

Obr.1. Schéma pripojenia jazýčkového spínača ku kalkulačke.

A predpokladajme, že potrebujete zmerať veľkú vzdialenosť, napríklad dĺžku cesty, veľkosť pozemku, dĺžku trasy. Berieme obyčajný bicykel. Správne - na vidlicu pripevníme nekovový držiak s jazýčkovým spínačom a magnet pripevníme na jeden z lúčov kolesa bicykla. Potom zmeriame obvod kolesa a vyjadríme ho v metroch, napríklad obvod kolesa je 1,45 metra, takže vytočíme „1,45+“, po ktorom sa s každou otáčkou kolesa hodnoty na displeji zvýšia o 1,45 metra a v dôsledku toho sa na displeji zobrazí vzdialenosť prejdená bicyklom v metroch.

Ak máte chybný čínsky kremenný budík (ich mechanizmus je zvyčajne málo odolný, ale elektronická doska je veľmi spoľahlivá), môžete z neho vybrať dosku a podľa obvodu znázorneného na obrázku 2 z nej vyrobiť stopky. to a kalkulačku.

Doska budíka je napájaná cez parametrický stabilizátor na LED HL1 (LED musí mať jednosmerné napätie 1,4-1,7V, napr. červená AL307) a rezistor R2.

Impulzy sú generované z riadiacich impulzov krokového motora hodinového mechanizmu (treba odpojiť cievky, doska sa používa samostatne). Tieto impulzy prechádzajú cez diódy VD1 a VD2 do bázy tranzistora VT1. Napájacie napätie dosky alarmu je len 1,6V, pričom úrovne impulzov na výstupoch pre krokový motor sú ešte nižšie.

Aby obvod správne fungoval, sú potrebné diódy s nízkou úrovňou priepustného napätia, ako je VAT85 alebo germánium.

Tieto impulzy prichádzajú do tranzistorového spínača na VT1 a VT2. Kolektorový obvod VT2 obsahuje vinutie nízkoenergetického relé K1, ktorého kontakty sú paralelne pripojené k tlačidlu „=“ mikrokalkulačky. Keď je napájanie +5V, kontakty relé K1 sa zatvoria pri frekvencii 1 Hz.

Ak chcete spustiť stopky, musíte najskôr vykonať akciu „1+“ a potom zapnúť napájanie obvodu tvarovača impulzov pomocou spínača S1. Teraz, s každou sekundou, sa hodnoty na displeji zvýšia o jednu.

Ak chcete zastaviť počítanie, jednoducho vypnite napájanie tvarovača impulzov pomocou spínača S1.

Aby ste mali odpočítavanie redukcie, musíte najprv zadať počiatočný počet sekúnd na displeji mikrokalkulačky a potom vykonať akciu „-1“ a zapnúť napájanie tvarovača impulzov prepínačom S1. Teraz sa s každou sekundou znížia hodnoty na displeji o jednu a z nich bude možné posúdiť, koľko času zostáva do určitej udalosti.

Obr.2. Schéma na premenu čínskeho vešiaka na stopky.

Obr.3. Schéma zapojenia počítadla priesečníkov IR lúčov pomocou kalkulačky.

Ak používate infračervený fotosenzor, ktorý pracuje na priesečníku lúča, môžete si mikrokalkulačku prispôsobiť na počítanie niektorých predmetov, napríklad škatúľ pohybujúcich sa po dopravnom páse, alebo inštaláciou senzora do uličky počítanie ľudí vstupujúcich do miestnosti. .

Schematický diagram IR reflexného snímača pre prácu s mikrokalkulátorom je znázornený na obrázku 3.

Generátor IR signálu je vyrobený na čipe A1 typu “555” (integrovaný časovač) Ide o generátor impulzov s frekvenciou 38 kHz, na výstupe ktorého je zapnutá infračervená LED. Frekvencia generovania závisí od obvodu C1-R1, pri nastavovaní výberom odporu R1 je potrebné nastaviť frekvenciu na výstupe mikroobvodu (pin 3) na hodnotu blízkou 38 kHz. LED HL1 je umiestnená na jednej strane priechodu, pričom je na ňu nasadená nepriehľadná trubica, ktorá musí byť presne nasmerovaná na fotodetektor.

Fotodetektor je vyrobený na čipe HF1 - ide o štandardný integrovaný fotodetektor typu TSOP4838 pre systémy diaľkového ovládania televízorov a iných domácich spotrebičov. Keď lúč z HL1 dopadne na tento fotodetektor, jeho výstup je nulový. Pri absencii lúča - jeden.

Medzi HL1 a HF1 teda nie je nič - kontakty relé K1 sú otvorené a v okamihu prechodu akéhokoľvek objektu sú kontakty relé zatvorené. Ak na mikrokalkulačke vykonáte akciu „1+“, potom pri každom prechode objektu medzi HL1 a HF1 sa hodnoty na displeji mikrokalkulačky zvýšia o jednu a z nich môžete posúdiť, koľko škatúľ bolo odoslaných alebo koľko ľudí vstúpilo. .

Kryukov M.B. RK-2016-01.

Rovnako ako žabky, počítadlá nemusia byť nevyhnutne zostavené ručne z logických prvkov - dnešný priemysel vyrába širokú škálu počítadiel už zmontovaných v mikroobvodových baleniach. V tomto článku sa nebudem zaoberať každým čipom počítadla samostatne (nie je to potrebné a zaberie to príliš veľa času), ale len stručne načrtnem, na čo sa môžete spoľahnúť pri riešení určitých problémov v digitálnych obvodoch. Pre tých, ktorí majú záujem o konkrétne typy počítadiel čipov, ich môžem poslať ani zďaleka kompletné príručka na čipoch TTL a CMOS.

Takže na základe skúseností získaných v predchádzajúcom rozhovore sme zistili jeden z hlavných parametrov počítadla - bitovú hĺbku. Aby počítadlo napočítalo až 16 (vrátane nuly - to je tiež číslo), potrebovali sme 4 číslice. Pridaním každej nasledujúcej číslice presne zdvojnásobíte možnosti počítadla. Päťbitové počítadlo teda dokáže napočítať až 32 a šesťbitové počítadlo až 64. Pre počítačovú techniku ​​je optimálna bitová hĺbka násobok štyroch. Nie je to zlaté pravidlo, ale stále väčšina čítačov, dekodérov, vyrovnávacích pamätí atď. sú zostavené štvorbitové (až 16) alebo osembitové (až 256).

Ale keďže digitálne obvody nie sú obmedzené len na počítače, často sa vyžadujú počítadlá s veľmi odlišnými koeficientmi počítania: 3, 10, 12, 6 atď. Napríklad na zostavenie obvodov pre počítadlá minút potrebujeme počítadlo 60 a je ľahké ho získať sériovým zapojením počítadla 10 a 6. Môžeme tiež potrebovať väčšiu kapacitu. Pre tieto prípady má napríklad séria CMOS pripravený 14-bitový čítač (K564IE16), ktorý pozostáva zo 14-tich D-klopných obvodov zapojených do série a každý výstup okrem 2. a 3. je pripojený na samostatný pin. Aplikujte impulzy na vstup, počítajte a v prípade potreby čítajte hodnoty počítadla v binárnych číslach:

K564IE16

Na uľahčenie konštrukcie počítadiel požadovanej kapacity môžu niektoré mikroobvody obsahovať niekoľko samostatných počítadiel. Poďme sa pozrieť na K155IE2 - BCD počítadlo(v ruštine – „počítadlo do 10, zobrazujúce informácie v binárnom kóde“):

Mikroobvod obsahuje 4 klopné obvody D a 1 klopný obvod (jednociferné počítadlo - delič po 2) je zostavený samostatne - má vlastný vstup (14) a vlastný výstup (12). Zvyšné 3 klopné obvody sú zostavené tak, že delia vstupnú frekvenciu 5. Pre nich je vstup pin 1, výstupy 9, 8,11. Ak potrebujeme počítadlo do 10, potom jednoducho spojíme kolíky 1 a 12, na kolíky 14 aplikujeme počítacie impulzy a z kolíkov 12, 9, 8, 11 odstránime binárny kód, ktorý sa zvýši na 10, potom počítadlá sa vynulujú a cyklus sa zopakuje. Kompozitné počítadlo K155IE2 nie je výnimkou. Podobné zloženie má napríklad K155IE4 (počítadlo až 2+6) alebo K155IE5 (počítadlo až 2+8):

Takmer všetky počítadlá majú vstupy na vynútený reset na „0“ a niektoré majú vstupy na ich nastavenie na maximálnu hodnotu. A na záver musím povedať, že niektoré počítadlá vedia počítať tam aj späť! Ide o takzvané reverzibilné počítadlá, ktoré môžu prepínať pre počítanie na zvýšenie (+1) aj zníženie (-1). Takže môže napr. BCD počítadlo hore/dole K155IE6:

Keď sú impulzy aplikované na vstup +1, počítadlo bude počítať dopredu, impulzy na vstupe -1 znížia hodnoty počítadla. Ak pri zvyšovaní hodnôt počítadlo pretečie (impulz 11), potom pred návratom na nulu vyšle „prenosový“ signál na kolík 12, ktorý možno použiť na ďalšie počítadlo, aby sa zvýšila kapacita. Kolík 13 má rovnaký účel, ale objaví sa na ňom impulz, keď počet prejde nulou pri počítaní v opačnom smere.

Upozorňujeme, že okrem resetovacích vstupov má mikroobvod K155IE6 vstupy na zapísanie ľubovoľného čísla (piny 15, 1, 10, 9). Stačí na tieto vstupy nastaviť ľubovoľné číslo 0 - 10 v binárnom zápise a priviesť na vstup C zapisovací impulz.

Elektrické počítadlá impulzov

Počítadlo je digitálne zariadenie, ktoré počíta počet elektrických impulzov. Konverzný faktor počítadla sa rovná minimálnemu počtu impulzov prijatých na vstupe počítadla, po ktorých sa stavy na výstupe počítadla začnú opakovať. Počítadlo sa nazýva sčítanie, ak sa po každom ďalšom impulze digitálny kód na výstupe počítadla zvýši o jednotku. V subtraktívnom čítači sa po každom impulze na vstupe čítača digitálny kód na výstupe zníži o jednotku. Počítadlá, v ktorých je možné prepnúť z režimu sčítania do režimu odčítania, sa nazývajú reverzibilné.

Počítadlá môžu byť predinštalované. V takýchto počítadlách sa informácie z prednastavených vstupov prenášajú na výstupy počítadiel signálom na špeciálnom prednastavenom vstupe. Podľa štruktúry sa počítadlá delia na sériové, paralelné a paralelne-sériové. Sériové binárne počítadlo je tvorené reťazou počítacích klopných obvodov zapojených do série. V paralelnom počítadle sú počítacie impulzy aplikované súčasne na vstupy všetky číslice počítadla. Paralelné počítadlá sú rýchlejšie ako sériové počítadlá. Paralelné sériové počítadlá majú vysokú rýchlosť a vysokú hodnotu zmena konverzného faktora.

Elektrické počítadlá impulzov sú dostupné v sérii TTL aj CMOS. Ako príklad počítadla TTL zvážte mikroobvod K155IE5. Funkčná schéma počítadla K155IE5 je znázornená na obrázku 1.51,a, a jeho symbol na schémach zapojenia je znázornený na obrázku 1.51,b. Počítadlo K155IE5 má vlastne dva čítače: s prevodným faktorom dva (vstup C0 a výstup Q 0) a s prevodným faktorom osem (vstup C1 a výstupy Q 1, Q 2, Q 3). Počítadlo s konverzným faktorom 16 sa ľahko získa pripojením výstupu Q0 na vstup C1 a impulzy sa privedú na vstup C0. Časový diagram činnosti takéhoto počítadla je znázornený na obrázku 1.52.

Obrázok 1.53 ukazuje schémy zapojenia, ktoré menia konverzný faktor merača K155IE5. Výstupy počítadla Q 0, Q 1, Q 2, Q 3 majú resp. váhové koeficienty 1, 2, 4, 8. Spojením výstupov Q 1, Q 2 so vstupmi pre nastavenie počítadla na nulu dostaneme počítadlo s prevodným faktorom šesť (obr. 1.53a). Obrázok 1.53, b zobrazuje schému zapojenia na získanie konverzného faktora desať a obrázok 1.53, c - dvanásť. V obvodoch znázornených na obrázkoch 1.53 a - c však nie je možné nastaviť počítadlá do nulového stavu.

Obrázky 1.54, a, b znázorňujú počítadlá s prevodnými faktormi šesť a sedem, v ktorých je poskytnutý vstup na nastavenie počítadla do nulového stavu. Analýza činnosti obvodov znázornených na obrázkoch 1.53 - 1.54 ukazuje, že na získanie daného konverzného faktora sú tie výstupy počítadla, ktorých váhové koeficienty sa sčítavajú s požadovaným konverzným faktorom, spojené so vstupmi logického prvku AND.

V tabuľke 1.3 sú uvedené stavy na výstupoch počítadla s konverzným faktorom desať po príchode každého ďalšieho impulzu a počítadlo bolo predtým nastavené na nulu.

Pozrime sa na niektoré počítadlá série CMOS. Obrázok 1.55 zobrazuje symbol pre mikroobvod K561IE8 - desiatkové počítadlo s dekodérom. Mikroobvod má vstup pre nastavenie do nulového stavu R, vstup pre privádzanie počítacích impulzov kladnej polarity CP a vstup pre dodáva počítacie impulzy so zápornou polaritou CN.

Počítadlo spína na základe poklesu impulzov kladnej polarity na vstupe CP, pričom na vstupe CN musí byť logická jednička. Počítadlo sa prepne na základe poklesu impulzov zápornej polarity na vstupe CN, ak je vstup CP logickou nulou. Jeden z desiatich výstupov počítadla má vždy logickú jednotku. Počítadlo sa nastaví na nulu, keď sa na vstup R privedie logická jednotka. Keď je počítadlo nastavené na nulu, výstup „0“ sa nastaví na logickú jednotku a všetky ostatné výstupy sa nastavia na logické nuly. Čipy K561IE8 je možné kombinovať do viacbitových čítačov so sériovým prenosom, čím sa výstup prenosu predchádzajúceho čipu pripojí k vstupu CN nasledujúceho. Obrázok 1.56 ukazuje schému viacbitového počítadla založeného na mikroobvodoch K561IE10.

Priemysel vyrába počítadlá pre elektronické hodinky. Pozrime sa na niektoré z nich. Obrázok 1.57 zobrazuje symbol pre mikroobvod K176IE3 a obrázok 1.58 zobrazuje mikroobvod K176IE4. Na týchto obrázkoch sú znázornené výstupy mikroobvodov pre štandardné označenie segmentu indikátora znázornené na obrázku 1.59. Tieto mikroobvody sa navzájom líšia konverzným faktorom. Konverzný faktor mikroobvodu K176IE3 je šesť a konverzný faktor čipu K176IE4 je desať. Nastavenie príslušných počítadiel na nulu sa vykonáva privedením signálu logickej jednotky na vstup R. K spínaniu spúšťačov počítadla dochádza pri poklese kladných impulzov na vstupe C. Mikroobvody majú nosný výstup p (pin 2), na ktorý je obvykle pripojený vstup nasledujúceho počítadla. Úbytok napätia na tomto výstupe vzniká v momente prechodu počítadla zo stavu 9 do stavu 0. Mikroobvody sa líšia signálmi na pine 3. Pre mikroobvod K176IE3 sa logická jednička objaví na pine 3, keď je počítadlo nastavené do stavu 2 a pre mikroobvod K176IE4 - do stavu 4. Toto je potrebné na resetovanie hodín po 24 hodinách.

Keď je na vstup S privedený signál logickej nuly, logické jednotky na výstupoch čítača budú na tých segmentoch, ktoré zobrazujú počet impulzov prijatých na vstupe čítača. Keď sa na vstup S použije logická jednotka, zmení sa polarita výstupných signálov. Možnosť prepínania polarity výstupných signálov značne uľahčuje zmenu schémy zapojenia digitálnych indikátorov.

Obrázok 1.60 znázorňuje schému pripojenia luminiscenčného indikátora k výstupom mikroobvodu K176IE4. Pripojenie indikátora k výstupom mikroobvodu K176IE3 bude podobné.

Schémy pripojenia LED indikátorov k výstupom mikroobvodu 176IE4 sú znázornené na obrázkoch 1.61a a 1.61b. Na vstupe S je nastavená logická nula pre indikátory so spoločnou katódou a logická pre indikátory so spoločnou anódou.

Popis mikroobvodov K176IE5, K176IE12, K176IE13, K176IE17, K176IE18, K176ID2, K176ID3 a ich použitie v elektronických hodinkách nájdete v. Mikroobvody K176IE12, K176IE13, K176IE17, K176IE18 umožňujú napájacie napätie od 3 do 15 V.

POČÍTAČ NA MIKROVLÁDAČI

Mnohé technické a automatizačné zariadenia majú stále nainštalované mechanické počítadlá. Počítajú počet návštevníkov, produkty na dopravnom páse, otáčky drôtu v navíjacích strojoch atď. Ak zlyhá, nie je ľahké nájsť takýto mechanický merač a nie je možné ho opraviť kvôli nedostatku náhradných dielov. Navrhujem nahradiť mechanické počítadlo elektronickým pomocou mikrokontroléra PIC16F628A.

Elektronické počítadlo sa ukáže ako príliš zložité, ak je postavené na mikroobvodoch série K176, K561. najmä ak je potrebný reverzný účet. Počítadlo však môžete postaviť iba na jednom čipe - univerzálnom mikrokontroléri PIC16F628A, ktorý obsahuje množstvo periférnych zariadení a je schopný riešiť širokú škálu problémov.

Nedávno ma teda jeden človek požiadal, aby som vyrobil viacmiestne počítadlo impulzov. Rozhodol som sa pre LED indikátory, pretože zaberajú veľa miesta a spotrebúvajú veľa energie. Preto som obvod implementoval na LCD. Počítadlo na mikrokontroléri môže merať vstupné impulzy až do 15 číslic. Prvé dve číslice sú oddelené bodkou. EEPROM nebola použitá, pretože nebolo potrebné pamätať si stav merača. Nechýba ani funkcia odpočítavania – spätný chod. Schematický diagram jednoduchého počítadla na mikrokontroléri:

Počítadlo je zostavené na dvoch doskách plošných spojov z fóliového sklolaminátu. Výkres je znázornený na obrázku.

Jedna z dosiek má LCD indikátor, druhá má 4 tlačidlá, ovládač a ostatné časti merača, s výnimkou napájacieho zdroja. Dosky a obvod počítadla si môžete stiahnuť vo formáte Lay, ako aj firmvér mikrokontroléra na fóre. Materiál poskytol Samopalkin.

Ak si všimnete chybu, vyberte časť textu a stlačte Ctrl+Enter
ZDIEĽAM:
Počítače a moderné prístroje