После пары месяцев испытаний, поездки на море, можно писать об успешном завершении написании прошивки.
Прошивка работает с четыремя видами плат, вид платы настраивается в sketchbook\libraries\AVCLanDrv\config.h
в нем надо расскоментировать одну из четырех строк
//#define AVCLAN_ST485
//#define AVCLAN_PCA82C250
//#define AVCLAN_MINI_PCA82C250
//#define AVCLAN_RESISTOR
Платы:
1. AVCLAN_ST485
Плата на базе arduino и драйвера на микросхеме ST485
Схема и разведенная плата в формате Eagle во вложении. Схема также содержит ключ для управления адаптером AZ-FM
AVCLan_sheild1_1.rar
2. AVCLAN_PCA82C250
Плата на базе arduno и драйвера на микросхеме PCA82C250
Схема и разведенная плата в формате Eagle во вложении. Я поленился рисовать на ней ключ для AZ-FM. Желающие могут его скопировать из предыдущей схемы и прописать команды для и его инициализации и работы в config.h
AVCLan_sheild2.rar
3. AVCLAN_MINI_PCA82C250
Плата
avclan-mini в которой перепаян кварц на 16МГц и заменен микропроцессор на ATMega168 (в теории должно работать и с ATMega8, но с бутлоадером уже не помещается, только если программаторам заливать прошивку). Так же для этого варианта пришлось снизить скорость com-порта до 115200. Бутлоадер я взял от ардуино, только поправил его чуток, т.к. светодиод на плате находится на другой ноге.
4. AVCLAN_RESISTOR
Плата на базе arduino и драйвера на 4х резисторах.
Схема в формате Eagle во вложении. Честно говоря, этот вариант теоретический, в железе я его не собирал.
AVCLan_sheild3.rar
Я собрал и опробовал с 1 по 3 варианты плат. Мне больше понравился вариации на микросхеме PCA82C250 (потому как сразу заработал на большинстве голов) вариант на микросхеме ST485 иногда требовал подбора номинала резисторов R2, R3, R6
В машине у меня сейчас работает перепрошитый вариант на avclan-mini. У друга, который делал прошивку с навигацией на ST485.
Собственно прошивка.
sketchbook_20100805.rar
Прошивка для arduino-018 распаковываем архив в папку с ардуино. Выставляем тип платы в файле sketchbook\libraries\AVCLanDrv\config.h
Компилируем и заливаем.
Прошивка разбита на три части:
1. Собственно драйвер AVCLan - библиотека AVCLanDrv отвечает за работу с шиной AVCLan и выполняет всю грязную работу за нас.
2. Скетч AVCLan_mini.pde - основная программа, в которой собираются все части прошивки и описаны все сервисные функции, ее тоже не придется править.
3. Ну и самая изменяемая часть прошивки - это драйвера устройств. В данном случае CD чейнджера - библиотека AVCLanCDch. Так же есть библиотека AVCLanNavi, которая написана на базе
прошивки kostya78rus и эмулирует навигацию и чейнджер. Ее мой друг выложит чуть позже.
Подключается библиотека с эмулируемым устройством в файле AVCLan_mini.pde в строке
#include <AVCLanDrv.h>
Теперь, что умеет текущая прошивка.
1. Автоматическое определение адреса головы. Определяет адрес стабильно, за два месяца работы сбоев не было. Адрес можно задать и вручную.
2. Сервисные функции (для запуска нужно набрать в терминале соответствующую команду)
P - вывод конфигурации (адрес головы (который определился и который зашит в eeprom), адрес эмулируемого устройства, режим "только чтение", количество переполнений буфера отправки в com-порт
M - включение / выключение режима "только чтение", т.е. любую прошивку можно превратить в снифер, который будет только слушать шину.
V - вывод версий компонетнов
S - начало команды отправляемой в шину (формат совместим с AVCLan-mini)
W - конец прямой команды, например S002574901903W
Q - конец широковощательной команды
H - конец задания адреса головы, например S0110H (S0000H - для автоматического определения адреса головы)
? - помощь по командам
команды для отладки железа
h - выставляет высокий уровень на шине AVCLan
l - выставляет низкий уровень на шине
i - освобождает шину, переходит в режим чтения
M - отправляет тестовое сообщение в шину (1 360 140 050001121063)
3. При нормальном приеме в com-порт выводится принятое сообщение, при ошибке строка R#, где #-код ошибки.
4. При ошибке в отправке сообщения, выводится строка W#, где #-код ошибки и сообщение отправляется повторно. Количество повторов в константе MAXSENDATTEMP в файле config.h, по умолчанию 3 раза.
Если есть интерес, процесс написания собственной прошивки для эмуляции какого-нибудь устройства могу описать.
Написание сводится к описанию запросов головы и ответов на них.
Все вопросы и ответы хранятся в PGMEM, т.е. ограничений на количество описываемых запросов и ответов (как было в прошивке AVCLan-mini) нет. Точнее количество ограничено объемом флеш памяти МК.
Так же реализовано описание запросов по шаблону, т.е. можно описать множество запросов статуса E2 одной строкой (разные головы немного по разному запрашивают статус и как раз с этим были проблемы в пошивке AVCLan-mini).
Весь софт можно взять от
AVCLan-mini
Единственно, что был дописан драйвер, точнее в него был добавлен новый функционал. Он теперь умеет регистрировать горячие клавиши и по ним выполнять определенные действия (запускать программы, посылать нажатие клавиш, отправлять сообщения в AVCLan)
Обновленный драйвер с исходниками во вложении. В нем же мой файл avclan.ini с настройками.
avclan-mini-driver_20100805.rar
Для облегчения описания горячих клавишь служит программа ShowHotKey.exe, она показывает коды клавишь, которые нужно записать в avclan.ini
Я собрал вот такую
платку, она у меня совместно с нарульным пультом JVC эмулирует небольшую клавиатуру. И теперь с этого пульта, я могу не только переключать треки в центрефуге и изменять масштаб в гармине, но и регулировать громкость головы (даже когда она играет свое собственное радио)
P.S. Chip а как отредактировать свой старый пост? Хотел все это выложить в шапке темы, но так и не нашел как. Раньше вроде можно было.