Девочка моя синеглазая,
Без тебя мне не прожить и дня.
Девочка моя синеглазая,
Ну скажи, что любишь ты меня...

Эти слова, невольно начинал напевать, наверное, каждый обладатель этого усилителя, спустя примерно год - после его приобретения.

1

А все потому, что в аккурат через год (у кого то чуть раньше у кого то чуть позже) этот чудесный ресивер переставал работать и отказывался включаться - без всяких видимых на то причин. Симптом У ВСЕХ был один и тот же - 
Еще вчера все работало хорошо. Послушали - выключили... А сегодня с утра - не включается! 
Не реагируя, ни на один орган управления, он хладнокровно светил синим светодиодом.
Поход в сервисный центр был обеспечен каждому! Что происходит за кулисами в самом сервисе - скрыто от глаз клиентов. Но после его посещения, счастливые обладатели - вновь могли наслаждаться исправной работой своих аппаратов. 
Ирония всей ситуации в том, что это был не единственный поход к мастерам ремонта. Ровно через такой же промежуток времени Усилитель проявлял все те же признаки: светил диодом, и не включался...
Среди сервисных мастеров, в первое время, тоже не было абсолютного понимания причины неисправности. Проверка всех деталей не выявляла среди них неисправных. Замена управляющего контроллера на другой, с самой последней версией прошивки тоже не давало результата.  Официальная поддержка (а это в Китае) не давала разъяснений, поэтому поводу. На что только не шли мастера, что бы выяснить причины повального обращения людей в сервис... Постепенно начало вырисовываться "то место, из которого ноги растут". Оказалось, что усилитель вновь оживал - если в нем заменить маленькую микросхему памяти - на новую. Особо не вдаваясь в подробности, первую "волну" обратившихся в сервис клиентов, осчастливили именно этим. Неужели во всей партии ресиверов попались бракованные микросхемы памяти? Возможно, но нет! Тестирование выпаянных микросхем показало, что они прекрасно работают, данные в них успешно стираются, записываются и считываются. Если такую микросхему вновь вставить в ресивер, предварительно стерев из нее все записанные данные - аппарат включался и работал, как ни в чем не бывало! Но спустя какое то время, люди стали обращаться в сервис повторно. И уже стало очевидным, что корень зла находится в алгоритме работы усилителя. Сервисмэнами были сделаны соответствующие запросы производителю. На что в ответ получили доступ на скачивание свежих, исправленных прошивок. Эта модель ресивера имеет родного брата - усилитель со встроенным радиоприемником, что отображалось в названии модели, в виде дополнительной буквы "Т" (AV 212T). Хоть визуально они и одинаковы - прошивки в них все же были разными (из-за дополнительного модуля - радиоприемника). Что уж там исправили в прошивке Китайцы - не известно, только одному из "братьев" повезло больше, (это модель с тюнером) и после обновления прошивки описанная выше проблема у него больше не проявлялась. А вот второму "брату" повезло меньше - новая "вакцина" ему не помогла. 
Так как эта неисправность растянута во времени (между поломками  проходил примерно год) то и разбираться никто ни в чем не стал. К тому же, эта модель морально устаревала...
Я как счастливый обладатель (модели без тюнера) пару раз и сам обращался в сервис. Затем при очередной забастовке моего ресивера, решил сам разобраться и уже "РАЗ И НАВСЕГДА" починить аппарат. Перечитал в интернете кучу форумов, где люди делились своими успехами и способами воскрешения отлучившихся в мир иной аппаратов. Кто то просто каждый раз впаивал новую память, кто то впаивал панельку под микросхему для более легкого ее извлечения  и каждый раз стирал программатором ее содержимое... Кто-то умудрялся прислонять конденсатор к выводам микросхемы памяти в момент включения. Этот метод действительно работает - я проверял))) Но - крайне нестабильно, что очень неудобно. На файлообменниках лежали в открытом доступе прошивки с  громкими словами "ИСПРАВЛЕННАЯ", "ВЫЛЕЧЕННАЯ" или  "НОВАЯ" разумеется, многие из них я скачал. Проверка по ХЭШ суммам показала, что это либо самая первая прошивка - с которой эти усилители вошли на рынок, либо та самая прошивка, которую "исправили" разработчики. Но у меня и была та самая "исправленная" прошивка, которая в очередной раз заблокировала аппарат. Все это не подходило к моему желанию - "РАЗ И НАВСЕГДА"... И как-то раз наткнулся на статью, где автор описывал свое решение данной проблемы. Выяснив, что виной всему прошивка - он считал ее с микроконтроллера, дизассемблировал и стал по шагам проверять алгоритм программы. Выяснил что при включении питания, контроллер обращается к памяти (той самой отдельной микросхеме) считывает значения определенных ячеек и сверяет с условием... Вот тут и происходит вся магия! Если одно из считанных значений не равно нулю то дальше программа попадала в пустой цикл, тем самым "навечно" закольцовываясь. Для чего это было реализовано инженерами не понятно. Автор же, исправил код путем изменения условия проверки так, что бы программа никогда не попадала в этот пустой цикл и продолжала выполняться. И это действительно помогло! Оказалось, что 2 ячейки памяти микросхемы (с адресами 0x50 и 0x51), хранят в себе количество включений аппарата. Т.к. одна ячейка это 8 бит - то максимальное число, которое может в ней храниться это 255. по достижению этого числа и последующем добавлении к нему единицы ячейка "обнуляется" и счет начинается с нуля. В нашем случае при обнулении первой ячейки с адресом 0x50 вторая 0x51 увеличивается на единицу... т.е. после этого, при очередном включении - произойдет проверка на равенство этой ячейки нулю - и программа закольцуется. Усилитель не включится! 
Автору той статьи - большой респект! Снимаю шляпу! ))) К сожалению ссылку на его статью я не нашел, т.к. это было уже давно. ВОТ ЕГО СТАТЬЯ.
И очередная ирония в том, что он делал это для модели усилителя с радиоприемником и использовать его исправленную прошивку я не мог )))
Дизассемблировать - я не умею. Поэтому на основе той статьи - решил сделать небольшую хитрость и "сколхозить". Размер микросхемы памяти AT24C02 и микроконтроллера ATtiny13 одинаков. Более того - ножки по питанию у них совпадают.

