Встраиваемый счётчик наработки или борьба с хитрыми клиентами

от автора

Один мой товарищ пожаловался при встрече на некоторых недобросовестных покупателей. Работает он в большой компании по продаже бытовых устройств. Вот что он рассказал:

Кое-кто из клиентов покупал вполне себе бытовые приборы и через некоторое время возвращал неисправные по гарантии, получая взамен новые. И так по кругу. Сервисная служба решила выявить причину отказов. Оказалось, механизмы были изношены в хлам. Шестерни, хоть и из хорошего пластика, были просто в плачевном состоянии. Оказывается, клиент сдавал устройства в аренду, где они нещадно эксплуатировались. Понятно, что такой ресурс в них заложен не был, поскольку к профессиональному оборудованию они никак не относились.

По просьбе товарища, мной был разработан счётчик наработки. По техническому заданию счётчик должен интегрироваться в бытовой прибор. Все готовые счётчики, попадавшиеся при поиске в продаже, имели встроенный дисплей или индикатор, что значительно увеличивало габариты.

Итак, счётчик должен быть малогабаритным, запитываться от устройства и иметь возможность чтения данных наработки в случае необходимости. Прототип разрабатывал на модуле MiniTiny. Если испытания пройдут успешно, можно будет заказать печатные платы для небольшой серии. Считывать информацию можно любым доступным переходником USB-Uart. Я использую адаптер UART USB-TTL CH340. Терминальная программа любая, я использовал Termite.

Связка MiniTiny и  USB-TTL

Связка MiniTiny и USB-TTL

Алгоритм работы следующий: как только прибор будет включен, питание будет подано и на счетчик. Программа начнёт отсчитывать время. При отключении устройства, у микроконтроллера будет до одной секунды, чтобы внести данные в нестираемую память. Там они хранятся до следующего включения.

По схеме. Микроконтроллера Attiny13 хватает с избытком. Диод D1 защищает от ошибочного подключения питания. Два конденсатора и диод D2 — элементы автономного питания, используются для поддержания напряжения на время записи данных в EEPROM после отключения устройства. Диод D2 служит для развязки от батареи устройства. Диод D3 служит для развязки от батареи устройства при снятии данных. На делителе R1-R2 узел сигнализации отключения внешнего питания, по этому сигналу программа вносит последние данные в EEPROM. К разъёму X3 подключается переходник USB-TTL. На схеме есть ещё светодиод, он использовался для наглядности при проектировании. В серии его не будет.

Программу писал на Bascom. Среда проектирование «Bascom — AVR IDE». Заинтересовавшимся можно немного почитать о настройке в спойлере.

Hidden text

Bascom — язык программирования микроконтроллеров на базе распространённого в свое время языке Basic. Пожалуй, это самый простой путь вхождения в программирование микроконтроллеров.

Скачиваем с официального сайта Freeware версию (бесплатная с ограничением на размер кода до 4 кБ). После установки оставляем всё по умолчанию, кроме выбора программатора. Заходим в Options/Programmer выбираем USBASP жмем ОК.

Настройка Bascom-AVR IDE

Настройка Bascom-AVR IDE

В качестве программатора используется USBASP.

USBASP

USBASP

На прототипе MiniTini установлен разъем для программатора, что облегчает его подключение.

MiniTiny и USBASP

MiniTiny и USBASP
'Программа для счетчика наработки  $regfile = "attiny13.dat" $hwstack = 16 $swstack = 16 $framesize = 16  $crystal = 9600000  Open "comb.3:9600,8,n,1" For Output As #1 'Порт для TX микроконтроллера Open "comb.4:9600,8,n,1" For Input As #2  'Порт для RX микроконтроллера  Config Int0 = Falling On int0 Zapis Enable Interrupts Enable Int0  Config Pinb.1 = Input : Ind_pitan Alias Pinb.1      'порт для индикатора внешнего питания Config Portb.0 = Output : Led Alias Portb.0 : Led=0 'порт для светодиода   'Объявление переменных Dim narabotka as long        'наработка Dim E_Narabotka As Eram long 'наработка  EEPROM Dim Cmd As String * 9        'для считывания приходящего в контроллер слова   Narabotka = E_narabotka      'первым делом считываем значение из EEPROM      Prover: Do     wait 1     if Ind_pitan = 1 then incr Narabotka 'при веншнем питании инкрементируем одну наработку на секунду     Input #2, Cmd     If Cmd = "Наработка" Then Print #1, "Наработка=" ; Narabotka 'если поступает запрос микроконтроллеру "Наработка", он возвращает актуальное значение      toggle led Loop   Zapis: ' по прерыванию (отсутствию внешнего питания) экстренно вносим данные в EPROM E_Narabotka = Narabotka  Return

При включении устройства питание приходит на ATTiny13, программа запускается. Считываются данные из EEPROM. При самом первом включении там будут нули. Затем мы попадаем в основной цикл, где первым условием проверяется, откуда приходит питание на микроконтроллер. Если от батареи бытового устройства, то счётчик наработки инкрементируется . Вторым условием проверяется наличие запроса на считывание данных. Если устройство подключено к USB-TTL, и из терминала поступает команда «наработка», микроконтроллер возвратит значение «Наработка=хххххх». Значение даётся в секундах. Можно это всё обработать в удобоваримые часы и минуты силами микроконтроллера, но товарищ отказался, сказал что его устраивает.

Запрос и ответ в терминале Termite

Запрос и ответ в терминале Termite

Если будет заказ на серию устройств, то в целях защиты можно после прошивки отключить ножку «Reset» микроконтроллера навсегда утратив возможность изменения данных в памяти микроконтроллера.

MiniTiny и блютуз модуль HC-06

MiniTiny и блютуз модуль HC-06

Было ещё одно предложение: использовать блютуз модуль типа «HC-05 / 06». В этом случае считывание данных можно проводить без разбора устройства. Достаточно предварительно прописать в блютуз модуле понятное имя и при считывании просто подключиться к нему при помощи смартфона. Очень удобно использовать приложение Serial Bluetooth Terminal, имеющее большое количество всевозможных настроек. Но этот вариант в нашем случае оказался избыточным. Хотя, в каких-то случаях вполне может быть востребован.


ссылка на оригинал статьи https://habr.com/ru/articles/723292/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *