Аппараттық және бағдарламалық қамтамасыз етуді орнату

Өзіңіз жасайтын қарапайым импульс есептегіші. Дизайн кеңсесі онлайн

Микрокалькулятордың неліктен бар екенін бәрі біледі, бірақ ол математикалық есептеулерден басқа, әлдеқайда көп нәрсені жасай алады. «1» түймесін, содан кейін «+» түймесін басып, содан кейін «=» түймесін бассаңыз, «=» түймешігін әр басқан сайын дисплейдегі сан біреуге көбейетінін ескеріңіз. Неліктен цифрлық есептегіш емес?

«=» түймесіне екі сым дәнекерленген болса, олар есептегіш кіріс ретінде пайдаланылуы мүмкін, мысалы, орау машинасы үшін катушкалар есептегіші. Ақыр соңында, есептегіш те қайтымды болуы мүмкін, ол үшін алдымен дисплейдегі нөмірді теру керек, мысалы, катушканың айналымдарының санын, содан кейін «-» түймесін және «1» түймесін басыңыз. Енді «=» басқан сайын сан бір-біріне азаяды.

Дегенмен, сенсор қажет. Ең қарапайым опция - қамыс қосқышы (Cурет 1). Біз қамыс қосқышты «=» түймесіне параллель сымдармен қосамыз, қамыс қосқыштың өзі орау машинасының бекітілген бөлігінде тұр, ал магнитті жылжымалыға бекітеміз, осылайша орамның бір айналымында магнит қамыс қосқышының жанынан бір рет өтіп, оның жабылуына әкеледі.

Осымен болды. Орамды орау керек, «1+» жасаңыз, содан кейін әрбір айналымда, яғни әрбір бұрылыста дисплей көрсеткіштері бір есе артады. Орамды босату керек, - біз микрокалькулятордың дисплейіне катушканың айналу санын тереміз және «-1» жасаймыз, содан кейін орамның әр айналымы кезінде дисплей көрсеткіштері бір-біріне азаяды.

1-сурет. Құрақ қосқышты калькуляторға қосу схемасы.

Және үлкен қашықтықты өлшеу керек делік, мысалы, жолдың ұзындығын, жердің көлемін, маршруттың ұзындығын. Біз кәдімгі велосипедпен жүреміз. Дұрыс - біз шанышқыдағы қамыс қосқышы бар металл емес кронштейнді бекітеміз, ал магнитті велосипед дөңгелегі спицтерінің біріне бекітеміз. Содан кейін біз дөңгелектің шеңберін өлшейміз және метрмен көрсетеміз, мысалы, дөңгелектің шеңбері 1,45 метр, сондықтан біз «1,45+» деп тереміз, содан кейін дисплей дөңгелектің әрбір айналымымен 1,45 метрге артады. , және нәтижесінде дисплейде велосипед жүріп өткен қашықтық метрлермен көрсетіледі.

Егер ақаулы қытайлық кварцтық оятқыш болса (әдетте олардың механизмі өте берік емес, бірақ электронды тақтаөте сенімді), одан тақтаны алуға және 2-суретте көрсетілген схемаға сәйкес одан секундомер мен калькулятор жасауға болады.

Оятқыш тақтаға қуат HL1 жарықдиодты шамындағы параметрлік тұрақтандырғыш (жарық диоды 1,4-1,7 В тікелей кернеуде болуы керек, мысалы, қызыл AL307) және R2 резисторы арқылы беріледі.

Импульстар сағат механизмінің қадамдық қозғалтқышының басқару импульстарынан жасалады (катушкалар ажыратылуы керек, тақта дербес пайдаланылады). Бұл импульстар VD1 және VD2 диодтары арқылы VT1 транзисторының негізіне беріледі. Оятқыш тақтасының қоректендіру кернеуі бар болғаны 1,6 В, ал қадамдық қозғалтқыштың шығысындағы импульстік деңгейлер одан да төмен.

Схема дұрыс жұмыс істеуі үшін BAT85 немесе германий сияқты төмен алға кернеулі диодтар қажет.

Бұл импульстар барады транзисторлық кілт VT1 және VT2 бойынша. VT2 коллекторлық тізбегінде контактілері микрокалькулятордың «=» батырмасымен параллель жалғанған аз қуатты релесі K1 орамасы енгізілген. +5В қуат болған кезде K1 релелік контактілері 1 Гц жиілікте жабылады.

Секундомерді іске қосу үшін алдымен «1+» әрекетін орындау керек, содан кейін S1 қосқышы арқылы импульсті қалыптастырушы тізбегінің қуатын қосыңыз. Енді секунд сайын дисплей бір-біріне артады.

Санауды тоқтату үшін S1 қосқышы арқылы импульсті қалыптастыру құрылғысының қуатын өшіріңіз.

Азайту үшін есептік жазба болуы үшін алдымен микрокалькулятор дисплейінде секундтардың бастапқы санын теру керек, содан кейін «-1» әрекетін орындап, S1 қосқышы арқылы импульсті пішіндеу құралының қуатын қосу керек. Енді секунд сайын дисплей көрсеткіштері бір-біріне азаяды және олардан қандай да бір оқиғаға қанша уақыт қалғанын анықтауға болады.

2-сурет. Қытайлық бодульникті секундомерге айналдыру схемасы.

3-сурет. Калькулятордың көмегімен инфрақызыл сәуленің қиылысу есептегішінің диаграммасы.

Егер сіз сәуленің қиылысында жұмыс істейтін инфрақызыл фотосенсорды пайдалансаңыз, микрокалькуляторды кейбір объектілерді санауға бейімдей аласыз, мысалы, конвейер лентасының бойымен қозғалатын қораптар немесе сенсорды дәлізге орнату арқылы бөлмеге кірген адамдарды санауға болады. .

Микрокалькулятормен жұмыс істеуге арналған ИҚ шағылыстыру сенсорының принципиалды схемасы 3-суретте көрсетілген.

Инфрақызыл сигнал генераторы 555 типті A1 чипінде (біріктірілген таймер) жасалған.Бұл 38 кГц импульстік генератор, оның шығысында перне арқылы инфрақызыл жарықдиодты шам қосылады. Генерация жиілігі C1-R1 тізбегіне байланысты, R1 резисторын таңдауды реттеу кезінде микросұлбаның шығысын (3-ші түйреуіш) 38 кГц-ке жақын жиілікке орнату керек. Жарық диодты HL1 өткелдің бір жағына орналастырылады, оған мөлдір емес түтік салынады, ол дәл фотодетекторға бағытталуы керек.

Фотодетектор HF1 чипінде жасалған - бұл жүйелер үшін TSOP4838 типті стандартты біріктірілген фотодетектор. қашықтықтан басқарутеледидарлар және басқа да тұрмыстық техника. HL1 сәулесі осы фотодетекторға түскенде, оның шығысы нөлге тең болады. Бөрене, бірлік болмаған жағдайда.

Осылайша, HL1 және HF1 арасында ештеңе жоқ - K1 релесінің контактілері ашық, ал объектіні өту сәтінде реле контактілері жабық. Егер сіз калькуляторда «1+» әрекетін орындасаңыз, онда нысанның HL1 және HF1 арасындағы әрбір өтуімен калькулятордың дисплей көрсеткіштері бір-біріне артады және олардан қанша қорап болғанын анықтауға болады. жөнелтілді немесе қанша адам кірді.

Крюков М.Б. ҚР-2016-01.

Импульстік есептегішбірізділік болып табылады сандық құрылғы, ақпарат сөзін сақтауды және ол бойынша санауыштағы санның мәнін 1-ге өзгертуден тұратын санау микрооперациясын орындауды қамтамасыз етеді. Негізінде санауыш белгілі бір жолмен қосылған триггерлер жиынтығы болып табылады. . Есептегіштің негізгі параметрі санау модулі болып табылады. Бұл санауыш санауға болатын жалғыз сигналдардың максималды саны. Есептегіштер ST арқылы белгіленеді (ағылшынша санауыштан).

