Доработка УЗ-ванны с таймером на МК

В предыдущей статье я рассказывал про устройство китайских УЗ-ванн и превращение их в двухрежимные. Кроме блоков управления наподобие рассмотренного бывают блоки на основе МК. У ванн подороже они вполне юзабельны, а вот у AOYUE-9050, KDG, CT-400B/D — увы. Единственная выдержка — 99 секунд, и опционально — переключение мощности (причем у моей AOYUE-9050 — только во время работы). Но там же МК — а значит, можно поставить линукс написать свою программу, с блэкджеком и шлюхами.



Блок управления сделан на МК AT89C2051 (китайцы его любят), по вполне ожидаемой схеме. Ключи реле находятся на основной плате (схемотехнически она аналогична CT-400, только с блоком питания блока управления на трансформаторе и 7805), открываются низким уровнем (что неудивительно — квази-двунаправленные порты C51 нормально тянут только вниз).
Контроллер оснащен флэш-памятью на 2кб, что радует — OTP-шку пришлось бы менять на другой подходящий. Правда, программируется только в параллельном программаторе, который использует почти все ноги. А МК в моей ванне — в SOP. Это несколько затрудняет перепрошивку. Хотя, если отключить R5 и C4 от ресета (и, возможно, кварц) — можно перешить прямо в схеме, подключив МК к программатору полутора десятками проводков. Оригинальная прошивка недоступна, увы — китайцы про лок-биты не забывают (да еще и часто спиливают маркировку с элементов, чтоб конкуренты схему не реверснули).

Кроме того, индикатор всего двухразрядный, а выдержку хотелось бы до 5-10 минут, поэтому отображать ее приходится в минутах (от 0.1 минуты до 9.9 минут, т.е. 0:06-9:54), однако точка индикаторов не подключена — ее пин выделен под HL3 (индикатор режима 30Вт). Так что необходимо схему немного доработать, как показано штриховыми линиями. При этом HL3 занимает место точки второго разряда. Еще одна проблема — разряды точек на плате моей ванны хотя и не подключены, но соединены, и вместе/вместо HL3 загорается и точка. Поэтому вывод точки H2 необходимо отключить от схемы (у меня они соединены дорожкой под индикаторами, пришлось перерезать соответствующую ножку H2).

Теперь собственно о прошивке. Начал я ее писать на mikroPascal'е, но, убедившись в его глючности, переполз на Keil C51. Он обладает вполне вменяемой средой с неплохим эмулятором и хорошим оптимизирующим компилятором (после портирования практически 1 в 1 с микропаскаля размер уменьшился с 1.3кб до 900 байт). Кроме того, ознакомительную версию можно скачать бесплатно, и ЕМНИП единственное ограничение — отладчик поддерживает программы не более 2кб бинарного кода. Ну и таблетку на Keil найти не проблема, что тоже радует.

Работает прошивка на примитивном самопальном диспетчере с гордым названием uRTOS :) Он обеспечивает работу таймеров, используя в качестве временного базиса таймер T/C0 (восьмибитный режим с автоперезагрузкой — насколько я знаю, единственное, что позволяет точно делить частоту кварца, не высчитывая такты на обработчик прерывания). Второй таймер (в 13-битном «практически бесполезном, оставленном только для совместимости» режиме) обеспечивает работу динамической индикации. Оставшиеся прерывания не используются (хотя расположение кнопок намекает, что китайцы обрабатывали их по прерываниям).

О допиле прошивки под другую распиновку. Основная ее часть определена в начале main.c, однако возможности настройки довольно ограничены, особенно в плане подключения индикатора. К нему относятся дефайны CGSeg* (соответствие сегментов битам DisplayChar.Segs.Digit), DisplayPort (порт, куда подключены сегменты), битовые указатели DispP*Pin (пины разрядных ключей), структура DisplayChar (там задается пин сегмента точки). Там же определены и остальные пины. Также стоит обратить внимание на три дефайна MPRESS_RELOAD_VALUE — нужно раскомментировать один из них, он определяет скорость автоповтора при установке выдержки. Mid — теоретически порядка 2.5 Гц, и это довольно медленно. При работе от кварца с другой частотой потребуется править константы в uRTOS.h — RT_TIMER_RELOAD (должен обеспечивать срабатывание таймера с частотой 1/2/4/8/etc кГц) и RT_COUNTER_MASK (равен частоте срабатывания таймера в килогерцах минус единица).

Управление ванной.
На ванне есть две кнопки — Hi/Lo и Power. Прошивка их использует как Time и Start соответственно. При включении выдержка устанавливается на 5 минут.
Нажатие на Time увеличивает выдержку на 0.1 минуты, нажатие и удержание — автоповтор. Нажатие Start при нажатой Time — сброс таймера на 0. Работает только при остановленном таймере.
Нажатие Start — запуск/остановка таймера. Длительное нажатие (пока не пикнет) — переключение режима мощности, в том числе и во время работы ванны.

