Корок за кроком рішення таки склалось в щось, що, нарешті, не соромно показати. Дуже надіюсь, що це фінальна версія і більше про це писати не доведеться.
Хронологія:
Нова плата
Кілька ітерацій розробки модуля за допомогою пайки монтажними кабелями, мали багато недоліків починаючи з складності, завершуючи надійністю. Тому, як логічний результат, я таки прийшов до створення власної плати.
Виглядає чудово!
Проте я допустив кілька помилок:
Рішення:
Або підключити плату до Android, налаштувати і відключити кабель. Не знаю чи буду виправляти ці недоліки в майбутній ревізії плати.
Сама плата спроектована таким чином, щоб використати готові модулі Arduino pro min, UART модуля на мікросхемі CP2102 та перенести всі елементи з обох готових CAN модулів з невеликим додаванням елементів:
Щоправда, я додатково замінив танталові (жовті) конденсатори на керамічні 10uF.
Результат:
Прошу звернути увагу, що з плати Arduino я скинув елементи, які не будуть використовуватись включно з конденсатором C3, який відповідає за під'єднання до піна DTR. Причину описав трішки вище.
Варто додати розшифрування пінів колодки:
Піни 10/9 поки не використовуються, це відгалуження від проводів RX/TX якими магнітола обмінюється даними з стандартним CAN модулем. Для майбутніх експериментів.
Далі розпаяв колодку і врізав її в шлейф проводів.
Для прошивки потрібно взяти скетч отут citroen can transceiver.
Зміни в програмні частині
Об'єкт конфігурації.
Весь цей об'єкт записується в EEPROM плати arduino, при внесені зміни в структуру (не значень, а саме в структуру) цього налаштування потрібно не забути змінити номер версії конфіга.
Потенціометр для емуляції натискання кнопок.
Виділені червоним стовпці це "тапи" потенціометра MCP41100 для генерації опору. Перша цифра це тап для короткого натискання, друга - для довгого. Номери тапів обрано не довільно, а на основі мого невеликого дослідження:
Команди через Serial термінал.
При підключені через Serial потрібно встановити baud rate 38400. За допомогою команд можна отримати чи передати і зберегти нові налаштування. Для отримання поточних налаштувань використовується команда get config:
Що воно таке? Сам рядок конфігурації складається з трьох частин: {id};{data};{checksum}. checksum це сума числових номерів символів по ASCII таблиці з частини data і використовується для верифікації чи отриманий рядок прийшов без битих символів.
Якщо не збираєтесь використовувати аплікацію для налаштувань, або маєте з нею є проблеми, а налаштувати потрібно, то верифікацію по checksum можна вимкнути, видаливши перевірку:
Таким чином ручні налаштування можна буде робити значно простіше. Щоб передати налаштування просто візьміть отриманий рядок, який вас цікавить, внесіть зміни і відправте його знову в термінал. Arduino повинно застосувати налаштування моментально. Перевірити можна викликавши get config ще раз. Якщо налаштування влаштовують, то відправте в термінал save config аби поточні налаштування записались в пам'ять arduino. В цьому випадку плата повинна написати в термінал config saved.
Налаштування через аплікацію
В перших ітераціях налаштування проводилось рубками через Serial термінал з використанням ноутбука як я описав вище. Час йшов і на світ з'явилась аплікація для android, за допомогою якої можна змінювати налаштування напряму з планшета:
Тут ніби все досить наглядно, єдине, що може бути не зовсім зрозуміло, це галочка "Use dynamic volume". Згоден, що назва не надто зрозуміла але суть така: в кан боксах XP є можливість прокидання вибраного рівня гучності з магнітоли в кан шину, а значить, що можна динамічно змінювати гучність на самому підсилювачі, а не тримати фіксовану гучність. І воно справді працює добре, єдине, що довелось додати можливість не опускати гучність нижче певного мінімуму і не підіймати вище певного максимуму.
Галочка Debug відкриває невеличке вікно з пакетами, якими обмінюються пристрої:
Ну і кнопочка налаштування кнопок керма:
Суть в тому, що при натисканні галочки навпроти відповідної кнопки вмикається перехоплювання CAN пакета з інформацією про дану кнопку, коли кнопка натиснута, то біт в пакеті підміняється на 0, натомість плата генерує опір по підключенню до KEY магнітоли. Тобто генерується аналоговий сигнал замість цифрового. Далі цю кнопку можна замапити в меню налаштувань кнопок керма самої android системи.
Налаштування застосовуються в реальному часі, проте щоб записати їх в пам'ять arduino потрібно натиснути кнопку Save config. Тоді після втрати живлення налаштування збережуться.
Аплікація лежить за тим же посиланням: citroen can transceiver.
Якось так.
Пробіг 268000 км.