Конструкторское бюро онлайн. Простой счётчик числа оборотов - Конструкции простой сложности - Схемы для начинающих Простой счетчик импульсов схема

Часто при работе микроконтроллерного устройства есть необходимость отсчитывать «антропоморфное» время – сколько долей секунды светиться светодиоду, максимальный промежуток времени double-click и т. д. В общем, отсчитывать не только нано- и микросекунды, но и десятки миллисекунд, а то и секунды, минуты и даже часы (боюсь сказать о сутках…).
В то же время в микроконтроллерах нередко нужно одновременно с этим иметь дело с микросекундами – периоды импульсов, антидребезговое ожидание и т. п.
Есть также устройства, которые работают непрерывно многие часы и даже сутки – авиационная техника, автомобильная, скважинные устройства (там речь идет иной раз о непрерывной работе несколько дней). В этих случаях недопустимо переполнение таймеров и 8-битных переменных.
Хотелось бы это все объединить в одно изящное и универсальное решение – иметь средство измерения времени с точностью до микросекунды, не переполняющееся несколько дней.
Почему бы и нет? Помучился я некоторое время и родил решение для 8-битных микроконтроллеров AVR. Для этого я задействовал 8-битный таймер-счетчик и 4х-байтную переменную. С PIC-ами и AT89 я сейчас не работаю, а с другими embedded-платформами не дружу. Впрочем, если читатели помогут – сделаю и для них.
Достоинства – код в высшей степени повторяемый (я уже 5-ое устройство с ним делаю); простота в работе (не используются прерывания для клиентской части работы); клиентская часть кода условно платформенно-независимая; в прерывании – одна операция суммирования (но, правда, для 4-хбайтной величины); нет внешнего устройства - таймера реального времени.
Недостаток я нашел один – занят один такой полезный и всегда нужный таймер…
Статья будет интересна в первую очередь начинающим - Америку я тут не открыл.

Теория

Итак, я имею в своем распоряжении устройство на основе Atmega16A с кварцем 12MHz. Берем его таймер-счетчик 0. Это восьмиразрядный таймер – нам и хватит. Почему? Считаем:
  1. берем 12 MHz от кварца и берем коэффициент деления на 8 – получаем частоту 1500 KHz;
  2. берем режим CTC (сброс при совпадении) и ставим прерывание на совпадение с 150 – получаем частоту срабатывания прерывания 10 KHz;
  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 миллисекунды, я в своих проектах:
  • считаю длительности свечения и пауз между ними светодиодов;
  • учитываю timeouts при работе с UART, USB;
  • задаю всевозможные ситуации в тестовом оборудовании – сложные пространственно-временнЫе комбинации;
  • выдерживаю заданные промежутки времени при опросе АЦП и прочих датчиков;
  • сообщаю компьютеру время своей (устройства) работы и с заданным интервалом времени передаю информацию;
  • с учетом счетчика до микросекунды я осуществляю антидребезговый контроль при нажатии клавиш, анализ импульсов в протяженных линиях.
И все это спокойно влазит В ОДИН КОНТРОЛЛЕР ATmega16! Причем это не Ассемблер, а межплатформенный Си! И никакого внешнего счетчика реального времени!
Неплохо, да?

Настройка для AVR

Как это все сделать в AVR?
Прежде всего, заводим внешнюю переменную, которую я называю «ДециМиллиСекунда»:
// в main.h typedef unsigned long dword; // беззнаковое 32х-битное целое extern volatile dword dmsec; // 0.1msec // в main.c volatile dword dmsec;
Как верно подметил @no-smoking, эта переменная должна быть volatile, чтобы ее компилятор не попытался оптимизировать.
Инициализацию этой переменной я делаю в функции:
dmsec = 0;
Далее я задаю режим работы таймера 0:
// . таймер 0 – 0.1msec Timer0_Mode (TIMER_Mode_CTC | TIMER0_Clk_8); Timer0_Cntr (149); Timer_Int (Timer0_Cmp);
При этом в каком-нибудь MCU_init.h объявляю все, что надо:
// в 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)
Ну и далее, когда можно, разрешаю прерывания:
#asm ("SEI")
Осталось описать прерывание. Это проще, чем все предыдущее:
#include interrupt Timer0_Compare (void) { ++dmsec; }
Все, таймер описан, настроен и запущен!