Баги:
Сброс таймера не очень-то удобный. Задумывался — по нажатию двух кнопок одновременно, но на практике срабатывает только если Time нажата в момент отпускания Start.
Можно выставить нулевую выдержку (и сбрасывается таймер именно на нее), но запуск при такой выдержке приводит к глюкам (Upd: а может и нет, похоже глюк аппаратный, надо ковырять мейнборд; Upd2: таки аппаратный, глючил транзистор, управляющий одной из релюшек, заменил).

Понты:


  • +1
  • 22 мая 2011, 19:03
  • Vga
  • 2
Файлы в топике: usc-timer-wsrc.zip, AOYUE-9050.GIF

Комментарии (22)

RSS свернуть / развернуть
А МК лучше бы заменить на Tiny2313 т.к. АТ89С2051 еще надо чем то прошить. Да и все равно выпаивать
0
Зачем? Прошивать однократно, если не отлаживать.
Алсо
1) Я хотел поработать с 8051, я с ним впервые работаю
2) У меня нету 2313 в сопе
3) Не выкидывать же 2051-й)

А программатор… Бешеной кобыле семь верст не крюк :)
0
2) У меня нету 2313 в сопе
И не только у тебя :) их вообще не бывает.
0
Неужели? ЕМНИП на фотке в посте «черное золото» они и были. Да и даташит говорит «PDIP/SOIC».
0
Аааа, соп есть. Я как-то по диагонали прочитал — думал он в SSOP корпусе. :)
0
Атмелов в SSOP вообще не видел. Только SOP/WideSOP и *QFP, плюс безногие вроде MLF/QFN. По крайней мере самые распространенные — тини 13, 15-85, 2313, меги 8-16.
0
А в одном форуме писали, что на фирменных ваннах никаких органов управления, кроме выключателя питания, нет. Если что, мопед не мой :).
0
typedef struct
{
  unsigned char Active:1;
  unsigned char Task:7;
} TASK;


Жесть. Я бы просто 0xff в пустые слоты сунул
А так прикольно ☺
0
Да, можно. Я даже и не помню уже почему именно так сделал) Вроде бы, прикинул что 32-64 задачек хватит, а флаги могут еще какие-то потребоваться.
0
А прошивали через пинборд? Просто я нашел в закромах штук пять 4051 и давным-давно собранный программатор по «итальянской» схеме. Но он не то, чтобы не работает — он работал, даже более-менее ничего, только через свою кривую прогу и то через раз. Решил поиграться со старьем, но хочется нормальный программатор. Где-то когда-то я читал, что кто-то собирался переделать схему программатора на базе С51, замению его на 40-ногий AVR типа 16й меги — никто такого не видел?
0
Прошивал через свой программатор на пинборд, да. 4051 должен поддерживать. Ну, по крайней мере до тех пор, пока я его не перепишу на С и с поддержкой сороконогих AT89C51, т.к. что-нить сломается, а х051-х для отладки нету :)
0
ОК, значит придется вечерком получше гуглить, ибо пинбордом я не обладаю. Неохота городить что-то большое и сложное, и еще больше неохота бегать искать, кто может управляющий С51 прошить, которого у меня к тому же нету))
0
От пинборда нужна только мега16, затактированная на 8мгц (от внутреннего генератора или кварца). Адаптер надевается на ноги 1-10 и 31-40, как именно — видно на фото (ну и в сорцах есть карта пинов). Плюс — пины уарта подключаются к компу, через переходник на усб или рс232. Скорее всего, можно пересобрать и под мегу8.
0
Good news, everyone! Вот про это я как то и не подумал, 16я мега как раз есть под эксперименты. Спасибо!
0
Угу. Для контроля правильности подскажу — порт Р1 2051-го подключается к порту А меги, причем в обратном порядке (т.е. 0 к 7, 1 к 6 и т.д.). Остальное — ищи сам на печатке и сорцах) Пины вокруг меги на пинборде поключены напрямую к соответствующим пинам.
0
Дело было вечером, делать было нечего… Добавил видео, наслаждайтесь.
P.S. А 7z с сорцами файлоаттачер все еще не принимает. Сцуко.
+1
  • avatar
  • Vga
  • 26 мая 2011, 00:29

А вот так оно работает с родной прошивкой. Кстати, не рекомендую совать пальцы в воду при включенной ванне, как на видео. И бросать детальки в нее — тоже.
+1
Эффектно) Хм, она действительно так гудит?
зы. Юзал бы zip, более привычно как-то)
0
Можно, конечно, и zip — не тот случай, когда степень сжатия сильно актуальна. Но я на этом архивчике проверяю, изменилось ли что :)