Импульстік есептегіштер жіктеледі

● модульдер саны:
. екілік ондық;
. екілік;
. шоттың ерікті тұрақты модулімен;
. айнымалы санау модулімен;
. есеп бағыты бойынша:
. жинақтау;
. шегерім;
. қайтымды;
● ішкі сілтемелерді құру әдісі бойынша:
. дәйекті тасымалдаумен;
. параллель тасымалдаумен;
. аралас аударыммен;
. сақина.

Тотализациялық импульстік есептегіш

Қосынды санауышын қарастырайық (3.67-сурет, бірақ). Мұндай есептегіш екі кірісте де логикалық «1» сигналы болса, синхрондау кірістерінде теріс кернеудің төмендеуі пайда болған кезде ауысатын төрт JK флип-флопқа салынған.

Есептегіштің жұмысын бейнелейтін уақыт диаграммалары күріште көрсетілген. 3.67, б. To si арқылы есептің модулі (импульстарды есепке алу коэффициенті) белгіленеді. Сол жақ триггердің күйі екілік санның ең аз мәнді разрядына, ал оң жағындағы ең маңызды цифрға сәйкес келеді. Бастапқы күйде барлық триггерлер логикалық нөлдерге орнатылады. Әрбір триггер өз күйін кернеудің теріс төмендеуі оған әсер еткен кезде ғана өзгертеді.

Осылайша, бұл есептегіш кіріс импульстерінің қосындысын жүзеге асырады. Уақыт диаграммаларынан әрбір келесі импульстің жиілігі алдыңғысынан екі есе аз екенін көруге болады, яғни әрбір триггер кіріс сигналының жиілігін екіге бөледі, ол жиілік бөлгіштерде қолданылады.

Тізбекті тасымалдауы бар үш таңбалы азайту санауы

Тізбекті тасымалдауы бар үш таңбалы субтрактивті есептегішті қарастырайық, оның схемасы және уақыт диаграммасы 2-суретте көрсетілген. 3.68.
(xtypo_quote)Санағыш үш JK-флип-флопты пайдаланады, олардың әрқайсысы T-flip-flop режимінде жұмыс істейді (санауыш кірісі бар флип-флоп).(/xtypo_quote)

Логика 1s әрбір триггердің J және K кірістеріне қолданылады, сондықтан оның синхрондау кірісіне C қолданылатын импульстің соңғы жиегі келген кезде әрбір триггер алдыңғы күйді өзгертеді. Бастапқыда барлық триггерлердің шығысындағы сигналдар 1-ге тең.Бұл санауышта екілік сан 111 немесе 7 ондық санды сақтауға сәйкес келеді.Бірінші импульс F аяқталғаннан кейін бірінші триггер күйін өзгертеді: Q сигналы 1 0-ге тең болады, a ¯ Q 1 − 1.

Басқа триггерлер олардың күйін өзгертпейді. Екінші синхрондау импульсі аяқталғаннан кейін бірінші триггер өзінің күйін қайтадан өзгертеді, 1, (Q x = 0) күйіне өтеді. Бұл екінші флип-флоп күйінің өзгеруін қамтамасыз етеді (екінші флип-флоп екінші синхрондау импульсінің аяқталуына қатысты біршама кідіріспен күйін өзгертеді, өйткені оның аударылуы өзінің жұмыс уақытына сәйкес уақытты қажет етеді және бірінші триггер).

Бірінші импульс F кейін санауыш 11О күйін сақтайды. Есептегіш күйінің одан әрі өзгеруі жоғарыда сипатталғанға ұқсас болады. 000 күйінен кейін санауыш 111 күйіне оралады.

Тізбекті тасымалдауы бар үш таңбалы өздігінен тоқтайтын азайту санауы

Тізбекті тасымалдауы бар үш таңбалы өздігінен тоқтайтын азайтуды санауды қарастырайық (3.69-сурет).

Есептегіш 000 күйіне өткеннен кейін барлық триггерлердің шығыстарында логикалық 0 сигналы пайда болады, ол логикалық НЕМЕСЕ элементі арқылы бірінші триггердің J және K кірістеріне беріледі, содан кейін бұл триггер Т-триггер режимінен шығады және импульстарға жауап беруді тоқтатады F.

Тізбекті тасымалдауы бар үш таңбалы жоғары/төмен есептегіш

Тізбекті тасымалдауы бар үш таңбалы қайтымды санағышты қарастырайық (3.70-сурет).

Алып тастау режимінде кіріс сигналдары T кірісіне қолданылуы керек. Бұл кезде T c кірісіне логикалық 0 сигналы беріледі.Барлық триггерлер 111 күйінде болсын. Бірінші сигнал T кірісіне келгенде, бірінші триггердің T кірісінде логикалық 1 пайда болады және күйін өзгертеді. Осыдан кейін оның кері кірісінде логикалық 1 сигналы пайда болады.Т кірісіне екінші импульс келгенде, екінші триггердің кірісінде логикалық 1 пайда болады, сондықтан екінші триггер өз күйін өзгертеді (бірінші триггер де екінші импульс келген кезде оның күйін өзгерту). Әрі қарай күй өзгерістері осыған ұқсас жолмен жүреді. Қосу режимінде есептегіш 4-биттік тотализаторға ұқсас жұмыс істейді. Бұл жағдайда сигнал T кірісіне қолданылады. T кірісіне логикалық 0 қолданылады.
Мысал ретінде 155 сериясының (TTL) параллель тасымалдануы бар реверсивті есептегіштердің (3.71-сурет) микросұлбаларын қарастырайық:
● IE6 – BCD реверсивті санауышы;
● IE7 – екілік қайтымды санауыш.

Санақ бағыты импульстар қай шығысқа (5 ​​немесе 4) қолданылатынымен анықталады. 1, 9, 10, 15 кірістер ақпараттық болып табылады, ал 11 кіріс алдын ала жазу үшін пайдаланылады. Бұл 5 кіріс есептегішті (алдын ала орнатылған) алдын ала жазуға мүмкіндік береді. Ол үшін ақпараттық кірістерге сәйкес деректерді қолдану керек, содан кейін 11 кіріске төмен деңгейлі жазу импульсін қолдану керек, ал санауыш нөмірді есте сақтайды. Кіріс 14 - қолдану кезінде O қондырғысын енгізу жоғары деңгейВольтаж. Сыйымдылығы жоғары есептегіштерді құру үшін тура және кері тасымалдау шығыстары қолданылады (тиісінше 12 және 13 түйреуіштер). 12 істікшеден сигнал келесі кезеңнің тура санау кірісіне, ал 13 істікшеден кері санау кірісіне берілуі керек.

Триггерлер сияқты, есептегіштердің де құрамдас болуы міндетті емес логикалық элементтерқолмен - бүгінгі өнеркәсіп микросұлба пакеттерінде жинақталған есептегіштердің кең ауқымын шығарады. Бұл мақалада мен әрбір есептегіш чипке жеке тоқталмаймын (бұл қажет емес және бұл тым көп уақытты алады), бірақ мен белгілі бір сандық схема мәселелерін шешу кезінде не нәрсеге сенуге болатынын қысқаша талқылаймын. Есептегіш чиптердің нақты түрлеріне қызығушылық танытқандар, мен толық емес менің алыс жібере аламын анықтамалық TTL және CMOS чиптері үшін.