Настройка для PIC

Вот что мне подсказали уважаемые PICоманы:

На пиках это легко повторяется при помощи модуля Timer2. Именно в нем есть аналогичная функция прерывания по совпадению.

PR2 = 75 - значение, при котором таймер обнулится и сгенерирует прерывание
T2CON.T2CKPS = 2 - прескалер 1:16
T2CON.T2OUTPS = 0 - без постскалера
T2CON.TMR2ON = on - таймер включен

IPR1.TMR2IP = 1 --высокоприоритетное прерывание
PIR1.TMR2IF = off --сбрасываем флаг прерывания
PIE1.TMR2IE = on --включаем прерывание по совпадению TMR2 и PR2
INTCON.GIE = on --включаем обработку прерываний

Как видно, прескалер тут в 2 раза больше, потому PR2 в 2 раза меньше.
Данные настройки будут генерировать прерывания с частотой 10 kHz при системной частоте в 48 MHz (на таймер идет Fosc/4) - стандартная частота для USB Full Speed.

Использование

Код для клиента этого таймера получается кросс-платформенным (если не считать обращения к значению таймера 0 в AVR).
Вот фрагмент кода обмена по USB:
#include "main.h" // тут переменная dmsec, next_USB_timeout #include "FT245R.h" // тут функции работы с модулем USB #include "..\Protocol.h" // тут протокол обмена микроконтроллер - компьютер // ** // ** Анализ пакетов по USB // ** void AnalyzeUSB (void) { #define RECEIVE_BYTE(B) while (!FT245R_IsToRead)\ { if (dmsec > end_analyze) return; }\ B = FT245_ReadByte (); #define RECEIVE_WORD(W) // аналогично для 2х байт #define RECEIVE_DWORD(W) // аналогично для 4х байт dword end_analyze, d; NewAnalyze: if (!FT245R_IsToRead) // нет пакетов? return; end_analyze = dmsec + max_USB_timeout; // timeout для текущего анализа next_USB_timeout = dmsec + MaxSilence_PC_DEV; // timeout для общего обмена RECEIVE_BYTE (b) // заголовок пакета switch (b) { case SetFullState: RECEIVE_DWORD (d); // читаем слово is_initialized = 1; // обрабатываем ChangeIndicator (); break; } // switch (pack) goto NewAnalyze; #undef RECEIVE_BYTE // отменяем #define #undef RECEIVE_WORD #undef RECEIVE_DWORD }
Макрофункции RECEIVE_BYTE, RECEIVE_WORD, RECEIVE_DWORD реализуют процедуры чтения с учетом timeout для данной фазы обмена. В итоге, если чего зависло на другой стороне, то микроконтроллер не впадет в «спячку». Обратите внимание – WatchDog не понадобился! И все благодаря переменной/константе max_USB_timeout, которая задает timeout с точностью до 0.1 миллисекунды.
Точно также реализуется анализ «тишины в эфире» переменной next_USB_timeout. Это позволяет микроконтроллеру 1) узнать, что компьютер куда-то исчез, 2) как-то об этом сигнализировать (в моем случае загорается светодиод «ошибка»). Константа/переменная MaxSilence_PC_DEV позволяет варьировать понятие «тишины» в широчайших пределах – от доли миллисекунды до нескольких суток.
Аналогично реализуются все остальные моменты.
Если же вам нужно использовать счетчик микросекунд, то там появляется функция сравнения:
#define GetUSec(A,B) { #asm ("CLI"); A = dmsec; B = TCNT0; #asm ("SEI"); } // ** // ** Разница во времени между событиями с точностью до 2/3usec // ** dword Difference (dword prev_dmsec, byte prev_usec) { dword cur_dmsec; byte cur_usec; dword dif; // . засекаем текущее время GetUSec (cur_dmsec, cur_usec); // вычисляем разницу dif = cur_dmsec - prev_dmsec; dif <<= 8; if (cur_usec < prev_usec) dif += 255 + (dword) cur_usec - prev_usec; else dif += cur_usec - prev_usec; return dif; }
Функции передается предыдущий момент времени – предыдущее значение dmsec и таймера 0.
Вначале мы макросом GetUSec останавливаем прерывания, чтобы в момент копирования не испортилось значение dmsec и счетчика. И копируем текущее время.
Далее мы приводим разницу во времени к формату 2/3 микросекунды с учетом переполнения.
Ну и возвращаем это время.
А далее мы это используем в обычном if для контроля антидребезга и прочих мероприятий. Только не забудьте также приостановить прерывания при засекании текущего момента времени – а лучше используйте макрос GetUSec.

