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

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

По схеме. Микроконтроллера 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 жмем ОК.

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

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

'Программа для счетчика наработки $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, и из терминала поступает команда "наработка", микроконтроллер возвратит значение "Наработка=хххххх". Значение даётся в секундах. Можно это всё обработать в удобоваримые часы и минуты силами микроконтроллера, но товарищ отказался, сказал что его устраивает.

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

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