Сонымен, алдыңғы әңгімеде жинақталған тәжірибеге сүйене отырып, біз есептегіштің негізгі параметрлерінің бірі - сыйымдылықты анықтадық. Есептегіш 16-ға дейін санауы үшін (оның ішінде нөл, бұл да сан) бізге 4 сан қажет болды. Әрбір келесі цифрды қосу есептегіштің мүмкіндіктерін дәл екі есе арттырады. Осылайша, бес таңбалы санауыш 32-ге дейін, алтыға дейін - 64-ке дейін санай алады Информатикаоңтайлы бит тереңдігі төртке еселік. Бұл алтын ереже емес, бірақ бәрібір көптеген есептегіштер, декодерлер, буферлер және т.б. төрт (16-ға дейін) немесе сегіз-разрядты (256-ға дейін) құрастырылған.

Бірақ цифрлық схема тек компьютерлермен ғана шектелмейтіндіктен, сан алуан факторлары бар есептегіштер жиі қажет: 3, 10, 12, 6 және т.б. Мысалы, минуттық санауыш тізбектерін құру үшін бізге 60-қа есептегіш қажет, оны 10-ға есептегішті және 6-ға есептегішті тізбектей қосу арқылы алу оңай.Сондай-ақ бізге үлкенірек бит тереңдігі қажет болуы мүмкін. Бұл жағдайлар үшін, мысалы, CMOS сериясында дайын 14-разрядты есептегіш (K564IE16) бар, ол тізбектей қосылған 14 D-флип-флоптан тұрады және 2-ші және 3-шіден басқа әрбір шығыс қосылған. бөлек түйреуішке. Кіріске импульстарды қолданыңыз, қажет болған жағдайда есептегіш көрсеткіштерін санаңыз және оқыңыз екілік санау:

K564IE16

Қажетті сыйымдылықтағы есептегіштердің құрылысын жеңілдету үшін кейбір микросұлбаларда бірнеше бөлек есептегіштер болуы мүмкін. K155IE2-ді қарастырайық - екілік ондық санауыш(орыс тілінде - «10-ға дейінгі санауыш, ақпаратты екілік кодта көрсету»):

Микросұлбада 4 D-флип-флоп бар, ал 1 флип-флоп (бір таңбалы санауыш - 2-ге бөлгіш) бөлек жинақталған - оның өзіндік кірісі (14) және өзіндік шығысы (12) бар. Қалған 3 триггер кіріс жиілігін 5-ке бөлетіндей етіп жинақталған.Олар үшін кіріс 1 шығыс, 9, 8.11 шығыстары болып табылады. Егер бізге 10-ға дейінгі санауыш қажет болса, онда біз жай ғана 1 және 12 түйреуіштерді қосамыз, 14 істікшеге санау импульстерін қолданамыз және 12, 9, 8, 11 түйреуіштерден екілік кодты алып тастаймыз, олар 10-ға дейін артады, содан кейін есептегіштер нөлге қалпына келтіріледі және цикл қайталанады. Композиттік есептегіш K155IE2 ерекшелік емес. Ұқсас композицияда, мысалы, K155IE4 (2 + 6-ға дейін санауыш) немесе K155IE5 (2 + 8-ге дейін санауыш) бар:

Барлық дерлік есептегіштерде мәжбүрлі түрде «0» қалпына келтіру үшін кірістер бар, ал кейбіреулерінде максималды мәнге орнату үшін кірістер бар. Ақырында, кейбір есептегіштер алға-артқа санай алатынын айтқым келеді! Бұл кері санауыштар деп аталады, оларды көбейтуге (+1) және азайтуға (-1) қосуға болады. Ол, мысалы, BCD жоғары/төмен санағыш K155IE6:

Импульстар +1 кірісіне қолданылғанда, санауыш алға қарай санайды, -1 кірісіндегі импульстар санауыш көрсеткішін азайтады. Егер көрсеткіштер ұлғайған сайын санауыш толып кетсе (импульс 11), онда нөлге оралмас бұрын ол 12 түйреуішке «тасымалдау» сигналын береді, оны разряд тереңдігін арттыру үшін келесі есептегішке қолдануға болады. 13 түйреуіштің мақсаты бірдей, бірақ қарама-қарсы бағытта санау кезінде санауды нөлге ауыстыру кезінде импульс пайда болады.

Қалпына келтіру кірістерінен басқа, K155IE6 чипінде оған ерікті санды жазуға арналған кірістер бар екенін ескеріңіз (15, 1, 10, 9 түйреуіштер). Ол үшін осы кірістерді екілік мәнде кез келген 0 - 10 санына орнатыңыз және C кірісіне жазу импульсін қолданыңыз.

Жұмыс принципі

Бастапқы күй ретінде барлық триггер шығыстарында (Q 1 - Q 3) нөлдік деңгей қабылданды, яғни цифрлық код 000. Бұл жағдайда ең жоғары бит Q 3 шығысы болып табылады. Барлық флип-флоптарды нөлдік күйге ауыстыру үшін R флип-флоптарының кірістері біріктіріліп, оларға қажетті кернеу деңгейі қолданылады (яғни, флип-флоптарды қалпына келтіретін импульс). Негізінде бұл қалпына келтіру. С кірісіне сағаттық импульстар келіп түседі, олар цифрлық кодты бір көбейтеді, яғни бірінші импульс келгеннен кейін бірінші триггер 1 күйге ауысады (код 001), екінші импульс келгеннен кейін екінші триггер ауысады. күй 1, ал бірінші күй 0 (код 010), содан кейін үшінші және т.б.. Нәтижесінде мұндай құрылғы 7-ге дейін санай алады (код 111), өйткені 2 3 - 1 \u003d 7. Барлық триггер шығыстары кезде біреуіне орнатылған, есептегіш толып жатыр дейді. Келесі (тоғызыншы) импульс келгеннен кейін есептегіш қалпына келтіріліп, бәрі басынан басталады. Диаграммаларда триггерлер күйлерінің өзгеруі t z кідірісімен болады. Үшінші разрядта кідіріс қазірдің өзінде үш есеге артты. Цифрлар саны артқан сайын артатын кідіріс сериялық тасымалдау есептегіштерінің кемшілігі болып табылады, бұл олардың қарапайымдылығына қарамастан, цифрлар саны аз құрылғыларда пайдалануды шектейді.

Есептегіштердің классификациясы

Есептегіштер – олардың кірісінде қабылданатын импульстердің (командалардың) санын санауға, санау нәтижесін сақтауға және сақтауға және осы нәтижені беруге арналған құрылғылар. Есептегіштің негізгі параметрі санау модулі (сыйымдылығы) Кс. Бұл мән санауыштың тұрақты күйлерінің санына тең. Импульстар Kc келгеннен кейін санауыш қайтады бастапқы күй. Екілік санауыштар үшін Kc = 2 м, мұндағы m - санауыш цифрларының саны.

Kc қоспағанда маңызды сипаттамаларсанауыш санауыш жылдамдығын сипаттайтын максималды санақ жиілігі fmax және реттеу уақытының цеті болып табылады.

Tust – есептегішті жаңа күйге ауыстырудың өтпелі процесінің ұзақтығы: tset = mttr, мұндағы m – цифрлар саны, ал ttr – триггердің ауысу уақыты.

Fmax – импульстердің жоғалуы болмайтын кіріс импульстерінің максималды жиілігі.

Операция түрі бойынша:

- Қорытындылай келе;

- азайтқыштар;

- Қайтымды.

Қосынды санауышында әрбір кіріс импульсінің келуі санау нәтижесін бір көбейтеді, шегеретін есептегіште оны бір азайтады; кері санауыштарда қосу да, азайту да болуы мүмкін.

Құрылымдық ұйым бойынша:

- дәйекті;

- параллель;

- қатар-параллель.

Сериялық есептегіште кіріс импульсі тек бірінші цифрдың кірісіне беріледі, алдыңғы санның шығыс импульсі әрбір келесі цифрдың кірісіне беріледі.

Параллель есептегіште келесі санау импульсінің келуімен жаңа күйге өту кезінде триггерлердің ауысуы бір мезгілде орын алады.

Тізбекті-параллельді схема алдыңғы нұсқалардың екеуін де қамтиды.