Результаты

Этот таймер оказался для меня в высшей степени удобным решением. Думаю, он и вам пригодится. А применил я его в следующих своих проектах:
  • Коммутатор фехтовальных ситуаций . Это здоровенная плата пол на пол метра с тремя контроллерами - ATmega128 как центральный и ATmega64 как два вспомогательных (правая и левая стороны). Между тремя контроллерами и их компонентами нет гальванической связи - питание на основе ионисторов, связь через опторазвязки. Центральный контроллер заряжает группы одних ионисторов и питает в это время обе стороны от других ионисторов. Тут пришлось сделать многоступенчатый алгоритм коммутации всего этого с тем, чтобы минимизировать взаимосвязь. В частности, речь идет о слаженной работе 8 реле - тут работают таймеры на 3.3мсек (гарантированное время срабатывания реле). Ну и, собственно, обе стороны управляют 10 реле и еше с пол сотни мультиплексоров. Все это хозяйство работает с четко заданными временнЫми характеристиками (с точностью до 1 мсек, максимальные длительности - 6 секунд). Ну и, в конце концов, банальные timeout для USB, UART.
  • Датчик глубины . Здесь я решаю другую задачу (проект в работе). Имеются два проводника (многометровые), задающие ситуацию «сдвиг вверх на 1 см» и «сдвиг вниз на 1 см». Способов задания направления множество. В любом случае это определенные комбинации импульсов. С помощью этого таймера я определяю дребезг, длительность устойчивого импульса. С компьютера задается максимально допустимое время дребезга (10 микросекунд тут хватает), антидребезговое ожидание, минимальная/максимальная длительность импульса. Ну и есть режим отладки - датчик становится логическим анализатором. Это позволяет отлаживать работу линии и корректировать коэффициенты. Ну и опять же timeout, светодиоды.
  • Датчик аналоговых сигналов . Банальное 8-ми канальный АЦП. Здесь я использую таймер для выдерживания необходимых пауз.
Уважаемые хабрапользователи с других платформ могут мне подсказать код инициализации соответствующего таймера, а также правила доступа к нему - я это тут добавлю. Возможно, что для других платформ будет необходимо подобрать другие времена. Но в любом случае это должно быть нечто в пределах нескольких единиц микросекунд для самого таймера и нечто кратное 100 микросекунд для переменной-счетчика. Ибо, как оказалось, иногда одной миллисекунды не хватает.

видео работы устройства

Схема собрана на микроконтроллере PIC16F628A. Она может считать входные импульсы от 0 до 9999. Импульсы поступают на линию порта RA3 (кнопка SA1 активный уровень низкий). С каждым импульсом показания индикатора меняются на +1. После 999 импульса на индикаторе высвечивается 0 и загорается точка начала второй тысячи (правая по схеме) и т. д. Так счёт может продолжаться до значения 9999. После этого счёт останавливается. Кнопка SA3 (линия порта RА1) служит для сброса показаний в 0.

Схема счётчика импульсов с памятью на микроконтроллере

Изначально схема была изготовлена для работы с питанием от трёх пальчиковых батарей. Поэтому с целью экономии энергии в схему включена кнопка включения индикации для контроля состояния счётчика SA2 (линия порта RA4). Если в этой кнопке нет необходимости, её контакты можно закоротить. В схеме можно использовать подтягивающие резисторы в пределах от 1к до 10к. Биты конфигурации INTRC I/O и PWRTE установлены. При отключении питания показания счётчика в памяти контроллера сохраняются. При погашенном индикаторе схема остаётся работоспособной при снижении питания до 3,5 вольт. Практика показала, что заряда батареек хватает почти на неделю непрерывной работы схемы.


Печатная плата счётчика


Фото счетчика

Схема, прошивка МК и печатная плата в формате S-layuout в архиве (15кб) .

