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

в 19:24, , рубрики: attiny13, bascom, bluetooth, diy или сделай сам, MiniTiny, usb-ttl, usbasp, программирование микроконтроллеров, Производство и разработка электроники, прототипирование, схемотехника, Счетчик наработки

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

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

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

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

Связка MiniTiny и  USB-TTL

Связка MiniTiny и USB-TTL

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

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

По схеме. Микроконтроллера 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, имеющее большое количество всевозможных настроек. Но этот вариант в нашем случае оказался избыточным. Хотя, в каких-то случаях вполне может быть востребован.

Автор:
igor27065

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js