Күйлердің өзгеру реті бойынша:

- табиғи санау ретімен;

- санаудың ерікті ретімен.

Санақ модулі:

– екілік;

- екілік емес.

Екілік санауыштың санау модулі Kc=2, ал екілік емес санауыштың санау модулі Kc=2m, мұндағы m - санауыштың цифрларының саны.

Жиынтық санауыш

1-сурет. Тізбектелген 3 таңбалы санауыштың қосындысы.

Бұл санауыштың триггерлері санау импульсінің соңғы жиегінде іске қосылады. Есептегіштің ең маңызды битінің кірісі ең аз маңызды көрші биттің тікелей шығысына (Q) қосылады. Мұндай санауыш жұмысының уақыттық диаграммасы 2-суретте көрсетілген. Уақыттың бастапқы сәтінде барлық флип-флоптардың күйлері сәйкесінше олардың тікелей шығыстарында log.0-ге тең. Бұған log.0 триггерлерінің асинхронды орнатуының кірістеріне қолданылатын қысқа мерзімді журнал арқылы қол жеткізіледі. Есептегіштің жалпы күйін сипаттауға болады екілік сан(000). Log.1 санау кезінде log.1 триггерлерінің асинхронды параметрінің кірістерінде сақталады. Бірінші импульстің артқы жиегі келгеннен кейін 0-разряд қарама-қарсы күйге ауысады - log.1. 1-биттің кірісінде санау импульсінің алдыңғы шеті пайда болады. Есептегіш күйі (001). Екінші импульстің артқы жиегі санауыштың кірісіне келгеннен кейін 0-разряд қарама-қарсы күйге ауысады - log.0, 1-разрядтың кірісінде санау импульсінің соңғы жиегі пайда болады, ол 1-ді ауыстырады. -логқа бит.1. Есептегіштің жалпы күйі (010). 0 цифрының кірісіндегі келесі соңғы жиек оны журналға орнатады.1 (011), т.б. Осылайша, есептегіш оның кірісіне келетін кіріс импульстерінің санын жинақтайды. Оның кірісіне 8 импульс келгенде, санауыш бастапқы күйіне (000) оралады, яғни бұл санауыштың санау коэффициенті (CSC) 8-ге тең.

Күріш. 2. Тізбекті жиынтық санағыштың уақыт диаграммасы.

Субтрактивті тізбекті санауыш

Бұл есептегіш құлап жатқан жиекте іске қосылады. Алу операциясын жүзеге асыру үшін ең маңызды разрядтың санау кірісі көршілес ең аз мәнді разрядтың кері шығысына қосылады. Бұрын триггерлер log.1 (111) күйіне орнатылған. Бұл есептегіштің жұмысы күріштегі уақыт диаграммасымен көрсетілген. 4.

Күріш. 1 Тізбекті азайту есептегіші

Күріш. 2 Тізбекті азайтқыштың уақыт диаграммасы

Қайтымды ретті санауыш

Қайтымды санағышты жүзеге асыру үшін қосынды санағыштың функцияларын және азайту санауышының функцияларын біріктіру қажет. Бұл есептегіштің схемасы күріште көрсетілген. 5. Санау режимін басқару үшін «қосынды» және «айырма» сигналдары қолданылады. Қосындылау режимі үшін "сома"=лог.1, "0"-қысқа мерзімді журнал.0; "айырмашылық"=лог.0, "1"-қысқа мерзімді журнал.0. Бұл жағдайда DD4.1 және DD4.3 элементтері DD1.2, DD2.1 триггерлерінің тактілік кірістерін DD5.1 ​​және DD5.2 элементтері арқылы триггерлердің тікелей шығыстарынан сигналдарды беруге мүмкіндік береді. тиісінше DD1.1, DD1.2. Бұл жағдайда DD4.2 және DD4.4 элементтері жабық, олардың шығыстарында лог.0 бар, сондықтан кері шығыстардың әрекеті DD1.2, DD2.1 триггерлерінің есептеу кірістеріне әсер етпейді. Осылайша, жинақтау операциясы жүзеге асырылады. Алу операциясын жүзеге асыру үшін «қосынды» кірісіне log.0, ал «айырма» кірісіне log.1 беріледі. Бұл жағдайда DD4.2, DD4.4 элементтері DD5.1, DD5.2 элементтерінің кірістерін және тиісінше DD1.2, DD2.1 триггерлерінің санау кірістерін, сигналдарды беруге мүмкіндік береді. DD1.1, DD1.2 триггерлерінің кері шығыстарынан. Бұл жағдайда DD4.1, DD4.3 элементтері жабылады және DD1.1, DD1.2 триггерлерінің тікелей шығыстарынан сигналдар DD1.2, DD2.1 триггерлерінің санау кірістеріне әсер етпейді. Осылайша, азайту операциясы жүзеге асырылады.

Күріш. 3 Сериялық қайтымды 3 таңбалы санауыш

Осы санауыштарды іске асыру үшін импульстарды санау алдыңғы жиегінде жұмыс істейтін триггерлерді де пайдалануға болады. Содан кейін, ең маңызды разрядты санау кірісіне қосқанда, көршілес ең аз мәнді разрядтың кері шығысынан сигнал беру керек, ал азайту кезінде, керісінше, санау кірісін тікелей шығысқа қосу керек.

Тізбекті санауыштың кемшілігі сыйымдылықтың ұлғаюымен осы есептегішті орнату уақыты (цет) пропорционалды түрде артады. Артықшылығы - іске асырудың қарапайымдылығы.

Күріш. 3 - қайтымды есептегіш

Импульстарды санау үшін екі кіріс бар: «+1» – арттыру үшін, «-1» – азайту үшін. Сәйкес кіріс (+1 немесе -1) C кірісіне қосылған. Мұны НЕМЕСЕ схемасы арқылы жасауға болады, егер сіз оны бірінші триггердің алдына жабыстырсаңыз (элемент шығысы бірінші триггердің кірісіне, +1 және -1 автобустарының кірістері). Триггерлер (DD2 және DD4) арасындағы түсініксіз қоқыс ЖӘНЕ-НЕМЕСЕ элементі деп аталады. Бұл элемент бір бумада біріктірілген екі ЖӘНЕ элементінен және бір НЕМЕСЕ элементінен тұрады. Алдымен осы элементтегі кіріс сигналдары логикалық түрде көбейтіледі, содан кейін нәтиже логикалық түрде қосылады.

ЖӘНЕ-НЕМЕСЕ элементінің кірістерінің саны цифрлық санға сәйкес келеді, яғни үшінші цифр болса, онда үш кіріс, төртінші - төрт және т.б. Логикалық диаграммаалдыңғы триггердің тікелей немесе кері шығысымен басқарылатын екі позициялы қосқыш. Журналда. Тікелей шығыста 1 есептегіш журналмен «+1» шинасынан импульстарды санайды (егер олар, әрине, келсе). 1 инверттелген шығыста - «-1» шинасында. ЖӘНЕ (DD6.1 және DD6.2) элементтері тасымалдау сигналдарын құрайды. > 7 шығысында сигнал 111 кодымен (7 саны) және шығыста +1 шинасында тактілік импульстің болуымен жасалады.<0 сигнал формируется при коде 000 и наличии тактового импульса на шине -1.

Мұның бәрі, әрине, қызықты, бірақ ол микросхема дизайнында әдемірек көрінеді:

Күріш. 4 Төрт таңбалы екілік санауыш