От администратора . Резисторы R1-R3 можно выбрать номиналом до 10К.

-20 dB писал:
А почему не подойти к делу малой кровью? Если есть что-то вроде уже упомянутого выше ИЖЦ5-4/8, с раздельными выводами сегментов?

В заначках с советских времён неиспользуемых К176ИЕ4 осталось море (счетчик/делитель на 10 с семисегментным дешифратором и выходом переноса, использовался для формирования единиц минут и часов в электронных часах, неполный аналог - CD4026 - в чём неполнота, не смотрел... пока) в классическом включении для управления ЖК. 4 шт - по 2 на канал, + 2 шт. 176(561)ЛЕ5 или ЛА7 - одна для формирователей одиночных импульсов (подавителей дребезга контактов), вторая - для формирования меандра для "засветки" ЖК индикатора?

Конечно, на МП решение красивее, но на мусоре - дешевле, и решается исключительно на коленке... С программированием МП, например, у меня туго (если только готовый дамп кто-то подсуетит) - мне с железяками проще.


Ну вот тут я готов поспорить. Давайте посчитаем. Для начала стоимость:
1. PIC12LF629 (SOIC-8) - 40руб. (~1,15$)
2. Дисплей от Моторола С200/С205/Т190/Т191 - около 90руб (~2.57$) Кроме того разрешение 98х64 - рисуй и пиши чо хочешь.
3. Рассыпуха (SMD-резюки, кнопочки, SMD-конденсаторы и прочее) на вскидку - около 50руб. (~1,42$)

Итого: ~180руб (~5$)

Корпус, аккум (я бы выбрал Lo-Pol акк от той же моторолки С200 - компактно, ёмко, недорого (сравнительно)) - не считаем, так как и то и другое нужно в обоих вариантах.

Теперь Ваш вариант:

1. ИЖЦ5-4/8 - около 50руб (~1.42$)
2. К176ИЕ4 (CD4026) - 15руб (~0,42$)x4=60руб(~1.68$)
3. К176ЛА7 - 5руб (~0,14$)x4=20руб(~0.56$)
4. Рассыпуха (SMD-резюки, кнопочки, SMD-конденсаторы и прочее) на вскидку - около 50руб. (~1,42$)

Итого: ~180руб(~5$)

В чём выгода?

Теперь прикинем ТТХ и функционал:

У варианта с МК поторебление будет максимум 20мА, в то время как в Вашем варианте, я думаю раза в 1,5...2 больше. Кроме того в Вашем варианте - сложность (относительная) печатной платы на 7 корпусах+многогогая ИЖЦ5-4/8 (наверняк - двусторонняя), невозможность модернизировать устройство (добавить или изменить функционал) не влезая в схему (только на программном уровне), отсутствие возможности организовать память на измерения (счёт), питание не менее 5В (с меньшего Вы не раскачаете ИЖЦ), вес и габариты. Можно много ещё привести доводов. Теперь вариант с МК. Про ток потребления уже написал - 20мА макс. + возможность спящего режима (потребление - 1...5 мА (в основном - LCD)), сложность платы для одной 8-ногой микросхемы и 5 выводного разъёмчика для мотороловского LCD - смешно даже говорить. Гибкость (можно программно, без изменения схемы и платы наворотить такого - волосы дыбом встанут), информативность графического 98х64 дисплея - ни в какое сравнение с 4,5 разрядами 7-сегментного ИЖЦ. питание - 3...3,5В (можно даже таблеточку CR2032, но лучше всё таки Li-Pol от мабылы). Возможность организации многоячейной памяти на результаты измерений (счёта) прибора - опять таки только на программном уровне без вмешательства в схему и плату. Ну и наконец - габариты и вес ни в какое сравнение с Вашим вариантом. Аргумент - "я не умею программировать" не принимется - кто хочет, тот найдёт выход. Я до вчерашнего дня не умел работать с дисплеем от мобильника Моторола С205. Теперь умею. Прошли сутки. Потому что мне это НАДО. В конце концов Вы правы - можно кого нибудь и попросить.)) Вот примерно так. И не в красоте дело, а в том, что дискретная логика безнадёжно устарела как морально так и технически в качестве основного элемента схемотехники. То, для чего требовались десятки корпусов с диким общим потреблением, сложностью ПП и огромными габаритами, теперь можно собрать а 28-40 ногом МК легко и непринуждённо - поверьте мне. Сейчас даже инфы по МК гораздо больше чем по дискретной логике - и это вполне объяснимо.

