Герой заметки — магнитола Kenwood GX806EF2 — славна тем, что устанавливалась в очень большое число экспортных японских автомобилей (взять хотя бы Subaru Forester) и не имеет ни входа AUX для подключения внешних источников звука, ни возможности воспроизвести MP3-файлы с CD-дисков (с внешних накопителей тоже). Магнитола вышла весьма утилитарной для своего времени (2004-2007 года), несмотря на CD-чейнджер на 6 CD. CD-audio, FM/AM-тюнер, и всё, но кассетоприемника, к слову, уже нет.
Но все-таки сделать ей вход AUX можно без порчи внешнего вида и функциональности.
Попалась мне эта магнитола вместе с автомобилем. Вмонтировав андроид-планшет 7″ в будку для навигации я начал искать способы вывести звук с планшета на магнитолу, а покупать для этого новую «голову» совсем не хотелось.
Выяснилось, что многие отключают внутренний CD-чейнджер и подключают серийно производимые эмуляторы с возможностью воспроизведения MP3 через USB, например так, но мне это показалось излишним вандализмом с избыточными затратами.
Передачу звука с внешнего устройства можно решить еще с помощью FM-передатчика, но качество звука с таким вариантом очень плохое и здесь так же присутствует звено с лишними затратами на FM-передатчик и на его размещение в салоне.
В некоторых местах я находил упоминание про отрезание линии AM-тюнера от магнитолы и использование её остатка для внешнего звука, но это неосуществимо с конкретно этой магнитолой, в любых режимах тюнера сигналы идут по одной линии. Было решено проанализировать всю схему магнитолы на предмет «уязвимых» мест.
Склеенную схему главной платы можно посмотреть здесь. Вот интересная часть схемы:
Видео:Введение в шину I2CСкачать
Искомое находится рядом с аудиопроцессором TDA7406 (IC203 на схеме) от STMicroelectronics. Красным я обвел шину i2c, которая связывает главный контроллер с микросхемой IC203, синим — неиспользуемые аудиовходы MD и TAPE. Как выясняется из даташита на эту микросхему, у неё есть 4 раздельных стерео аудиовхода и 4 раздельных моно аудиовхода. Однако, используются они не все, а неиспользуемые «заглушены» конденсаторами об землю (C233-C236 тому пример).
Изучив принцип работы TDA7406, я понял, что можно попробовать вклиниться в управление главным контроллером и задействовать неиспользованные звуковые входы когда это необходимо. Я подпаял на линии SDA и SCL (резисторы R855, R857) провода и подключил к ним логический анализатор:
Выяснилось, что при штатном функционировании контроллер каждые полсекунды запрашивает по шине i2c статус у TDA7406. В этом запросе ничего интересного для нас нет — там флаги состояния TDA7406. Никаких команд управления в покое не встречается:
Самое интересное на шине происходит в момент переключения режимов CD/BAND и при изменении громкости. В таких случаях контроллер дает длинную посылку для регистров управления TDA7406. Эта посылка содержит настройки почти для всех доступных регистров. Вот пример посылки (её небольшая начальная часть):
Разберем это посылку:
0x8C (chip address) — адрес чипа TDA7406 со сброшенным битом R/W (контроллер собирается писать в регистры).
0x60 (subaddress) — адрес первого регистра, с которого начнется запись посылки и некоторые установки порядка записи (в данном случае запись будет производится с нулевого адреса, как впрочем и всегда, когда контроллер конфигурирует TDA7406: он всегда записывает конфигурацию начиная с регистра 0).
0x0E (регистр 0) — конфигурация для регистра 0, то что нам надо, судя по документации: это регистр Input Selector. В нем указывается какой вход аудиомикшера сейчас должен быть выбран и какое усиление (громкость) должно быть у этого канала:
Читайте также: Автомобильные шины зимние 15 радиус
При выборе канала тюнера и при дальнейшей работе с ним (повышение/понижение громкости), контроллер отсылает в поле Source Selector нулевого регистра биты 110. И это очень хорошо, поскольку для того чтобы задействовать под AUX вход MD надо передать в это поле биты 010. Для справки: шина i2c имеет подтяжки к напряжению питания и всегда свободна, а активный уровень на шине — ноль, т.е. управление ведется открытым коллектором (открытым стоком). В любой момент времени любую линию шины i2c можно «дернуть» к нулю без ущерба для всех устройств на этой шине.
Видео:Лекция 308. Шина I2CСкачать
Можно вклиниться в общение контроллера с аудиомикшером в нужный нам момент и превратить режим FM в режим MD. Единственное что требуется — точно отследить нужное время для импульса, чтобы «110» превратилось в «010». И делать это надо каждый раз, когда контроллер разговаривает с TDA7406. Вот нужный нам момент на диаграмме, в момент выделенного красным такта линии SCL надо задавить линию SDA в ноль:
Я нарисовал и изготовил небольшую платку с микроконтроллером Attiny13, с штыревыми разъемами на всех выводах для удобства программирования и дальнейшего подключения к i2c и питанию:
Нижний слой платы я намеренно сделал плоским, без выпирания штырей, чтобы можно без проблем приклеить плату на голову TDA7406.
Осталось дело за малым: припаять к плате с ATTiny13 провода питания, i2c, провода от внешнего разъема 3,5 мм («мама») и проводки на плату магнитолы к линиям MD (предварительно удалив конденсаторы С233, С234):
Прошу прощения за качество фото, был увлечен больше процессом создания, а не документированием.
Синий провод уходящий вверх на фото идет к кнопке News на передней панели магнитолы. Именно она используется для включения перехвата управления аудиомикшером. Нажатием кнопки активируем перехват, еще одним нажатием — деактивируем. Важно: после нажатия кнопки News нужно будет уменьшить или увеличить громкость, т.к. в покое, как мы помним, управление аудиомикшером не происходит, а сам по себе микроконтроллер ATTiny13 никаких посылок в шину не делает.
Видео:Урок 24. Узнаём адреса устройств на шине I2CСкачать
Программа для микроконтроллера получилась очень простой; в основном это решение задачи «в лоб», без применения прерываний. Я вернусь к программе чуть ниже.
Итак, для тех кто решит воспользоваться этим методом для создания входа AUX этой магнитоле:
1. Разобрать магнитолу, запомнив типы винтов и их места.
2. Добраться до основной платы и найти микросхему TDA7406.
3. Изготовить и запрограммировать плату с ATTiny13 (номиналы конденсаторов С1-С3 0,1 мкФ):
4. Приклеить плату к чипу TDA7406.
5. Выпаять с основной платы С233, С234. Припаять проводки от основной платы к плате ATTiny13 по схеме:
Питание для ATTiny13 вблизи TDA7406 нет, т.к. TDA7406 питается от 8 В, а нам надо 5. Тянем к XP2:1 провод от вывода 8 микросхемы памяти IC803 (24C02), корпус SO-8, см. фото выше.
Провод от кнопки News (у неё два контакта, нам нужен тот, что сидит на питании, а не на земле) тянем к XP1:2 (PB3).
6. Припаиваем собственно выход AUX (у меня это фабричный разъем 3,5мм «мама» с проводом, от удлинителя наушников) к плате: XP1:5 левый канал, XP2:5 правый канал и общий провод на XP1:4. Провод от разъема заводим перед этим снаружи откуда удобнее.
7. Подключаем динамики к магнитоле, проверяем.
8. Пайку проводов хорошо проверяем и фиксируем провода к плате эластичным клеем типа «Момента».
Читайте также: Сады с шинами своими руками
Данная модификация работает у меня почти месяц без нареканий. Единственное неудобство — двухступенчатое включение и выключение AUX. Сначала кнопку нажимаем News, а затем страгиваем немного громкость. Этого можно было бы избежать, дописав программу таким образом, чтобы ATTiny сама отправляла конфигурацию регистрам аудиомикшера в момент нажатия кнопки, но я посчитал это излишним вмешательством, усложняющим программу. Но при должном опыте работы с микроконтроллерами такую функцию приделать недолго.
Пара слов о программе. В ней не используются прерывания, а отслеживание тактов (фронтов) на линии SCL ведется по флагам GIFR в циклах. С каждым тактом SCL программа оценивает состояние шины SDA и если оно удовлетворяет последовательности 0x8C 0x60 0x0E, то на линии SDA в нужном месте выставляется лог.0. И так по кругу. При использовании прерываний ATTiny13 тратит много тактов на вход и обработку прерывания и не успевает за тактами; частота i2c для него высоковата: 160 кГц.
Плата в формате PCB P-CAD 2006 здесь.
Прошивка для ATTiny13 в формате Intel hex здесь.
UPD: по просьбе пользователей добавляю информацию о «фьюзах».
Из производства ATTniy13 приходит с запрограммированным битом CKDIV8 в Fuse Low Byte. Его надо снять, записав бит 1 в его поле. К примеру, если у ATTiny13 значение Fuse Low Byte с завода равно 0x6A, то его надо сделать равным 0x7A. Тем самым мы делаем тактовую частоту максимальной (9,6 Мгц); с другой тактовой частотой программа не будет работать должным образом.
Выводим сигнал remote из автомагнитолы с управляемым по i2c усилителем
Видео:Шина I2CСкачать
Сигнал REMOTE (напряжение 12В, которое служит для включения внешних усилителей когда включена магнитола) из современных штатных магнитол вывести не так просто. Если раньше можно было использовать ножку ST-BY микросхемы-усилителя, то теперь разработчики магнитол не используют эту ножку, потому что появились микросхемы-усилители с цифровым управлением.
Можно поискать на плате дорожки, на которых появляется напряжение тогда, когда включается магнитола, но в большинстве случаев они не подходят. Можно подключиться к питанию подсветки дисплея, вот только в этом случае усилитель может включаться незапланированно — до включения встроенного усилителя (что сопровождается щелчками в тракте) или при регулировке климата или при работе парктроника.
Попробую описать другой вариант выхода из положения на примере штатной магнитолы Swing на Skoda Octavia A7
Изучаем устройство
Оконечный усилитель — TDA7563, на него аналоговый сигнал приходит с DSP SAF7741HV.
TDA7563, как выяснилось, очень любят разработчики штатных магнитол из-за того, что микросхема имеет цифровое управление и диагностику по шине i2c, а i2c применяется в магнитолах уже очень давно. Микросхема усилителя при включении магнитолы по команде основного процессора производит тест динамиков, результат теста отдаёт по i2c — определяется обрыв/КЗ, что позволяет блоку магнитолы выдавать эти ошибки по CAN диагностическому оборудованию. В спящий режим микросхема усилителя переводится тоже командами по i2c (нога ST-BY усилителя не используется), что сильно усложняет получение сигнала REMOTE.
Читайте также: Соединение шин между собой пуэ
Вообще, вся магнитола постоянно запитана, независимо от того, включена ли она и включено ли зажигание. Просто все ненужные микросхемы (и усилитель в том числе) засыпают до тех пор пока не понадобятся и их не разбудит основной процессор магнитолы (в нашем случае ).
Состояние включенности габаритов и включенности зажигания магнитола получает по CAN. Обмен с кнопками руля — по CAN до блока шлюза диагностических шин, далее — по LIN до контроллера кнопок в руле.
Видео:I2c шина в iPhone, способы диагностики, причины циклического перезапуска.Скачать
Идея в том, чтобы на внутреннюю шину магнитолы i2c посадить ещё одно устройство на базе простого и дешёвого микроконтроллера, которое будет прикидываться микросхемой усилителя и слушать все команды, которые летят в неё от процессора магнитолы. Причём i2c позволяют нашему «шпиону» оставаться незаметным для процессора магнитолы. Встроенный усилитель будет функционировать как и прежде, а сигнал REMOTE будет формироваться микроконтроллером ровно тогда, когда магнитола будет включать свой встроенный усилитель. Данный способ подойдет для всех магнитол, в которых применена микросхема TDA7563 или совместимые с ней по протоколу обмена.
Само устройство было собрано в выходные на плате, на которой кроме микроконтроллера расположились только 3 резистора и 2 отладочных светодиода (необязательных). Микроконтроллер выковырян из ненужного устройства, поэтому долго над выбором мк я не думал.
Отлаживаем ПО контроллера
Всё достаточно просто. Нам всего лишь нужно реализовать i2c-slave с адресом как у TDA7563 (0x6C) и ждать обращений на запись. Далее нужно принять 2 Instruction byte от процессора магнитолы и их проанализировать. Интересующие биты — Standby Off в байте IB2, Unmute Rear Channels и Unmute Front Channels в байте IB1. Вообще выяснилось, что магнитола сначала выставляет бит Standby Off и с небольшой задержкой — биты Unmute Front Channels и Unmute Rear Channels.
Командные байты я описал в виде структур бит, которые поместил в объединение вместе с массивом из 2 байт, чтобы при заполнении буфера обращаться к нему побайтово, а при разборе команды иметь удобный доступ к битам:
typedef struct
tIB1;
typedef struct
tIB2;
typedef union
IBs;
char Bytes[2];
> tTWI_Buff;
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
А так выглядит проверка команды (я проверяю биты Standby Off и Unmute Front Channels):
Чтобы шпион не мешал чтению состояния из TDA7563, при операциях чтения из слейва будем выдавать байты = 0xFF, чтобы TDA мог в нужные моменты притягивать линию SDA к земле и шпион ему не мешал это делать.
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
📹 Видео
Шина I2C.Скачать
Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать
Микросхемы и программаторы, Шины I2C и SPIСкачать
I2C интерфейсСкачать
Xiaomi Walkie Talkie 1S, 2S. Китайская безлицензионная радиостанция, программирование со смартфона.Скачать
CAN блоки в магнитолах Android или CAN шина в автомобиле ВОПРОС/ОТВЕТСкачать
Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)Скачать
Тестируем самую дешевую магнитолу на Андроид. Не ведитесь на уловки китайцевСкачать
Подключение нескольких устройств по шине i2cСкачать
Быстрая магнитола 2+32 4 ядра. Почему нельзя такое покупать и устанавливать. Магнитола не работаетСкачать
Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать
ремонт (улучшение) магнитолы 2DIN с АлиэкспрессСкачать
I2C-адаптер для дисплеев на HD44780Скачать
Урок 26.3 Соединяем две arduino по шине I2C #iarduinoСкачать