Мұнда әдеттегі алдын ала орнатылған есептегіш бар. CT2 санауыштың екілік екенін білдіреді, ондық болса, онда CT10 орнатылады, екілік ондық болса - CT2 / 10. D0 - D3 кірістері ақпараттық кірістер деп аталады және кез келген екілік күйді санауышқа жазу үшін қолданылады. Бұл күй оның шығыстарында көрсетіледі және одан сілтеме жасалады. Басқаша айтқанда, бұл алдын ала орнатылған немесе жай ғана алдын ала орнатылған кірістер. V кірісі D0 - D3 кірістерінде кодты жазуды қосу үшін немесе олар айтқандай, алдын ала орнатуды қосу үшін қолданылады. Бұл кірісті басқа әріптермен белгілеуге болады. Есептегішке алдын ала жазу импульс C кірісіне келген сәтте жазуды қосу сигналы қолданылған кезде орындалады. C кірісі сағатталған. Бұл жерде импульстар енеді. Үшбұрыш санауыш импульстің түсуінен іске қосылатынын білдіреді. Егер үшбұрыш 180 градусқа бұрылса, яғни артқы жағымен С әрпіне қарай бұрылса, онда ол импульстің шетіне атылады. R кірісі есептегішті қалпына келтіру үшін қызмет етеді, яғни осы кіріске импульс қолданылғанда, барлық есептегіш шығыстарында журнал орнатылады. 0. PI кірісі тасымалдау кірісі деп аталады. p шығысы тасымалдау шығысы деп аталады. Бұл шығыста санауыш толып кеткен кезде сигнал жасалады (барлық шығыстар журналға орнатылғанда. 1). Бұл сигнал келесі есептегіштің тасымалдау кірісіне қолданылуы мүмкін. Содан кейін бірінші есептегіш толып кеткенде, екіншісі келесі күйге ауысады. 1, 2, 4, 8 шығыстары жай ғана шығыстар. Олар санауыштың кірісінде қабылданған импульстар санына сәйкес екілік кодты құрайды. Егер қорытындылар әлдеқайда жиі болатын шеңберлермен болса, онда олар кері, яғни журналдың орнына. 1 тіркелді. 0 және керісінше. Есептегіштердің басқа құрылғылармен бірге жұмыс істеуі кейінірек толығырақ қарастырылады.

Параллель тотализатор

Бұл санағыштың жұмыс істеу принципі мынада: санау импульстері бар кіріс сигналы осы санауыштың барлық цифрларына бір уақытта қолданылады. Ал есептегішті лог.0 немесе лог.1 күйіне қою басқару схемасымен басқарылады. Бұл санауыштың сұлбасы 6-суретте көрсетілген

Күріш. 4 Параллельді жинақтау есептегіші

Есептегіштің цифрлары DD1, DD2, DD3 триггерлері болып табылады.

Басқару схемасы - элемент DD4.

Бұл есептегіштің артықшылығы санауыштың разрядтық тереңдігіне байланысты емес, орнатудың қысқа уақыты болып табылады.

Кемшілігі санауыштың разрядтық тереңдігін арттыру кезіндегі схеманың күрделілігі болып табылады.

Параллель тасымалдау есептегіштері

Өнімділікті жақсарту үшін барлық биттерге тасымалдау сигналын бір уақытта генерациялау әдісі қолданылады. Бұған ЖӘНЕ элементтерін енгізу арқылы қол жеткізіледі, олар арқылы тактілік импульстар барлық есептегіш биттердің кірістеріне дереу беріледі.

Күріш. 2 - Параллель тасымалдауы бар санауыш және оның жұмысын түсіндіретін графиктер

Бірінші триггермен бәрі түсінікті. Сағат импульсі екінші триггердің кірісіне бірінші триггердің шығысында журнал болған кезде ғана өтеді. 1 (AND схемасының ерекшелігі), ал үшіншісінің кірісіне - алғашқы екеуінің шығыстары журнал болған кезде. 1 және т.б. Үшінші триггердегі кідіріс біріншідегімен бірдей. Мұндай санауыш параллель тасымалдау есептегіші деп аталады. Диаграммадан көрініп тұрғандай, бит санының ұлғаюымен журналдар саны да артады. ЖӘНЕ элементтері және цифр неғұрлым жоғары болса, элементте соғұрлым көп кіріс болады. Бұл мұндай есептегіштердің кемшілігі.

Тұжырымдаманы әзірлеу

Импульсті қалыптастырушы

Импульстік пішіндеу құрылғысы механикалық контактілерді жабу кезінде пайда болатын контактілердің серпілісін жою үшін қажет құрылғы, бұл тізбектің дұрыс жұмыс істемеуіне әкелуі мүмкін.

9-суретте механикалық контактілерден импульсті пішіндеуіштердің диаграммалары көрсетілген.

Күріш. 9 Механикалық контактілерден импульсті пішіндеуіштер.

Көрсету блогы

Санақ нәтижесін көрсету үшін жарық диодтарын пайдалану керек. Ақпараттың осындай қорытындысын жасау үшін сіз қарапайым схеманы пайдалана аласыз. Жарықдиодтардағы индикаторлар блогының диаграммасы 10-суретте көрсетілген.

Күріш. 10 LED дисплей блогы.

ҚМУ әзірлеу (комбинациялық басқару схемасы)

K555 микросұлбаларының TTLSH сериясынан осы есептегішті енгізу үшін мен таңдадым:

екі K555TV9 чиптері (орнатылған 2 JK флип-флоп)

бір чип K555LA4 (3 элемент 3I-ЕМЕС)

екі K555LA3 микросұлбалары (4 элемент 2I-NOT)

бір чип K555LN1 (6 инвертор)

Бұл микросұлбалар баспа платасындағы пакеттердің ең аз санын қамтамасыз етеді.

Есептегіштің құрылымдық сұлбасын құрастыру

Құрылымдық диаграмма – қандай да бір функцияларды орындайтын және санауыштың қалыпты жұмысын қамтамасыз ететін есептегіш блоктар жиынтығы. 7-суретте есептегіштің құрылымдық сұлбасы көрсетілген.

Күріш. 7 Есептегіштің құрылымдық схемасы

Басқару блогы сигнал беру және басқару триггерлерінің функциясын орындайды.

Санау блогы санауыштың күйін өзгертуге және осы күйді сақтауға арналған.

Дисплей бөлігі көрнекі қабылдау үшін ақпаратты көрсетеді.

Есептегіштің функционалдық схемасын құрастыру

Функционалды диаграмма – санағыштың ішкі құрылымы.

Санау коэффициенті Кс=10 екілік емес санауыш үшін триггерлердің оңтайлы санын анықтайық.

M = log 2 (Kc) = 4.

M = 4 BCD санауышын жүзеге асыру үшін 4 флип-флоп қажет дегенді білдіреді.

Ең қарапайым бір таңбалы импульстік есептегіштер

Ең қарапайым бір разрядты импульстік санауыш JK-флип-флоп және санау режимінде жұмыс істейтін D-флип-флоп болуы мүмкін. Ол кіріс импульстерін санайды 2 модуль – әрбір импульс флип-флопты қарама-қарсы күйге ауыстырады. Бір триггер екіге дейін, тізбектей қосылған екеуі төртке дейін, n триггерлер 2n импульске дейін санайды. Санақ нәтижесі берілген кодта қалыптасады, ол есептегіш жадында сақталады немесе цифрлық дешифратор технологиясының басқа құрылғысымен оқылады.

Суретте JK K155TB1 флип-флоп балтасына салынған үш таңбалы екілік импульстік есептегіштің диаграммасы көрсетілген. Мұндай есептегішті нан тақтасына орнатыңыз және бұрынғыдай триггерлердің тікелей шығыстарына жарықдиодты (немесе транзисторды - қыздыру шамымен) индикаторларды қосыңыз. Сынақ генераторынан кіріске 1 ... 2 Гц қайталану жиілігі бар импульстар қатарын енгізіңіз.Сесептегіштің бірінші триггерінен бастап индикаторлардың жарық сигналдарын пайдаланып санауыш жұмысының графиктерін құрастырыңыз.