Все знают для чего существует микрокалькулятор,но оказывается кроме математических вычислений он способен и на многое другое. Обратите внимание, если нажать кнопку «1», затем «+» и далее нажимать «=», то с каждым нажатием на кнопку «=» число на дисплее будет увеличиваться на единицу. Чем не цифровой счетчик?

Если к кнопке «=» подпаять два проводка, их можно будет использовать как вход счетчика, например, счетчика витков для намоточного станка. И ведь, счетчик может быть и реверсивным, для этого нужно сначала набрать на дисплее число, например, число витков катушки, а затем нажать кнопку « - », и кнопку «1». Теперь при каждом нажатии на «=» число будет уменьшаться на единицу.

Однако, нужен датчик. Самый простой вариант, - геркон (рис.1). Геркон проводами подключаем параллельно кнопке «=», сам геркон стоит на неподвижной части намоточного станка, а магнит закрепим на подвижной, так что бы за один оборот катушки магнит один раз проходил возле геркона, вызывая его замыкание.

Вот и все. Нужно намотать катушку, делаем «1+» и далее с каждым оборотом, то есть, с каждым витком показания дисплея будут увеличиваться на единицу. Нужно отмотать катушку, - набираем на дисплее микрокалькулятора число витков катушки, и делаем «-1», далее с каждым оборотом размотки катушки показания дисплея будут уменьшаться на единицу.

Рис.1. Схема подключения геркона к калькулятору.

А, предположим, нужно измерить большое расстояние, например, длину дороги, размер земельного участка, длину маршрута. Берем обычный велосипед. Правильно, - на вилке крепим неметаллический кронштейн с герконом, а магнит закрепляем на одной из спиц велосипедного колеса. Затем, измеряем длину окружности колеса, и выраженную её в метрах, например, получилась длина окружности колеса 1,45 метра, так и набираем «1,45+», после чего с каждым оборотом колеса показания дисплея будут увеличиваться на 1,45 метра, и в результате на дисплее будет видно пройденное велосипедом расстояние в метрах.

Если есть неисправный китайский кварцевый будильник (обычно механизм у них очень не долговечный, а вот электронная плата весьма надежна), можно взять от него плату и по схеме показанной на рисунке 2 сделать из неё и калькулятора секундомер.

Питание на плату будильника поступает через параметрический стабилизатор на светодиоде HL1 (светодиод должен быть с прямым напряжением 1,4-1,7V, например, красный АЛ307) и резисторе R2.

Импульсы формируются из импульсов управления шаговым двигателем часового механизма (катушки должны быть отключены, плата используется самостоятельно). Эти импульсы через диоды VD1 и VD2 поступают на базу транзистора VТ1. Напряжение питания платы будильника всего 1,6V, при этом уровни импульсов на выходах для шагового двигателя еще ниже.

Чтобы схема нормально работала, необходимы диоды с низким уровнем прямого напряжения, такие как ВАТ85, или германиевые.

Эти импульсы поступают на транзисторный ключ на VТ1 и VТ2. В коллекторной цепи VТ2 включена обмотка маломощного реле К1, контакты которого подключены параллельно кнопке «=» микрокалькулятора. Когда есть питание +5V контакты реле К1 будут замыкаться с частотой 1 Гц.

Чтобы запустить секундомер нужно предварительно сделать действие «1+», затем выключателем S1 включить питание схемы формирователя импульсов. Теперь с каждой секундой показания дисплея будут увеличиваться на единицу.

Чтобы остановить счет достаточно выключить питание формирователя импульсов выключателем S1.

Чтобы был счет на уменьшение, нужно сначала набрать на дисплее микрокалькулятора исходное число секунд, а потом сделать действие «-1» и включить питание формирователя импульсов выключателем S1. Теперь с каждой секундой показания дисплея будут убывать на единицу, и по ним можно будет судить, сколько времени осталось до некоторого события.

Рис.2. Схема превращения китайского бодульника в секундомер.