attiny13 eep2402 mini
Это натолкнуло меня на мысль посадить ATtiny13 - верхом на микросхему памяти и заставить ее при каждом включении питания проверять содержимое ячейки памяти 0x51. И если там не "ноль" - то обнулять ее.

verhom

Контроллер общается с памятью, по шине I2C. Мне стало интересно, можно ли к шине подключить еще одно мастер устройство и работать с памятью? Насколько я понимал, в момент включения питания, микроконтроллер усилителя - инициализируется, на что уходит какое то время, а уже потом обращается к памяти, считывая из нее значения. Я же, хотел проверять память до того, как это начнет делать контроллер. Для измерения времени - использовал ардуино. Один из ее входов, я подключил на линию 5v платы усилителя. А второй на линию данных шины I2C. Таким образом, при появлении питания 5v ардуина включала счетчик времени, а при появлении данных на шине I2C - останавливала его. Подобные измерения стабильно показывали временной интервал в 89-90 м.сек. которых могло и не хватить для задуманной махинации. Ради интереса - подключил осциллограф к линии данных SDA. 


oscillograma1

Оказалось, что опрос памяти происходит постоянно! 
Во всех статьях по работе с шиной I2C описана ситуация с одним master и несколькими slave устройствами. Но как оказалось - можно использовать и 2 master устройства. При этом между ними не возникает конфликта. Приоритет распределяется по принципу - "кто раньше встал, того и тапки". 
Для испытаний алгоритма, так же использовал ардуино - настроив ее на работу с I2C. Вначале просто подпаял проводки к выводам SDA и SCL микросхемы памяти и пытался считать из нее данные. 


sdascl
Для правильной работы шины I2C оба вывода должны быть "подтянуты" к питанию 5v резисторами, но на схеме их не оказалось. Поэтому первые попытки чтения данных из памяти ни к чему не привели.
 

sdascl2

Припаяв резисторы на 10 кОм - все заработало! 
Ардуина стала присылать в терминал данные из ячеек памяти. Я считывал сразу обе ячейки 0x50 и 0x51. При каждом включении усилителя, значение ячейки 0x50 - увеличивалось на единицу. Далее для испытания - принудительно записал единичку по адресу 0x51 и попытался включить усилитель. И он не включился! Обратно записав в нее "нолик" - Все начинало работать, как и должно! Алгоритм подтвержден и можно приступать к написанию рабочей прошивки.
Создав в CodeVisionAVR новый проект под ATtiny13 -  настраиваем ее на частоту 4.8 МГц. Именно на этой частоте она будет работать от внутреннего тактового генератора (это настроится позже FUSE битами). Так же настраиваем работу с I2c и настраиваем выводы микроконтроллера 5 и 6 (PORTB.0 и PORTB.1)  - соответствующие выводам микросхемы памяти SDA и SCL. Битрейт шины - оставляем по умолчанию равным 100 кГц.

После инициализации, контроллер (ATtiny13) - будет принудительно удерживать линию SCL притянутой к земле. В этом можно убедиться, симулировав его работу в Proteus. 


proteus

Поэтому сразу после кода инициализации контроллера, прописываем:

i2c_stop();

Все. Теперь наш контроллер не мешает работе контроллера усилителя.


proteus2


Считываем данные из ячеек:

delay_ms(200);

i2c_start();                 //посылаем команду "старт" в шину i2c

i2c_write(0xa0);         //посылаем в шину адрес Микросхемы памяти  

i2c_write(0x50);         //посылаем в шину адрес читаемой ячейки (0x50)

i2c_start();                 

i2c_write(0xa0 | 1);    

eep50=i2c_read(0);   //принимаем данные с лини и сохраняем в переменную eep50

i2c_stop();

Делаем то же самое для считывания второй ячейки памяти:

i2c_start();

i2c_write(0xa0);

i2c_write(0x51);            //посылаем в шину адрес читаемой ячейки (0x51)

i2c_start();

i2c_write(0xa0 | 1);

eep51=i2c_read(0);      //принимаем данные с лини и сохраняем в переменную eep51

i2c_stop();


После того как данные считаны проверяем значение ячейки 0x51, и если оно больше нуля - записываем в нее ноль! 
В моем случае я проверял также значение ячейки 0x50, что бы ни доводить ее до крайнего значения =255. А при тестировании работоспособности, задавал условие, срабатывающее уже после 3 включений усилителя. 

if(eep50>200 || eep51>0)     // если счетчик включений больше 200 или в ячейке 0x51 не ноль.

 

{

    i2c_start();                 // посылаем команду "старт" в шину i2c

    i2c_write(0xa0);         // посылаем в шину адрес устройства

    i2c_write(0x50);         // посылаем в шину адрес записываемой ячейки

    i2c_write(0x00);         // записываем ноль по указанному адресу

    i2c_write(0x00);         // записываем ноль в следующую ячейку.

    i2c_stop();

}


Эту операцию нам нужно выполнять только один раз при включении питания усилителя. Поэтому весь код прописываем выше основного цикла программы, который оставляем пустым.

while (1)

      {
            // Тело цикла оставляем пустым.

      }

Теперь можно залить скомпилированную прошивку в ATtiny13 и проверить работоспособность.
Садим микросхему верхом на память и припаиваем ножки. Но тут я допустил ошибку, из-за которой какое то время не мог понять - почему ничего не работает. 
Дело оказалось в том, что по умолчанию ножка 1 у ATtiny13 - является ножкой RESET. а у микросхемы памяти ножки 1,2,3 служат для указания "расширенной " адресации микросхемы памяти. И в данном случае посажены на "ноль". Соответственно, припаяв первый вывод ATtiny13 к первому выводу AT24C02 - мы переводим ее в режим постоянного сброса -RESET. Что у меня и произошло. Отсоединив первый вывод (просто отрезал кусачками) все стало работать, как и задумывалось. 


pravilno

Несколько раз устанавливал (через все еще подключенную ардуину) значения ячеек при которых условие должно выполняться -  т.е. 0x50>200  или 0x51>0. и каждый раз при включении питания - значения обеих ячеек сбрасывались в ноль. 
Вот теперь я могу быть уверенным в том, что мой усилитель внезапно не откажется включаться!
В итоге на подобный "колхоз" ушло 2 резистора и 1 микроконтроллер. 

Прошивка для ATiny13:    
скачать


Пока разбирался в данной теме, появились новые идеи модинга моего усилителя…
Но об этом как-нибудь в другой раз!

Комментарии  

0 # Марат 08.01.2019 00:38
Я не понял если аппарат не включается, значит можно подкинуть чистую память, для включения его?
0 # Alexvip 08.01.2019 12:47
Ну в общем - да. Аппарат заработает, но после 255 включений - вновь перестанет включаться.
+5 # Миня 09.06.2018 00:34
А где же взять прошивку на AT212T?? Такая же проблема.
+3 # толик 03.07.2018 11:59
прошивку нашёл или нет
+2 # Alexvip 06.07.2018 16:38
Исправленная прошивка для модели 212T ( с тюнером) - есть в интернете.
Можно поискать на сайте http://monitor.net.ru
0 # толик 07.07.2018 23:22
надо точно исправленную там разные прошивки пробовал не помогает
+1 # Alexvip 14.07.2018 17:33
Нашел статью на основе которой я все это нагородил...
http://ast-home.narod.ru/bbk212/
Его ник - AST
Его прошивка есть на сайте "монитор"
0 # толик 26.07.2018 01:05
если можно от прав исправленную прошивку для BBK AV 212T на почту A.Onihenko@mail.ru
0 # Alexvip 26.07.2018 11:21
Я сам не нашёл.
Свяжись лучше с Ast - сам.
вот его почта: alexander-st1@yandex.ru
или напиши ему на форуме "монитора" - он там регулярно бывает. вот ссылка на его профиль.:
monitor.net.ru/forum/profile.php?mode=viewprofile&u=11331
Предварительно нужно зарегистрироваться.
Удачи! Если не получится- можешь воспользоваться моим методом.
+2 # Толик 15.08.2018 19:18
СПАСИБО ЗА ПОДСКАЗКУ СВЯЗАЛСЯ Ast прислал прошивку исправленную для av212t если кому надо пишите пришлю всем ещё раз огромное спасибо!!!!!!!!!!!!!!!
0 # Alexvip 16.08.2018 22:04
Здорово! :-)
+5 # Пользователь 23.03.2018 17:02
Потрясающая работа! :D это искуство создавать лучшее!

КОМЕНТАРИИ МОГУТ ОСТАВЛЯТЬ - ТОЛЬКО ЗАРЕГИСТРИРОВАННЫЕ ПОЛЬЗОВАТЕЛИ ! ! !