Егер бастапқы сәтте санауыштың барлық триггерлері нөлдік күйде болса (триггерлердің R кірісіне төмен деңгейлі кернеу беру арқылы «0 орнату» батырмасының қосқышын SB1 орнатуға болады), онда ыдырау арқылы бірінші импульс (45.6-сурет), триггер DD1 бір күйге ауысады - оның тікелей шығысында жоғары кернеу деңгейі пайда болады (Cурет 45, в). Екінші импульс DD1 триггерін нөлдік күйге ауыстырады, ал DD2-B триггері бір күйге ауысады (45-сурет, г). Үшінші импульстің төмендеуі кезінде DD1 және DD2 триггерлері бір күйде болады, ал DD3 триггерлері әлі де нөлде болады. Төртінші импульс алғашқы екі триггерді нөлдік күйге, ал үшіншісі жалғыз күйге ауыстырады (45,е-сурет). Сегізінші импульс барлық триггерлерді нөлдік күйге ауыстырады. Тоғызыншы кіріс импульсінің төмендеуінде үш таңбалы импульстік есептегіштің келесі циклі басталады.

Графиктерді зерттей отырып, санауыштың әрбір жоғарғы цифры кіші саннан импульстарды санау санынан екі есе ерекшеленетінін байқау қиын емес. Сонымен, бірінші триггердің шығысындағы импульстар периоды кіріс импульстерінің периодысынан 2 есе, екінші триггердің шығысында - 4 есе, үшінші триггердің шығысында - 8 есе көп. Цифрлық технология тілінде мұндай есептегіш 1-2-4 салмақ кодында жұмыс істейді. Мұнда «салмақ» термині оның триггерлерін нөлге орнатқаннан кейін есептегіш қабылдаған ақпарат көлемін білдіреді. Цифрлық технологияның құрылғылары мен аспаптарында 1-2-4-8 салмақ кодында жұмыс істейтін төрт таңбалы импульстік есептегіштер кеңінен қолданылады. Жиілік бөлгіштер кіріс импульстерін санау коэффициентімен белгіленген белгілі бір күйге дейін санайды, содан кейін триггердің ауысу сигналы мен нөлдік күйін құрайды, кіріс импульстерін көрсетілген санау коэффициентіне дейін қайта санай бастайды және т.б.

Суретте JK флип-флоптарында құрастырылған санау коэффициенті 5 болатын бөлгіштің диаграммасы мен графиктері көрсетілген.Мұнда сізге бұрыннан таныс үш таңбалы екілік санауыш 2D-NOT DD4.1 логикалық элементімен толықтырылған, ол 5 санау коэффициентін орнатады. Бұл осылай болады. Алғашқы төрт кіріс импульстерімен («Set 0» SB1 түймесі арқылы триггерлерді нөлге орнатқаннан кейін) құрылғы қалыпты екілік импульс санауышы ретінде жұмыс істейді. Бұл ретте төмен кернеу деңгейі DD4.1 элементінің бір немесе екі кірісінде де жұмыс істейді, сондықтан элемент бір күйде болады.

Бесінші импульстің төмендеуі кезінде бірінші және үшінші триггерлердің тікелей шығысында жоғары кернеу деңгейі пайда болады, демек DD4.1 элементінің екі кірісінде де осы логикалық элементті нөлдік күйге ауыстырады. Осы сәтте оның шығысында қысқа төмен деңгейлі импульс қалыптасады, ол VD1 диод арқылы барлық флип-флоптардың R кірісіне беріледі және оларды бастапқы нөлдік күйге ауыстырады.

Осы сәттен бастап есептегіштің келесі циклі басталады. Осы есептегішке енгізілген R1 резисторы және VD1 диод DD4.1 элементінің шығысының жалпы сымға тұйықталуын болдырмау үшін қажет.

Мұндай жиілік бөлгіштің жұмысын оның бірінші триггерінің C кірісіне 1 ... 2 Гц жиілікте жүретін импульстарды енгізу және DD3 триггерінің шығысына жарық индикаторын қосу арқылы тексеруге болады.

Практикада импульстік есептегіштер мен жиілік бөлгіштердің қызметтерін интеграцияның жоғары дәрежесі бар арнайы құрастырылған микросұлбалар орындайды. K155 сериясында, мысалы, бұл K155IE1, K155IE2, K155IE4 және т.б. есептегіштер.

Радио әуесқойлық әзірлемелерде K155IE1 және K155IE2 микросұлбалары кеңінен қолданылады. Осы микросұлбалардың есептегіштерінің шартты графикалық белгіленуі олардың қорытындыларының нөмірленуімен суретте көрсетілген. 47.

K155IE1 микросхемасы (47-сурет, а) онкүндік импульс санаушысы, яғни санау коэффициенті 10 болатын санауыш деп аталады. Оның құрамында тізбектей жалғанған төрт флип-флоп бар. Микросұлбаның шығысы (5 түйреуіш) оның төртінші триггерінің шығысы болып табылады. Барлық триггерлер ЖӘНЕ элемент тізбегіне (шартты «&» таңбасы) сәйкес біріктірілген R кірістерінің екеуіне де (1 және 2 түйреуіштер) бір уақытта жоғары деңгейдегі кернеуді қолдану арқылы нөлдік күйге орнатылады. Төмен деңгейге ие болуы тиіс импульстарды санау бір-біріне жалғанған C кірістеріне (8 және 9 түйреуіштер), сондай-ақ I. біріктірілген немесе олардың біреуіне, егер сол уақытта екіншісінде кернеу деңгейі жоғары болса, қолдануға болады. . Шығудағы әрбір оныншы кіріс импульсімен есептегіш ұзақтығы бірдей төмен деңгейлі кіріс импульсін жасайды. Чип K155IE2 (Cурет 48, b)

Екілік ондық төрт таңбалы санауыш. Сондай-ақ оның төрт флип-флоптары бар, бірақ біріншісінде жеке C1 кірісі (14-пин) және бөлек тікелей шығысы (12-пин) бар. Басқа үш триггер 5-ке бөлгіш құрайтындай өзара байланысты. Бірінші триггердің шығысы (12-ші істікше) қалған триггерлер тізбегінің С2 кірісіне (1-ші істікше) қосылғанда, микросұлба 10-ға бөлгішке айналады. (48, а-сурет), 1 -2-4-8 кодында жұмыс істейді, ол микросұлбаның графикалық белгілеуінің шығысындағы сандармен белгіленеді. Есептегіш триггерлерді нөлдік күйге орнату үшін R0 кірістерінің екеуіне де жоғары деңгейлі кернеу қолданылады (2 және 3 түйреуіштер).

K155IE2 микросхемасының екі біріктірілген R0 кірісі және төрт бөлу шығысы қосымша элементтерсіз 2-ден 10-ға дейінгі бөлу коэффициенттері бар жиілік бөлгіштерді құруға мүмкіндік береді. Мысалы, егер сіз 12 және 1, 9 және 2, 8 n 3 түйреуіштерді қоссаңыз (Cурет 2). 6), онда санау коэффициенті 6 болады, ал 12 және 1, 11, түйреуіштерді қосқанда. 2 және 3 (48, в-сурет), санау коэффициенті 8-ге айналады. K155IE2 микросұлбасының бұл мүмкіндігі оны екілік импульс есептегіші ретінде де, жиілікті бөлгіш ретінде де пайдалануға мүмкіндік береді.

Цифрлық импульс санауышы - бұл кірісте қабылданған импульстерді санайтын цифрлық түйін. Санау нәтижесі берілген кодта есептегіш арқылы қалыптасады және оны қажетті уақыт ішінде сақтауға болады. Есептегіштер триггерлерге салынған, ал санауыш санай алатын импульстар саны N = 2 n - 1 өрнегінен анықталады, мұндағы n - триггерлер саны, ал минус бір, өйткені цифрлық технологияда 0 алынады. Бастауыш.Есеп ұлғайған кезде есептегіштер, ал шегергіштер - шот азайған кезде жинақталады. Егер есептеуіш жұмыс кезінде қосындыдан азайтуға және керісінше ауыса алса, онда ол қайтымды деп аталады.