Рис.3. Схема счетчика пересечений ИК-луча с применением калькулятора.

Если использовать инфракрасный фотодатчик, работающий на пересечение луча, можно приспособить микрокалькулятор считать какие-то предметы, например, коробки, перемещающиеся по транспортерной ленте, либо, установив датчик в проходе, считать входящих в помещение людей.

Принципиальная схема ИК-датчика отражения для работы с микрокалькулятором показана на рисунке 3.

Генератор ИК-сигнала выполнен на микросхеме А1 типа «555» (интегральный таймер) Он представляет собой генератор импульсов частотой 38 кГц, на выходе которого включен через ключ инфракрасный светодиод. Частота генерации зависит от цепи C1-R1, при налаживании подбором резистора R1 нужно установить на выходе микросхемы (вывод 3) частоту близкую к 38 кГц. Светодиод HL1 помещают с одной стороны прохода, надев на него непрозрачную трубку, которая должна быть точно направлена на фотоприемник.

Фотоприемник выполнен на микросхеме HF1 - это стандартный интегральный фотоприемник типа TSOP4838 для систем дистанционного управления телевизоров и другой домашней техники. Когда на этот фотоприемник попадает луч от HL1, на его выходе - ноль. При отсутствии луча -единица.

Таким образом, между HL1 и HF1 ничего нет - контакты реле К1 разомкнуты, а в момент прохождения какого-либо объекта - контакты реле замыкаются. Если на микрокалькуляторе сделать действие «1+», то с каждым прохождением объекта между HL1 и HF1 показания дисплея микрокалькулятора будут увеличиваться на единицу, и по ним можно будет судить, сколько коробок отгружено или сколько человек вошло.

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

Счётчик на микроконтроллере довольно прост для повторения и собран на популярном МК PIC16F628A с выводом индикации на 4 семисегментных светодиодных индикатора. Счётчик имеет два входа управления: «+1» и «-1», а также кнопку «Reset». Управление схемой нового счётчика реализовано таким образом, что как бы долго или коротко не была нажата кнопка входа, счёт продолжится только при её отпускании и очередном нажатии. Максимальное количество поступивших импульсов и соответственно показания АЛС - 9999. При управлении на входе «-1» счёт ведётся в обратном порядке до значения 0000. Показания счётчика сохраняются в памяти контроллера и при отключении питания, что сохранит данные при случайных перебоях питающего напряжения сети.

Принципиальная схема реверсивного счётчика на микроконтроллере PIC16F628A:

Сброс показаний счётчика и одновременно состояния памяти в 0, осуществляется кнопкой «Reset». Следует помнить, что при первом включении реверсивного счётчика на микроконтроллере, на индикаторе АЛС может высветиться непредсказуемая информация. Но при первом же нажатии на любую из кнопок информация нормализируется. Где и как можно использовать эту схему - зависит от конкретных нужд, например установить в магазин или офис для подсчёта посетителей или как индикатор намоточного станка. В общем думаю, что этот счётчик на микроконтроллере кому-нибудь принесёт пользу.

Если у кого-то под рукой не окажется нужного индикатора АЛС, а будет какой-нибудь другой (или даже 4 отдельных одинаковых индикатора), я готов помочь перерисовать печатку и переделать прошивку. В архиве на форуме схема, плата и прошивки под индикаторы с общим анодом и общим катодом. Печатная плата показана на рисунке ниже:

Имеется также новая версия прошивки для счётчика на микроконтроллере PIC16F628A. при этом схема и плата счётчика остались прежними, но поменялось назначение кнопок: кнопка 1 - вход импульсов (например, от геркона), 2 кнопка включает счёт на вычитание входных импульсов, при этом на индикаторе светится самая левая точка, 3 кнопка - сложение импульсов - светится самая правая точка. Кнопка 4 - сброс. В таком варианте схему счётчика на микроконтроллере можно легко применить на намоточном станке. Только перед намоткой или отмоткой витков нужно сначала нажать кнопку "+" или "-". Питается счётчик от стабилизированного источника напряжением 5В и током 50мА. При необходимости можно питать от батареек. Корпус зависит от ваших вкусов и возможностей. Схему предоставил - Samopalkin

Loading...Loading...