Попробовал, проверил на Wiring не получится читать шину :( потому как минимальное время функции pulseIn 10мкс , а нам нужно 7мкс
Вид для печати
Попробовал, проверил на Wiring не получится читать шину :( потому как минимальное время функции pulseIn 10мкс , а нам нужно 7мкс
Похоже идет конфликт логических адресов двух чейнджеров. Можно попробовать поменять в адаптере логический адрес чейнджера с 63 на 43 или просто отключить регистрацию виртуального чейнджера (это проще). Кстати второй вариант просто проверить, поставив неправильный адрес головы и чейнджера, тогда виртуальный чейнджер не сможет зарегистрироваться и штатный сможет нормально работать. От адаптера, что требуется только считывание тача и кнопок или звук через чейнджер тоже планируется заводить?
За лог спасибо, только нужен еще момент регистрации камеры в системе. Но его можно я попозже попрошу, я сегодня попробую RGB на приусе активировать. Еще вопрос, а TV у Вас есть на машине? Думаю как проще NTSC вход будет активировать, какое устройство проще эмулировать.
Все-таки Wiring - это только дополнительные библиотеки для удобства программирования и никто не мешает реализовать эти функции на обычном C. Думаю можно написать на С библиотеку для arduino, которая будет читать и писать в шину, а всю остальную обработку можно уже и на Wiring делать. Вчера развел sheild плату для драйвера, сегодня если успею ее соберу и попробую что-нибудь написать.
Думаю что лучше написать функцию read_frame на ассемблере
Как я уже писал, с адресами играться пробовал (менял их через терминал) результата не было... То ли МК их не меняет, то ли причина не в этом... Звук естественно нужен, как же я буду КарПС слушать :)
В Си не силен, сможете мне прошивку сварганить с другим адресом ченжера? Ну и еще одну вообще без его регистрации? Для теста?
К стати опрос устройств и регистрация происходит только при запуске системы? если допустим через 5 секунд подключить контролер к шине он подрубит доп ченжер или нет? Заранее спасибо! :)
ТВ имеется, если надо могу скинуть лог его включения :)
Вот прошивка без регистрации Вложение 4727. Просто заблокировал отправку любых команд в шину. Логический адрес поменять сложнее он там во всех командах прописан, постараюсь сделать завтра - послезавтра. Еще уменьшил буфер до 300 символов, при 350 портятся внутренние переменные (заметил на адресе головы и чейнджера).
Если подключить контроллер к шине и включить его, он зарегистрирует чейнджер. Контроллер регистрируется при включении (контроллера, голова при этом уже давно может работать) или по команде головы.
Вообще нужен лог не только команды включения но и регистрации всех устройств. Кстати куда у Вас подключен TX+, ТХ-? Сегодня с другом активировали все-таки RGB вход на приусе без навигации. Активировали при помощи навигации с другой машины. TX+, TX- подключали к 28ми контактному разъему монитора и к разъему чейджера. В обоих случаях адаптер показывал только широковещательные сообщения от головы. Такое чувство, что голова не на все свои порты TX+, TX- шлет все соообщения.
Ждем с нетерпением!
Спасиб за прошивку! С ней ченжер ведет себя адекватно, значит дело в "кривом" адресе... Если не сложно чиркни под мои адреса :) Голова 110, ченжер, любой отличный от того что у тебя :)
Сегодня провел небольшой анализ, вычислить пока удалось в куче хлама, расход и одометр, правда одометр скорей всего только младшие байты...
< d 1C6 110 0700E55FDC0FBA80 - одометр, используются байты 0FBA, измерение идет в десятках километра. Старший байт пока не найден...
< d 1C6 110 0700E55FD8020780 - расход горючки, используются байты 0207, при работе только электро двигателя значение FFFE, далее чем меньше число тем больше расход. К какому то знаменателю чтоб перевести в нормальные единицы пока не пришел, надо кататься изучать...
Что-то не получается у меня драйвер новый запустить. На выходе RX постоянно висит логическая 1. Спаял вроде все правильно. Даже схему в протеусе смоделировал, правда там только MAX487 есть в библиотеке, но тоже вроде RS485 драйвер. В общем не выходит.
Написал вот такую программку для arduino
По идее она должна мигать светодиодом при приходе команда в шине да 1 и 0 в com-порт писать. Сможешь проверить у тебя она что-нибудь выдавать будет.Код:int ledPin = 13; // LED connected to digital pin 13
// pin 7 arduino, TX
#define DATAOUT_DDR DDRD
#define DATAOUT_PORT PORTD
#define DATAOUT_PIN PIND
#define DATAOUT 7
// pin 8 arduino, RX
#define DATAIN_DDR DDRB
#define DATAIN_PORT PORTB
#define DATAIN_PIN PINB
#define DATAIN 0
// инвертируем сигнал
#define INPUT_IS_SET (bit_is_clear(DATAIN_PIN, DATAIN))
#define INPUT_IS_CLEAR (bit_is_set(DATAIN_PIN, DATAIN))
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output
// AVCLan TX+/TX- read line INPUT
DATAIN_DDR &= ~(1<<DATAIN);
DATAIN_PORT &= ~(1<<DATAIN);
// AVCLan TX+/TX- write line OUTPUT
DATAOUT_DDR |= 1<<DATAOUT;
DATAOUT_PORT |= 1<<DATAOUT;
Serial.begin(115200);
}
void loop(){
while (INPUT_IS_CLEAR){
}
digitalWrite(ledPin, HIGH); // sets the LED on
Serial.print('1');
while (INPUT_IS_SET){
}
digitalWrite(ledPin, LOW); // sets the LED on
Serial.print('0');
}
Вот схема и разведенная плата драйвера:
Вложение 4761
Вложение 4760
Ты RX с ТХ местами не попутал?
Осциллографом не смотрел?
Схема подключения драйвера 100% рабочая , на коммерческих адаптерах по этой схеме сделано.
Не перепутал. Но сейчас на всякий случай RX c TX я местами поменял и TX+, TX- попробовал все комбинации.
Можешь у себя код для arduino проверить, чтобы знать, что он рабочий и искать проблему в драйвере шины? Осциллографа у меня нет :(
А я пока осциллограф буду искать.
Прошивку сделаю, сегодня сделал настраиваемый режим read only, а также фильтрацию лога по адресам уже в адаптере. Т.к. все сообщения он передать не успевает, нужно лишнее выбрасывать. Пришлось буфер вернуть обратно до 240 байт иначе, похоже он трет другие переменные в памяти. Непонятно как этот вопрос контролировать - хватает программе доступного 1кб памяти или нет.
По расходу здесь на форуме уже выясняли какие значения чего значат. Даже плагин для центрифуги написали.
Попробовал код на Ардуино все работает, правда я без драйвера тестил , подал переменку на 8 Пин и в терминалке поскакали 10101010101010101010101
по схеме драйвера - лучше использовать микросхему ST485 , есть еще тонкость , сигнал на-с микросхему по сравнению с схемой на кане инверсный .
Микросхему поменяем, хоть не зря панельку на плату поставил. Про входной сигнал я догадался, в программе написано:
про то что на вход может влиять уровень выходного сигнала как-то не подумал сразу.Код:// инвертируем сигнал
#define INPUT_IS_SET (bit_is_clear(DATAIN_PIN, DATAIN))
#define INPUT_IS_CLEAR (bit_is_set(DATAIN_PIN, DATAIN))
Сейчас проверил, поменял инициализацию входа на:
нолики с единичками забегали. Спасибо за подсказкуКод:// AVCLan TX+/TX- write line OUTPUT
DATAOUT_DDR |= 1<<DATAOUT;
DATAOUT_PORT &= ~(1<<DATAOUT);
Последние обновления:
снял лог на своей машине с оригинальным чейнджером. Прояснился ряд вопросов, появились идеи. Вот логи, может кому пригодятся Вложение 4777, там же новые логи с головой 56042.
В итоге родилась новая прошивка Вложение 4778, изменения по ней:
1. Добавлены ответы на запросы головы о статусе (E0, E2, E4), но только для моей головы (т.е вида 04003143E0). Остальные не поместились
2. Добавлен ответ на запрос головы о состоянии чейджера из сервисного меню, по идее виртуальный чейнджер должен проходить проверку в сервисном меню.
3. Для экономии места убрана правльная посылка статуса при нажатии кнопок scan, rand, prt.
Столкнулся с неприятной особенностью, что прошивка не помещается в контроллер, вернее начиная с определенного размера появляются глюки в работе. Поэтому пришлось выкинуть реакцию на нажатие кнопок, новые возможности (настройки для отмены регистрации чейджера и фильтр лога выдаваемого контроллером). В общем пока нормально работает прошивка размером только 4796 байт, при 4950 уже были проблемы. Не понятно почему так мало. Бутлоадер у меня всего 1 кб.
Наверное пора переходить на arduino и его ATMega168. По задумкам в текущей плате нужно будет только микропроцессор поменять, остальное должно будет работать и с новой прошивкой.
Вот вариант этой прошивки под логический адрес чейджера 43 Вложение 4779 по идее для него нужно выставить физический адрес чейджера 0240.
Я так понял, что новая прошивка уже не актуальна, в связи с покупкой комерческого адаптера, но по идее она должна нормально отвечать на запросы головы
если есть возможность, проверь пож. заработает ли новая пошивка как надо у тебя.Код:< d 120 360 04003163E0
< d 120 360 04003163E2
Еще нашел интересную особенность - штатный чейджер при включении немного другой сигнал на регистрацию
Как я понял, чейджер посылает в AVCLan запрос на регистрацию логического устройства 43. т.к. сигнал широковещательный не нужно знать адрес головы, а узнаем мы его по ответу. И скорее всего если в системе уже есть чейджер с таким номером - голова тоже об этом скажет. Таким образом можно сделать автоопределение адреса головы и логического/физического адреса чейджера.Код:< b 240 1FF 0401111343
< d 140 240 0400120103
В общем как нибудь на досуге попробую зарегистрировать в голове два чейджера с одинаковыми адресами. Посмотрим, что будет делать при этом голова и штатный чейджер.
Собрал данный девайс, заработал сразу на моём приусе, тока с бутлоадером туговато, шью каждый раз как надо понипрогом. Пробовал через юсб на фт232, тож работает. Но как - то со штатной навигашкой не охота юзать комп , как бы победить активацию РГБ. Моё предложение - надо осваивать паралельный порт посредством фт245, скорость будет хорошая. Ну и бутлоадер под это дело найти, а там глядишь и комерческие дрова подойдут.
В выходные сидел вспоминал-изучал басик :)))
Вот что получилось, так сказать черновой вариант :)
Сегодняшняя поездка на работу :)
А бутлоадер из первого поста или из этого? Рабочий последний.
Активацию RGB победить можно только эмулирую навигацию. Т.е. нужно снимать лог и повторять команды и ответы на них. Тема нужная, мне и самому не очень хочется навигацию возить, на ее место как раз компьютер хорошо поместился. Да и друг у меня сейчас CarPC собирает на приусе. У него вообще навигации нет. В общем нужно осваивать.
С ft245 вопрос спорный, учитывая что 1 бит в AVCLan передается 40 мкс, общая скорость передачи всего 25кбит/с. Вроде как скорости com-порта предостаточно, правда пока принимается сообщение, в порт ничего не шлется и остаются короткие промежутки между посылками. Но судя по даташиту даже ATmega8 на 16МГц лучше всего работает с портом на скорости 1Мбит/с, плюс буферизация на самом контроллере, да и большие скорости нужны только, чтобы считать полный лог на шине к которой подключены много устройств. После регистрации всех устройст трафик в шине падает и достаточно небольших скоростей com-порта.
Еще плюс com-порта, что в случае реализации адаптера на Arduino нужно сделать только драйвер на одной микросхеме. Вполне доступно, в отличии от пайки ft245 c шагом ног в 0,8 мм.
В любом случае проект открытый и можно легко добавить в него и такую функцию, достаточно поправить файл com232.c
А можно лог снять инициализации обоих чейджеров, может чего прояснится.
Классно, жаль у меня нет встроенного trip'а. А сами сообщения из которых берется эта информация можно увидеть, с расшифровкой естественно?
Давно хочу дописать драйвер AVCLan, чтобы можно было подключаться к нему и получать полный лог шины, а то сейчас получается шину читать может только одна программа. Даже в данном случае использовать тачскрин и читать расход уже проблематично. Была идея использовать windows message для обмена логами. Таже тестовый пример набросал на delphi. Может кто соберет это все вместе?
Цитата:
Сообщение от ak1976
Плагин AVC-Lan для Centrafuse написаный Kolychev, общается с внешним миром через windows message, так что плагину можно посылать сообщения . Если будут вопросы можно у Kolychev спросить на форуме[/QUOTE]
Сегодня вечером попробую снять лог.
Хм... Я как то начал расписывать коды, что удалось расшифровать, но услышал фразу: "По расходу здесь на форуме уже выясняли какие значения чего значат. Даже плагин для центрифуги написали." Так сказать если все это есть зачем повторять еще раз ;-)
Трипа у меня сейчас тоже нет (встроен в нави, видео которой сейчас отрублено) Да и зачем он нужен, если есть данные о пробеге, расходе и тд тп можно самому сделать трип какой душе угодно :)
Зачем что то использовать если можно расшарить ком порт и цеплять на него хоть 10 программ??? Например этой прогой "http://www.eltima.com/products/serialshare/"
Я подумал что что-то новое удалось найти или как-то систематизировать информацию.
Когда я писал про отсутсвие трипа у меня, то имел ввиду не сам вывод на голове, а отсутствие устройства которое передает эти данные в шину. Мне их можно получить только подключившись к форсунки и датчику скорости и самому дальше вычислить.
Тоже вариант, хотя и платный. В общем нужно подумать как лучше сделать. Если согласятся разработчики комерческого адаптера, можно попробовать сделать общий протокол обмена драйвера и сторонего софта для комерческого и открытого адаптера. Тогда сторонний софт может быть общим. Пока правда из стороннего софта у комерческого адаптера только плагин для центрифуги, у открытого могу предложить приемник для ик пульта на руль с управлением громкостью, перемоткой и т.д. на голове
Вот оно что... К форсункам эт тоже идея, только еще надо добавить переменную датчика давления в форсунках, так как оно плавает, впрыск при одинаковом времени открытия будет разным...
Найди удалось в принципе много данных: Температура ДВС, Заряд ВВБ, Расход сердний, что отображается на дисплее штатно, расход моментальный, пробег на баке, включение режима EV, нажатие на тормоз и тд тп, но они думаю узкой направленности и подойдут только примусам... Кому интересно могу расписать. Сейчас дописываю програмку для трип компа, будет отображать данные по поездке, а так же следить когда надо менять масло и тд тп :)
Ну платный софт в нашей стране понятие не однозначное :) Не думаю что кто то юзает лицензию на ту же винду в БК :)
Поигрался сегодня с адресами, доп ченжер появился!!! :) На экране крутится трек до 3 минут и все, на этом ченжер отваливается... Может через каждую минуту голове надо говорить что мол я тут я здесь не отключай меня :)? К стати Трип комп дописал, нашел так сказать предпоследний глюк :) Терь сие выглядит так:
Так что у кого 20 приус и собран АВЦ лан кричите заделюсь :)
Вопрос к Чипу, с каких контактов взять балансный звук??? На разьемах головы М13, М14, М15 он присутствует??? Чтот не где распиновку найти не могу...
Раз в секунду голове отсылается статус, в том числе там текущее время трека есть, так что не в этом дело. Скорее всего голова не дожидается ответа на какой-то свой запрос. Нужно лог смотреть.
У меня у друга тоже 20 приус, сейчас ему комплектующие для компа едут, как приедут - будем ставить. Подключу чейнджер к нему посмотрим, что там нужно голове.
Балансный звук берется с AZ-FM и подается на чейджерный разъем на голове.
Вложение 4877
Распиновка похоже вот такая, вот еще вариант. В принципе одно и тоже, нужно только померить BATT, ACC чтобы выяснить номера ног.
Ага, спасибо, уже все сделал!!! :)
Правда с логом увы теперь не получится... Ченжер у мя исдох без видимых причин, вроде не чего не коротил, кроме 4 проводов балансного звука не чего не трогал... А нет его не в системе не диски не отдает не принимает, возможно где то предохранитель сдох, но хз через какой он запитан...
К стати вопрос, пытаюсь отправить команду с терминала пишу допустим:
"< d 110 178 06002558840100"
Отправляется же какая то чушь с кучей нулей, может то же какой то особый формат нужен для отправки?
лог я имел ввиду обмена адаптера и головы. Скорее всего голова постоянно запрашивает какой-то статус у адаптера, на который он не отвечает (типа команд у которых в конце E0, E2, E4).
Из терминала нужно просто посылать 06002558840100
Если из виндового гипертерминала, то команда должна выглядеть
S06002558840100W - для обычной команды
S06002558840100Q - для широковещательной
Все команды отправляются от адреса чейджера голове.
Просто у меня клавиши на руле ловятся как команды от навигации... следовательно чтоб эмитировать допустим их нажатие надо посылать команду от нави...
Чтоб эмитировать клавишу включения электро мобиля команда должна быть уже от другой системы, в общем не удобно... Может в прошивке сделать чтоб отправка шла того что приходит на комп порт целиком, без добавления адреса получателя?
Все-таки не совсем корректно посылать команды от чужого адреса. Нужно проверить вообще возможно ли такое (поменяв ID чейнджера в адаптере).
Возможно лучше будет посылать эти же команды от имени чейнджера. У меня получалось включать, радио, сд, менять громкость.
Подозреваю что в случае изменения громкости кнопками на руле от нави идет команда типа
d 178 110 050025749C03
Если отправить с терминала команду 0025749C03 громкость так же увеличится.
Возможно и другие команды будут восприниматься от имени чейджера.
В текущую прошивку уже ничего не помещается (последние добавления даже пришлось удалить, чтобы она заработала). Я нашел в чем причина, но нужно достаточно много переписать в прошивке. Я хочу сделать общий код у адаптера и у платы для arduino. Так будет легче добавлять новые возможности. В адаптере нужно будет только кварц перепаять на 16МГц. Думаю на этой неделе закончить библиотеку для arduino, в ней сразу будет заложена возможность отправлять команды от разных адресов.
Есть вопрос, куда подключен адаптер на твоем приусе? Я так понял, что у приуса несколько входов tx+/tx- на голове и мониторе. С другом пробовали подключаться к двум из них и почему-то в шине были не все команды, а только широковещательные команды от головы. Т.е. кнопки не удалось считать, команды от тача.
У башки вроде 3 входа-выхода TX+/TX- я подключался к выходам что идут к навигации, на другие не пробовал...
ak1976 ты где пропал?
все шины внутри должны быть замкнутыми...
Давно сюда не заглядывал, еще актуально?
Если да то чиркни на leon_vs@mail.ru
Я так понял он сам с тобой списался. И уже давное ездит с этой программой.
Теперь плата получила новую жизнь. У нее теперь прошивка совместимая с arduino
Для использования этой прошивки нужно поменять кварц на 16МГц и заменить микроконтроллер на ATMega168. Теоретически можно использовать и ATMega8, но прошивка с бутлоадером уже не помещаются вместе. Можно только прошить прошивку с помощью программатора (нужно будет выставить в arduino тип платы, например на "Arduino NG or older w/ ATmega8" и поменять в файле boards.txt максимальный объем прошивки для нее.
Т.к. старый бутлоадер периодически глючил, я решил заменить его на бутлоадер от ардуино. Теперь шью плату прямо из arduino-018. Пришлось только немного подправить бутлоадер, т.к. светодиод на avclan-mini расположен на другой ноге МК.
Новый бутлоадер во вложении
Вложение 9660
Ну в общем то и все, теперь новые прошивки для платы и софт будут выкладываться в ветке AVC-Lan адаптер на Carduino
Прошивка теперь нормально эмулирует чейнджер, есть варианты для эмуляции навигации. Достаточно просто теперь писать эмуляцию других устройств (на очереди эмуляция камеры заднего хода для активации видео входа на голове).