Ресивер BBK AV212- не включается!
- Автор: Александр
- Просмотров: 19661
Девочка моя синеглазая,
Без тебя мне не прожить и дня.
Девочка моя синеглазая,
Ну скажи, что любишь ты меня...
Эти слова, невольно начинал напевать, наверное, каждый обладатель этого усилителя, спустя примерно год - после его приобретения.
А все потому, что в аккурат через год (у кого то чуть раньше у кого то чуть позже) этот чудесный ресивер переставал работать и отказывался включаться - без всяких видимых на то причин. Симптом У ВСЕХ был один и тот же -
Еще вчера все работало хорошо. Послушали - выключили... А сегодня с утра - не включается!
Не реагируя, ни на один орган управления, он хладнокровно светил синим светодиодом.
Поход в сервисный центр был обеспечен каждому! Что происходит за кулисами в самом сервисе - скрыто от глаз клиентов. Но после его посещения, счастливые обладатели - вновь могли наслаждаться исправной работой своих аппаратов.
Ирония всей ситуации в том, что это был не единственный поход к мастерам ремонта. Ровно через такой же промежуток времени Усилитель проявлял все те же признаки: светил диодом, и не включался...
Среди сервисных мастеров, в первое время, тоже не было абсолютного понимания причины неисправности. Проверка всех деталей не выявляла среди них неисправных. Замена управляющего контроллера на другой, с самой последней версией прошивки тоже не давало результата. Официальная поддержка (а это в Китае) не давала разъяснений, поэтому поводу. На что только не шли мастера, что бы выяснить причины повального обращения людей в сервис... Постепенно начало вырисовываться "то место, из которого ноги растут". Оказалось, что усилитель вновь оживал - если в нем заменить маленькую микросхему памяти - на новую. Особо не вдаваясь в подробности, первую "волну" обратившихся в сервис клиентов, осчастливили именно этим. Неужели во всей партии ресиверов попались бракованные микросхемы памяти? Возможно, но нет! Тестирование выпаянных микросхем показало, что они прекрасно работают, данные в них успешно стираются, записываются и считываются. Если такую микросхему вновь вставить в ресивер, предварительно стерев из нее все записанные данные - аппарат включался и работал, как ни в чем не бывало! Но спустя какое то время, люди стали обращаться в сервис повторно. И уже стало очевидным, что корень зла находится в алгоритме работы усилителя. Сервисмэнами были сделаны соответствующие запросы производителю. На что в ответ получили доступ на скачивание свежих, исправленных прошивок. Эта модель ресивера имеет родного брата - усилитель со встроенным радиоприемником, что отображалось в названии модели, в виде дополнительной буквы "Т" (AV 212T). Хоть визуально они и одинаковы - прошивки в них все же были разными (из-за дополнительного модуля - радиоприемника). Что уж там исправили в прошивке Китайцы - не известно, только одному из "братьев" повезло больше, (это модель с тюнером) и после обновления прошивки описанная выше проблема у него больше не проявлялась. А вот второму "брату" повезло меньше - новая "вакцина" ему не помогла.
Так как эта неисправность растянута во времени (между поломками проходил примерно год) то и разбираться никто ни в чем не стал. К тому же, эта модель морально устаревала...
Я как счастливый обладатель (модели без тюнера) пару раз и сам обращался в сервис. Затем при очередной забастовке моего ресивера, решил сам разобраться и уже "РАЗ И НАВСЕГДА" починить аппарат. Перечитал в интернете кучу форумов, где люди делились своими успехами и способами воскрешения отлучившихся в мир иной аппаратов. Кто то просто каждый раз впаивал новую память, кто то впаивал панельку под микросхему для более легкого ее извлечения и каждый раз стирал программатором ее содержимое... Кто-то умудрялся прислонять конденсатор к выводам микросхемы памяти в момент включения. Этот метод действительно работает - я проверял))) Но - крайне нестабильно, что очень неудобно. На файлообменниках лежали в открытом доступе прошивки с громкими словами "ИСПРАВЛЕННАЯ", "ВЫЛЕЧЕННАЯ" или "НОВАЯ" разумеется, многие из них я скачал. Проверка по ХЭШ суммам показала, что это либо самая первая прошивка - с которой эти усилители вошли на рынок, либо та самая прошивка, которую "исправили" разработчики. Но у меня и была та самая "исправленная" прошивка, которая в очередной раз заблокировала аппарат. Все это не подходило к моему желанию - "РАЗ И НАВСЕГДА"... И как-то раз наткнулся на статью, где автор описывал свое решение данной проблемы. Выяснив, что виной всему прошивка - он считал ее с микроконтроллера, дизассемблировал и стал по шагам проверять алгоритм программы. Выяснил что при включении питания, контроллер обращается к памяти (той самой отдельной микросхеме) считывает значения определенных ячеек и сверяет с условием... Вот тут и происходит вся магия! Если одно из считанных значений не равно нулю то дальше программа попадала в пустой цикл, тем самым "навечно" закольцовываясь. Для чего это было реализовано инженерами не понятно. Автор же, исправил код путем изменения условия проверки так, что бы программа никогда не попадала в этот пустой цикл и продолжала выполняться. И это действительно помогло! Оказалось, что 2 ячейки памяти микросхемы (с адресами 0x50 и 0x51), хранят в себе количество включений аппарата. Т.к. одна ячейка это 8 бит - то максимальное число, которое может в ней храниться это 255. по достижению этого числа и последующем добавлении к нему единицы ячейка "обнуляется" и счет начинается с нуля. В нашем случае при обнулении первой ячейки с адресом 0x50 вторая 0x51 увеличивается на единицу... т.е. после этого, при очередном включении - произойдет проверка на равенство этой ячейки нулю - и программа закольцуется. Усилитель не включится!
Автору той статьи - большой респект! Снимаю шляпу! ))) К сожалению ссылку на его статью я не нашел, т.к. это было уже давно. ВОТ ЕГО СТАТЬЯ.
И очередная ирония в том, что он делал это для модели усилителя с радиоприемником и использовать его исправленную прошивку я не мог )))
Дизассемблировать - я не умею. Поэтому на основе той статьи - решил сделать небольшую хитрость и "сколхозить". Размер микросхемы памяти AT24C02 и микроконтроллера ATtiny13 одинаков. Более того - ножки по питанию у них совпадают.
Это натолкнуло меня на мысль посадить ATtiny13 - верхом на микросхему памяти и заставить ее при каждом включении питания проверять содержимое ячейки памяти 0x51. И если там не "ноль" - то обнулять ее.
Контроллер общается с памятью, по шине I2C. Мне стало интересно, можно ли к шине подключить еще одно мастер устройство и работать с памятью? Насколько я понимал, в момент включения питания, микроконтроллер усилителя - инициализируется, на что уходит какое то время, а уже потом обращается к памяти, считывая из нее значения. Я же, хотел проверять память до того, как это начнет делать контроллер. Для измерения времени - использовал ардуино. Один из ее входов, я подключил на линию 5v платы усилителя. А второй на линию данных шины I2C. Таким образом, при появлении питания 5v ардуина включала счетчик времени, а при появлении данных на шине I2C - останавливала его. Подобные измерения стабильно показывали временной интервал в 89-90 м.сек. которых могло и не хватить для задуманной махинации. Ради интереса - подключил осциллограф к линии данных SDA.
Оказалось, что опрос памяти происходит постоянно!
Во всех статьях по работе с шиной I2C описана ситуация с одним master и несколькими slave устройствами. Но как оказалось - можно использовать и 2 master устройства. При этом между ними не возникает конфликта. Приоритет распределяется по принципу - "кто раньше встал, того и тапки".
Для испытаний алгоритма, так же использовал ардуино - настроив ее на работу с I2C. Вначале просто подпаял проводки к выводам SDA и SCL микросхемы памяти и пытался считать из нее данные.
Для правильной работы шины I2C оба вывода должны быть "подтянуты" к питанию 5v резисторами, но на схеме их не оказалось. Поэтому первые попытки чтения данных из памяти ни к чему не привели.
Припаяв резисторы на 10 кОм - все заработало!
Ардуина стала присылать в терминал данные из ячеек памяти. Я считывал сразу обе ячейки 0x50 и 0x51. При каждом включении усилителя, значение ячейки 0x50 - увеличивалось на единицу. Далее для испытания - принудительно записал единичку по адресу 0x51 и попытался включить усилитель. И он не включился! Обратно записав в нее "нолик" - Все начинало работать, как и должно! Алгоритм подтвержден и можно приступать к написанию рабочей прошивки.
Создав в CodeVisionAVR новый проект под ATtiny13 - настраиваем ее на частоту 4.8 МГц. Именно на этой частоте она будет работать от внутреннего тактового генератора (это настроится позже FUSE битами). Так же настраиваем работу с I2c и настраиваем выводы микроконтроллера 5 и 6 (PORTB.0 и PORTB.1) - соответствующие выводам микросхемы памяти SDA и SCL. Битрейт шины - оставляем по умолчанию равным 100 кГц.
После инициализации, контроллер (ATtiny13) - будет принудительно удерживать линию SCL притянутой к земле. В этом можно убедиться, симулировав его работу в Proteus.
Поэтому сразу после кода инициализации контроллера, прописываем:
i2c_stop();
Все. Теперь наш контроллер не мешает работе контроллера усилителя.
Считываем данные из ячеек:
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. Что у меня и произошло. Отсоединив первый вывод (просто отрезал кусачками) все стало работать, как и задумывалось.
Несколько раз устанавливал (через все еще подключенную ардуину) значения ячеек при которых условие должно выполняться - т.е. 0x50>200 или 0x51>0. и каждый раз при включении питания - значения обеих ячеек сбрасывались в ноль.
Вот теперь я могу быть уверенным в том, что мой усилитель внезапно не откажется включаться!
В итоге на подобный "колхоз" ушло 2 резистора и 1 микроконтроллер.
Прошивка для ATiny13:
Пока разбирался в данной теме, появились новые идеи модинга моего усилителя…
Но об этом как-нибудь в другой раз!
Комментарии
Можно поискать на сайте http://monitor.net.ru
http://ast-home.narod.ru/bbk212/
Его ник - AST
Его прошивка есть на сайте "монитор"
Свяжись лучше с Ast - сам.
вот его почта: alexander-st1@yandex.ru
или напиши ему на форуме "монитора" - он там регулярно бывает. вот ссылка на его профиль.:
monitor.net.ru/forum/profile.php?mode=viewprofile&u=11331
Предварительно нужно зарегистрироваться.
Удачи! Если не получится- можешь воспользоваться моим методом.