Примерно так, да (если ты про чужой ролик с деталями мотора, мой фотик звук хреново пишет). Зависит от режима — на малой мощности гудит громче.
0
Повторял данную схему, все работает. Спасибо автору.
Осталось после сборки два запрограммированных контроллера АТ89С2051. Если кому то нужны- с удовольствием поделюсь. Пишите в личку.
0
Прошивка с инкрементом таймера по 1 минуте:
:0300000002029861
:10029800787FE4F6D8FD75813E02000DEF75F00A0F
:0F02A800843333333354F0FFE5F0540F4FFF220C
:1001AF00FF0366FF02B7FF0334FF0140FF0096FF16
:1001BF000277FF0358FF022CFF02FFFF02EBC0F98B
:0E01CF00A4B0999282F8809089CFC7FFFFFFFD
:02001B0021DDE5
:1001DD00C0D0A200B392B4A201B392B57590FFA2A4
:1001ED000292B7A202B392B1300205850E90800340
:0801FD00850D90B202D0D03252
:0A032A007590FF75B0FFC2B080FEB1
:08000300AD07C2B0E4FF01FEED
:08035000C2B07DFA7F0801FE36
:10020500EF540F9001CD93547F25E0FEE50D540189
:100215004EF50DEFC4540F540F93547F25E0FFE5C1
:070225000E54014FF50E22FB
:0B031F00750C08D2037DFA7F0901FE77
:09033E00750C01E4FD7F0901FECC
:1002D500E4F520750832F50BF50A7F0351527F04CA
:0602E50051527F96010357
:0D000D00317E51D553890FD2ABD28E011D2B
:03036600D2B022F0
:1002B700050BE50BB418051508E4F50BE508700404
:0E02C7007F0241523000067DFA7F0111FE22B7
:0A033400C200850908E4F50B6150D2
:100140007D327F0311FE300408750DFF750EFF80B0
:100150001E300312430E013001067FAB5105800FA4
:100160007FC051058009530EFEAF0851A45105A26E
:0E01700001E4335401FFE50D54FE4FF50D225E
:100096007D647F0411FEE50A540FF51120B3116447
:1000A6000F6002050AE511B40E1A7F06515280143C
:1000B600E511D39400400AE511940A50047F0551D6
:1000C60052530AF0E50A54F0C4540FF51120B21346
:1000D600640F60077410250AF50A227F07515253F0
:1000E6000ACF22E511D39400400AE511940A500480
:0700F6007F075152530A0F6E
:0100FD0022E0
:100277007F64110320001420B20475086322D200A2
:100287008508097DFA7F0111FE613EC200E4F50B86
:010297002244
:080358007F961103B201611F41
:10022C007F32110320001E740A2508F508B46403FC
:10023C00750863E4F50BE508D394634003E4F50813
:06024C00300302713E22A6
:1002FF00B2B07DFA30B0047F0801FEE4FF11FE2298
:1002EB00150CB204E50C7005C204C203227DFA7F23
:0402FB000911FE22C5
:09034700E50F25E02423F8E6226D
:02000B00610F83
:10030F00C0E0E522045403F5227002D208D0E03297
:10017E00E4F522F521FFEF714954FEF60FBF08F6A4
:10018E00E4FF74332FF8E654FEF60FBF0CF4E58946
:10019E0054F04402F589758C06858C8AD2A9D2B9A1
:0101AE00222E
:10001D00D28CD2AFE4F510300902712A300830C20B
:10002D0008E4F50FE50FC3940850EC7147FF30E07D
:10003D001AE50F25E02424F8E6600316800DEFC3C2
:10004D0013547FFF5152714754FEF6050F80D5743E
:10005D00332510F8E630E025C313547F75F003A463
:10006D0024AFF582E5F03401F583740193FA74023F
:10007D0093F9716074332510F8E654FEF60510E51A
:09008D0010640C7092F510808ED5
:10025200E4FE74332EF8E6FD20E013EF547F25E030
:10026200FF74332EF8ED54014FF64401F6220EBE10
:040272000CE0D209C1
:010276002265
:1000FE00E4FEEE714930E009C313547FB507028068
:10010E00210EBE08EDE4FEEE7149FC20E01DEF5419
:10011E007F25E0FFEE25E02423F8EC54014FF64452
:10012E0001F6EE25E02424F8A605220EBE08D8D24C
:01013E0009B7
:01013F00229D
:060360008A838982E47328
:00000001FF
0
  • avatar
  • Vga
  • 06 июня 2015, 15:11
Добавьте Bin файлы в раздачу
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.