Найти в Дзене
Мастерская Chipmaster.BY

Проблема логического чипа SLG4V**** для колонок JBL и Harmann. Его просто не на что менять.

Кто давно ремонтирует звуковые колонки брендов Harmann и JBL знает о проблеме логического чипа серии SLG4V. Дело в том, что эти колонки часто поступают с неисправностью - не включается. Более детальный осмотр и диагностика часто заканчивается вердиктом - неисправна логическая микросхема управляющая процедурой включения устройства. Никакой сверхзадачи у данной микросхемы в устройстве не стоит, она лишь по сигналу кнопки Включения отправляет команды на подачу питания всему устройству, а при выключении дожидается команды на отключение питания от главного процессора, пока тот не закончит звуковое оповещение. В общем-то и всё. Но, как говорится, мал золотник, да дорог. Без этой микросхемы устройство по сути ничем не отличается от кирпича, разве что выглядит более изящно. Данный логический чип представляет собой не что иное, а именно программируемую матрицу от Renesas. По-скольку микросхему свободно практически невозможно купить для ремонта, а так же не имея навыков и специального оборудован
Оглавление

Кто давно ремонтирует звуковые колонки брендов Harmann и JBL знает о проблеме логического чипа серии SLG4V. Дело в том, что эти колонки часто поступают с неисправностью - не включается. Более детальный осмотр и диагностика часто заканчивается вердиктом - неисправна логическая микросхема управляющая процедурой включения устройства. Никакой сверхзадачи у данной микросхемы в устройстве не стоит, она лишь по сигналу кнопки Включения отправляет команды на подачу питания всему устройству, а при выключении дожидается команды на отключение питания от главного процессора, пока тот не закончит звуковое оповещение. В общем-то и всё. Но, как говорится, мал золотник, да дорог. Без этой микросхемы устройство по сути ничем не отличается от кирпича, разве что выглядит более изящно.

Проблема.

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

Знакомьтесь - ATtiny10.

Внешний вид микроконтроллера ATtiny10.
Внешний вид микроконтроллера ATtiny10.
Назначение портов микроконтроллера ATtiny10. Распиновка.
Назначение портов микроконтроллера ATtiny10. Распиновка.

Это на самом деле самый маленький микроконтроллер, но с завидными характеристиками. Он собран в миниатюрном корпусе SOT23-6 для поверхностного монтажа. Смотрите что он умеет:

Характеристики ATtiny10.
Характеристики ATtiny10.

У него четыре порта ввода-вывода, что как раз прекрасно подходит к моей задумке. Для запуска не требуется внешний осциллятор, а значит и никаких дополнительных деталей не придётся добавлять, ведь простота это краеугольный камень всей затеи. То что надо. Осталось лишь реализовать свою "гениальность" на практике.

Исполнительный код.

Написание управляющей программы я решил выполнить в среде Arduino IDE, т.к. она прекрасно поддерживает данный чип и сверстать скетч не составит труда, благо опыта не занимать. Если вы ещё не в курсе, я очень плотно в своё время занимался программированием микроконтроллеров Atmel и начинал ещё на языке Ассемблер. Затем был переход на язык Си. Были и проекты на продажу и реализация задумок под свои нужды. Но как часто бывает, устройству нужен доступ к компьютеру и я занялся программированием под Windows. Было время, были возможности, я просто не стал их упускать. Мне казалось, а сейчас я просто убеждён в этом, что опыт никогда не бывает лишним - есть возможность, бери от жизни всё. Да, много воды утекло с тех пор.

Но вернёмся к текущему проекту, где с появлением Arduino процесс упростились донельзя.

Логический чип на примере JBL Xtreme 3.
Логический чип на примере JBL Xtreme 3.

Итак. Мне нужно понять логику работы управляющей микросхемы, чтобы близко к ней запрограммировать свой микроконтроллер. И здесь мне показалось всё просто и логично исходя уже из названий и заложенных функций выводов микросхемы согласно схемы. Итак разбираемся:

  1. Power Key. Порт подключения кнопки Включения. Активный управляющий сигнал - логический 0 (подтяжка к Земле).
  2. Power_On_Off. Порт отправки команды главному процессору о том, что мы хотим включить или выключить устройство. Здесь думаю всё просто - отправляем логическую единицу когда хотим выключить устройство.
  3. Power_Off_Ready. Как следует из названия - сигнал для логической микросхемы от главного процессора на отключение питания всего устройства. Он нужен для того, чтобы процессор после нажатия кнопки проиграл мелодию выключения, после чего скомандовал - отключить питание. Сигнал 0 - можно выключить питание.
  4. VREG_EN и Power_On. Я намеренно объединил эти два сигнала, т.к. у них в принципе общий смысл в устройстве и управляются они всегда одновременно. К тому же можно сэкономить на портах. Как раз всего и получилось 4. Назначение думаю ясно - управляющие сигналы питанием устройства. Активный высокий уровень.

Что ж, с назначением и логикой разобрались осталось набросать программу для прошивки микроконтроллера. Здесь, не мудрствуя лукаво, а лишь наделяя программу чисто практическим смыслом, у меня получился вот такой код:

#include <avr/io.h>
#include <util/delay.h>
int main(void) {
DDRB = (1 << PB3) | (1 << PB1);
PORTB = (1 << PB0);
while (1) {
_delay_ms(100);  // Задержка вместо антидребезга
if (!(PINB & (1 << PB0))) {          // Кнопка нажата (Power Key )
if (PORTB & (1 << PB3)) {          // Если PB3 включен (VREG_En & Power_On)
PORTB |= (1 << PB1);             // Включаем PB1 (Power_On_Off)
while ((PINB & (1 << PB2)));    // Ждем PB2 (Power_Off_Ready)
PORTB = (1 << PB0);              // Выключаем все
} else {
PORTB |= (1 << PB3);             // Включаем PB3 (VREG_En & Power_On)
}
while (!(PINB & (1 << PB0)));      // Ждем отпускания
}
}
}