Көбінесе микроконтроллер құрылғысы жұмыс істеп тұрған кезде «антропоморфты» уақытты санау қажет - жарық диодты секундтың қанша бөлігі жанады, екі рет шертудің максималды уақыты және т.б. Жалпы алғанда, тек нано- және микросекундтарды ғана емес санаңыз. , сонымен қатар ондаған миллисекундтар, тіпті секундтар , минуттар және тіпті сағаттар (күндер туралы айтуға қорқамын ...).
Сонымен қатар, микроконтроллерлерде жиі бір уақытта микросекундтармен жұмыс істеу қажет - импульстік периодтар, серпілуге ​​қарсы күту және т.б.
Сондай-ақ көптеген сағаттар, тіпті күндер үздіксіз жұмыс істейтін құрылғылар бар - авиациялық техника, автомобиль, ұңғыма құрылғылары (бұл жерде біз кейде бірнеше күн бойы үздіксіз жұмыс істеу туралы айтып отырмыз). Бұл жағдайларда таймерлердің және 8-биттік айнымалылардың толып кетуіне жол берілмейді.
Мен мұның бәрін бір талғампаз және әмбебап шешімге біріктіргім келеді - бірнеше күн бойы толып кетпейтін микросекунд дәлдігімен уақытты өлшейтін құралға ие болғым келеді.
Неге жоқ? Мен біраз уақыт қиналып, 8-биттік AVR микроконтроллерлеріне арналған шешімді дүниеге әкелдім. Ол үшін мен 8-биттік таймер-санауыш пен 4-байттық айнымалыны қолдандым. Мен қазір PIC және AT89 құрылғыларымен жұмыс істемеймін және басқа ендірілген платформалармен дос емеспін. Дегенмен, оқырмандар көмектессе, мен оларға көмектесемін.
Артықшылықтары - код өте қайталанады (мен онымен 5-ші құрылғыны жасап жатырмын); жұмыстың қарапайымдылығы (үзілістер жұмыстың клиенттік бөлігі үшін пайдаланылмайды); кодтың клиенттік бөлігі шартты түрде платформадан тәуелсіз; үзілісте - бір жинақтау операциясы (бірақ 4 байт мән үшін); сыртқы құрылғы жоқ - нақты уақыттағы таймер.
Мен бір кемшілікті таптым - бір пайдалы және әрқашан қажет таймер бос емес ...
Мақала, ең алдымен, жаңадан бастағандар үшін қызықты болады - мен Американы мұнда ашпадым.

Теория

Сонымен, менің қолымда 12 МГц кристалы бар Atmega16A негізіндегі құрылғы бар. Біз оның таймер санауышын 0 аламыз. Бұл сегіз разрядты таймер – бұл бізге жеткілікті. Неліктен? Біз сенеміз:
  1. біз кварцтан 12 МГц аламыз және бөлу коэффициентін 8-ге аламыз - біз 1500 КГц жиілікті аламыз;
  2. біз CTC режимін аламыз (сәйкесінше қалпына келтіру) және үзуді 150-ге сәйкес келетін етіп орнатамыз - біз 10 кГц үзіліс триггерінің жиілігін аламыз;
  3. дәл осы үзілісте айнымалыны көбейтеміз (әр 0,1 миллисекунд сайын өсім аламыз);
  4. егер ол қолтаңбасы жоқ 32 биттік мән болса, ол шамамен кейін асып кетеді
    • 429496729,6 миллисекунд;
    • 42949,7 секунд;
    • 7158,3 минут;
    • 119,3 сағат;
    • 4,97 күн.
Басқаша айтқанда, мұндай шешім маған 0,1 миллисекунд дәлдігімен 5 күн бойы (дерлік) таймер жасайды (бұл нақты кварцта қате бар екенін ескеру керек - бұл туралы кейінірек). Ал егер таймердің өзі 0 мәнін талдасаңыз - ол әрбір 2/3 микросекунд сайын өседі - онда 0,67 микросекунд дәлдігімен есептегішті алуға болады.
Жеткілікті? Менің көзім үшін. 0,1 миллисекундтық есептегішті пайдаланып, мен өз жобаларымда:
  • Мен жарықдиодты шамдардың жарқырауының ұзақтығын және олардың арасындағы үзілістерді санаймын;
  • UART, USB-мен жұмыс істегенде күту уақытын есепке аламын;
  • Сынақ жабдығында жағдайлардың барлық түрлерін орнаттым – күрделі кеңістік-уақыт комбинациялары;
  • ADC және басқа сенсорларды сұрау кезінде көрсетілген уақыт аралықтарын сақтаймын;
  • Мен компьютерге өзімнің (құрылғының) жұмыс уақытын айтамын және берілген уақыт аралығымен ақпаратты жіберемін;
  • микросекундқа дейін есептегішті ескере отырып, пернелерді басқан кезде серпілуге ​​қарсы бақылауды жүзеге асырамын, ұзартылған сызықтардағы импульстарды талдау.
Мұның бәрі БІР ATmega16 БАСҚАРУ ҚҰРАМЫНА оңай сыйдырады! Бұл Assembler емес, C кросс-платформасы! Және нақты уақыттағы сыртқы есептегіш жоқ!
Жаман емес, иә?

AVR параметрі

Мұның бәрін AVR жүйесінде қалай жасауға болады?
Ең алдымен, біз «DeciMilliSecond» деп атайтын сыртқы айнымалыны орнаттық:
// main.h typedef ішінде unsigned long dword; // таңбасыз 32-биттік бүтін сыртқы өзгермелі dword dmsec; // 0,1мсек // main.c ұшқыш dword dmsec ішінде;
@no-smoking дұрыс атап өткендей, компилятор оны оңтайландыруға тырыспауы үшін бұл айнымалы өзгермелі болуы керек.
Мен бұл айнымалыны функцияда инициализациялаймын:
dmsec=0;
Содан кейін мен таймер режимін 0-ге қойдым:
// . таймер 0 - 0,1 мсек Timer0_Mode (TIMER_Mode_CTC | TIMER0_Clk_8); Timer0_Cntr(149); Timer_Int(Timer0_Cmp);
Сонымен қатар, кейбір MCU_init.h ішінде мен барлық қажеттіні жариялаймын:
// mcu_init.h ішінде #include // . TIMSK #Таймерді0_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)
Мүмкін болса, үзілістерді қосамын:
#asm("SEI")
Үзілісті сипаттау қалды. Бұл барлық алдыңғыларға қарағанда оңай:
#қосу үзу Timer0_Салыстыру (жарамсыз) ( ++dmsec; )
Барлығы, таймер сипатталған, конфигурацияланған және іске қосылған!

PIC параметрі

Міне, құрметті PIComans маған ұсынған:

Шыңда бұл Timer2 модулі арқылы оңай қайталанады. Дәл осы жерде кездейсоқ ұқсас үзу функциясы бар.

PR2 = 75 - таймер қалпына келтірілетін және үзіліс жасайтын мән
T2CON.T2CKPS = 2 - алдын ала масштабтауыш 1:16
T2CON.T2OUTPS = 0 - кейінгі масштабтауыш жоқ
T2CON.TMR2ON = қосулы - таймер қосылды

IPR1.TMR2IP = 1 -- жоғары басымдықты үзу
PIR1.TMR2IF = өшірулі -- үзу жалауын қалпына келтіру
PIE1.TMR2IE = қосулы -- TMR2 және PR2 сәйкес келген кезде үзуді қосу
INTCON.GIE = ​​қосулы - үзілістерді өңдеуді қосыңыз

Көріп отырғаныңыздай, мұнда алдын ала масштабтау құрылғысы 2 есе үлкен, сондықтан PR2 2 есе аз.
Бұл параметрлер 48 МГц жүйелік жиілікте (таймер Fosc / 4) 10 кГц жиілікте үзілістерді жасайды - USB толық жылдамдығы үшін стандартты жиілік.

Қолданылуы

Бұл таймер клиентінің коды кросс-платформа болып табылады (АВР жүйесіндегі 0 таймерінің мәніне қол жеткізуді қоспағанда).
Міне, USB алмасу кодының үзіндісі:
#include "main.h" // dmsec айнымалысы осында, next_USB_timeout #include "FT245R.h" // USB модулімен жұмыс істеу функциялары осында #include "..\Protocol.h" // мұнда микроконтроллер-компьютер алмасу протоколы / / * * // ** USB пакеттерін талдау // ** void AnalyzeUSB (жарамсыз) ( #define RECEIVE_BYTE(B) кезінде (!FT245R_IsToRead)\ ( if (dmsec > end_analyze) қайтару; )\ B = FT245_ReadByte (); # анықтау RECEIVE_WORD(W) // 2 байт үшін ұқсас #define RECEIVE_DWORD(W) // 4 байт үшін ұқсас dword end_analyze, d; NewAnalyze: егер (!FT245R_IsToRead) // пакеттер жоқ? қайтару; end_analyze = dmsec + max_timeout; //USB ағымдағы талдау үшін күту уақыты next_USB_timeout = dmsec + MaxSilence_PC_DEV; // жалпы алмасу үшін күту уақыты RECEIVE_BYTE (b) // пакет тақырыбының қосқышы (b) (жағдай SetFullState: RECEIVE_DWORD (d); // оқу сөзі is_initialized = 1; // ChangeIndicator процесі ( ) ; үзу; ) // ауысу (бума) ЖаңаТалдау; #undef RECEIVE_BYTE // undefine #анықтау #undef RECEIVE_WORD #undef RECEIVE_DWORD )
RECEIVE_BYTE, RECEIVE_WORD, RECEIVE_DWORD макрофункциялары берілген алмасу кезеңі үшін күту уақытын ескере отырып оқу процедураларын орындайды. Нәтижесінде, егер бірдеңе екінші жағында ілулі болса, онда микроконтроллер күту күйіне түспейді. Назар аударыңыз - WatchDog қажет емес! Мұның бәрі күту уақытын 0,1 миллисекунд дәлдікпен орнататын max_USB_timeout айнымалысының / тұрақтысының арқасында.
Дәл осылай келесі_USB_timeout айнымалысының «эфирдегі үнсіздік» талдауы жүзеге асырылады. Бұл микроконтроллерге 1) компьютердің бір жерде жоғалып кеткенін білуге, 2) бұл туралы қандай да бір түрде сигнал беруге мүмкіндік береді (менің жағдайда «қате» жарық диоды жанады). MaxSilence_PC_DEV тұрақты/айнымалысы «үнсіздік» түсінігін ең кең ауқымда – миллисекундтың бір бөлігінен бірнеше күнге дейін өзгертуге мүмкіндік береді.
Барлық басқа сәттер бірдей орындалады.
Егер сізге микросекунд есептегішті пайдалану қажет болса, онда салыстыру функциясы пайда болады:
#define GetUSec(A,B) ( #asm ("CLI"); A = dmsec; B = TCNT0; #asm ("SEI"); ) // ** // ** оқиғалар арасындағы уақыт айырмашылығы 2/ 3usec // ** dword Айырмашылық (dword prev_dmsec, byte prev_usec) ( dword cur_dmsec; byte cur_usec; ​​dword dif; // . ағымдағы уақытты анықтау GetUSec (cur_dmsec, cur_usec); // айырмашылықты есептеу dif = cur_dmsec - prev_dmsec ; айырмашылығы<<= 8; if (cur_usec < prev_usec) dif += 255 + (dword) cur_usec - prev_usec; else dif += cur_usec - prev_usec; return dif; }
Уақыттың алдыңғы нүктесі функцияға беріледі - dmsec және таймер 0 алдыңғы мәні.
Біріншіден, көшіру кезінде dmsec пен санауыштың мәні нашарламауы үшін үзілістерді тоқтату үшін GetUSec макросын қолданамыз. Және ағымдағы уақытты көшіріңіз.
Содан кейін біз уақыт айырмашылығын толып кету арқылы 2/3 микросекундқа түрлендіреміз.
Жарайды, бұл жолы қайтеміз.
Содан кейін біз оны кәдімгі ефте қарсы тұру және басқа әрекеттерді басқару үшін қолданамыз. Ағымдағы уақытты анықтау кезінде үзілістерді тоқтатуды ұмытпаңыз - дәлірек айтсақ, GetUSec макросын пайдаланыңыз.

нәтижелер

Бұл таймер мен үшін өте ыңғайлы шешім болды. Сізге де пайдалы болады деп ойлаймын. Мен оны келесі жобаларда қолдандым:
  • Қоршау жағдайының қосқышы. Бұл үш контроллері бар үлкен жарты метрлік тақта - орталық ретінде ATmega128 және екі көмекші ретінде ATmega64 (оң және сол жақ). Үш контроллер мен олардың құрамдас бөліктері арасында гальваникалық байланыс жоқ - ионисторлар негізіндегі қоректендіру, оптокоуплер арқылы байланыс. Орталық контроллер кейбір ионисторлардың топтарын зарядтайды және осы уақытта екі жағын басқа ионисторлардан қоректендіреді. Мұнда қарым-қатынасты азайту үшін осының барлығына көп сатылы коммутация алгоритмін жасауға тура келді. Атап айтқанда, біз 8 реленің үйлестірілген жұмысы туралы айтып отырмыз - мұнда 3,3 мс таймерлер жұмыс істейді (кепілдік релелік жауап беру уақыты). Шындығында, екі жақ 10 реле мен жарты жүзден астам мультиплексорды басқарады. Барлық осы экономика нақты анықталған уақытша сипаттамалармен жұмыс істейді (дәл 1 мс, максималды ұзақтығы - 6 секунд). Сонымен, USB, UART үшін банальды күту уақыты.
  • Тереңдік сенсоры. Міне, мен басқа мәселені шешіп жатырмын (жоба жүріп жатыр). «1 см жоғары ауысу» және «1 см төмен ауысу» жағдайын орнататын екі өткізгіш (мультиметр) бар. Бағытты белгілеудің көптеген жолдары бар. Қалай болғанда да, бұл импульстардың белгілі бір комбинациясы. Осы таймердің көмегімен мен серпінді, тұрақты импульстің ұзақтығын анықтаймын. Компьютерден максималды рұқсат етілген серпілу уақыты орнатылады (мұнда 10 микросекунд жеткілікті), серпілуге ​​қарсы күту, минималды / максималды импульс ұзақтығы. Ал, жөндеу режимі бар - сенсор логикалық анализаторға айналады. Бұл сызықты жөндеуге және коэффициенттерді реттеуге мүмкіндік береді. Тағы да, күту уақыты, жарықдиодты шамдар.
  • Аналогтық сигнал сенсоры. Банальды 8 арналы ADC. Мұнда мен қажетті үзілістерді сақтау үшін таймерді қолданамын.
Басқа платформалардағы құрметті habra пайдаланушылары маған сәйкес таймердің баптандыру кодын, сондай-ақ оған кіру ережелерін айта алады - мен оны осында қосамын. Басқа платформалар үшін басқа уақыттарды таңдау қажет болуы мүмкін. Бірақ кез келген жағдайда, ол таймердің өзі үшін бірнеше микросекунд ішінде және санауыш айнымалы үшін 100 микросекундқа көп нәрсе болуы керек. Өйткені, белгілі болғандай, кейде бір миллисекунд жеткіліксіз.
Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
рахмет. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!