Код максимально простой, а значит надеюсь и такой же надёжный. Я добавил задержку, которая призвана не столько исключить дребезг контактов кнопки Включения, сколько ради снижения энергопотребления микроконтроллера. Ведь процедуры while(1) могут прилично нагружать процессор, что может негативно сказываться на потреблении питания. Поправьте если ошибаюсь.

Мне вдруг захотелось отладить код ещё до загрузки в контроллер. Но как оказывается Arduino IDE эмулировать работу устройств не умеет. Мне пришлось дополнительно скачать и закинуть код в Atmel Studio, где я его и отладил. В симуляции всё работало правильно, а значит и на железе будет работать так же. Я вдруг подумал, что код можно было сразу писать в среде Атмел Студии, но уже как есть.

Симуляция работы программы в памяти микроконтроллера ATtiny10.
Симуляция работы программы в памяти микроконтроллера ATtiny10.

Программирование ATtiny10.

Назрел вопрос программирования. Микроконтроллер ATtiny10 программируется с помощью AVR USBASP или любого другого программатора, совместимого с протоколом TPI (Tiny Programming Interface), в качестве управляющей программы сам пользуюсь и рекомендую вам использовать AVRDUDESS.

Подключение ATtiny10 к программатору AVR USBASP.
Подключение ATtiny10 к программатору AVR USBASP.
Программирование ATtiny10  с помощью AVRDUDESS. Не забываем про установку фьюз.
Программирование ATtiny10 с помощью AVRDUDESS. Не забываем про установку фьюз.

Программировать микроконтроллер необходимо при напряжении питания 5 Вольт. Далее, если вы обратили внимание, пин номер 6, он же порт PB3, я использую для подачи управляющего сигнала, но беда в том, что у него главное назначение это сброс - Reset. Чтобы изменить назначение порта на вывод данных необходимо прошить специальный фьюз RSTDISBL.

Однако микроконтроллер после этого перестанет программироваться обычным способом. Чтобы заново прочитать или зашить микросхему, на вывод номер 6 необходимо подать 12 Вольт на всё время процесса чтения/записи.

Реализация.

Замечательно. Теперь у нас есть запрограммированный чип. Осталось его как-то поместить в подопытного и проверить в реальных условиях. Так уж вышло, что ко мне вернулся некогда отремонтированный Harmann Onyx 5. Теперь он не включается снова и виновником стал как раз этот самый злосчастный логический чип. Вот на нём мы и потренируемся сегодня.

Микросхемка на платке куда удобней для пайки в устройство.
Микросхемка на платке куда удобней для пайки в устройство.

Для облегчения себе задачи с пайкой такой мелкой букашки, на куске текстолита я нацарапал дорожки и посадил микроконтроллер туда. Затем припаял по месту в колонку. В полной уверенности в успехе, жму кнопку а в ответ тишина. Упс...

Стал разбираться. Оказалось на порту PB3 при подаче логической единицы, уровень не поднимается выше 1,5 Вольт. Что это значит? - ничего хорошего, у порта недостаточно тока для управления исполнителями. Придётся дорабатывать схему и добавить к ней транзистор в качестве ключа или использовать готовую микросхему-ключ. С транзистором возиться мне показалось сложно, понадобятся ещё минимум два резистора, поэтому выбор пал на логический ключ. Самый доступный по цене оказался TS5A3166.

Электрическая схема окончательного варианта с ключом TS5A3166.
Электрическая схема окончательного варианта с ключом TS5A3166.

Поэтому заново изобрёл монтажную плату с учётом ключа и распаял обе микросхемы на неё.

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

Платка выглядит немного чужеродно, но функцию должна выполнять как по нотам.
Платка выглядит немного чужеродно, но функцию должна выполнять как по нотам.

Испытания.

В этот раз всё прошло как по маслу. Колонка послушно включилась, приветственно мигая и оповещая нехитрой мелодией включения. Следующее нажатие на кнопку и колонка проиграв мелодию выключилась. Отлично! Этого я и добивался. Я как заворожённый всё нажимал и нажимал кнопку, а колонка играя и мигая послушно всё включалась и выключалась. Эта магия могла длиться вечно, но я наконец взял себя в руки.

Вот таким образом я решил проблему замены логического чипа на кастомный вариант с микроконтроллером ATtiny10, самым маленьким процессором в своём роде. Это именно тот случай, когда мал, да удал.

А что же энергопотребление?

Я замерил ток, который потребляет новоиспечённый контроллер совместно с микросхемой аналогового ключа. На самом деле это очень важный момент, т.к. доработка внедряется в портативное устройство со встроенным аккумулятором. Не хотелось бы, чтобы моя задумка "съедала" батареи слишком быстро. Итак, значение тока в режиме ожидания нажатия кнопки не превысило 450 мкА. Что я думаю по этому поводу? - это просто отличный результат. В момент обработки команд - 650-700мкА, что тоже в общем то неплохо. Как считаете?

Что в итоге.

Данная задумка вполне может спасти жизнь целому списку устройств. Я с некоторыми уже сталкивался. Попробую собрать список, здесь, дополняйте его в комментариях если вдруг и сами столкнулись. Итак:

Harmann Onyx

JBL Xtreme 2

JBL Xtreme 3

JBL Charge 4

JBL Charge 5

JBL Boombox

JBL Partybox Encore

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

Статья пришлась по вкусу и вы не знаете как поддержать автора? - Легко, просто нажмите соответствующую кнопку.