K-CAN Проект

Чип тунинг, Standalone и piggyback електроники.

Модератор: bum_bum

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 31 Май 2016, 10:26

Още малко работа сръших по описването на съобщенията, но ще изчакам да се натрупа и тогава да я публикувам.
Междувременно реших ,че е полезно да добавя още малко информация за проекта,


http://postimg.org/image/96qu49y5n/

Поне за момента, така виждам нещата.. (отворен съм за предложения, критики, забележки...)

Предполагам по картинката,повечето неща стават ясни....
Захранването в момента е на постояннен ток (независимо дали колата е на контакт или не), но мисля, да се преместя на линията която се изк. Х мин след загасянето на колата.
Въпросното захранване ще се ползва от : Arduino-то, RPi/OPi-то и USB Hub-чето. От своя страна USB Hub-а ще подава ток за таблета/дисплейя.

Arduino-то ще контролира реле(та) което "пуска" OBD II порт-а на колата и ще праща/получава съобщения от RPi-то през USB.
(М/у другото имам въпрос към Nickelback относно проблем който имам, вероятно препълване на буферите на MCP2515 , но ще го напиша най-долу в коментара.)
Към него евентуално ще закача и GPS модула (SparkFun CanBus Shield-а има порт за приличен GPS който предлагат)

RPi/OPi-то (за момента кода е на python и поне докато е в development надали ще го пренапиша на друго... но в последствие, вероятно ще е желателно да е на C, поне основната част).
За уеб (и уеб сокет) сървър се ползва python tornado. Интерфейса е HTML5 и JS само. (jquery,bootstrap,highcharts,alertifyjs). Ъпдейтите на информацията за визуализиране се изпращат през уеб сокетчета.
ympd + mpd за аудио плейър и интерфейс към него. (Като може да се контролира през уеб интерфейса или от копчетата на волана /Следваща песен, Предишна песен, Старт, Стоп/)
Може да се използва FM транзмитер или директно да се закачи към Aux IN-а на оргиналния касетофон/CD...
Също така RPi/OPi-то е и hotspot (с една скрита мрежа само за мен и една друга скрита за "гости" ), 3G-то ще се ползва за получаване на интернет връзка и изпращане на SMS-и при нужда.
OpenVPN ще държи перменентен тунел (като има връзка) с мой сървър, където ще се записва разни си там неща (GPS позиция, Trip информация и тнт и тнт...) , разни файлови синхронизаций (ъпдейти?)
USB Flash Drive-чето ще се ползва за мултимедия.... automount + indexing и тнт..

Последната част е дисплейя.... който може да е някакъв HDMI дисплей или таблет закачен на WiFi-то.... тъй като 'интерфейса' е уеб, няма реално значение дали дисплейя ще е на HDMI или не...
Та , това остава малко "според наличния хардуер" :)


И малко да сондирам в главата на Nickelback.
Имам проблем с четенето на съобщения от CAN bus-а.... може би препълване на буфери?
Да обесня по-подробно... средното натоаварване на K-CAN bus-а при мен е 5-7% (при не запален двигател) и 10-15% (при запален двигател). (При скорост 100kbps на шината).
MPC2515 трябва да е способно на 1Mbps скорост, следователно при ~10-15% натоварване на 100kbps, това би било около 1-1.5% от капацитета му? Изглежда като доста далеч от възможностите.
аниуей, до колкото прочетох за него, той има 2 RX + 1 (MAB*), 3 TX буфери. За да влезне нещо в RX буфер, трябва да е минало CRC проверка и се предполага, че е ОК?
Ако го разбирам правилно, след като дойде съобщение и се провери CRC-то ще е ОК, трябва да влезне в MAB и от там да бъде пратено към RXB0 или RXB1 (който е свободен? или според филтър? Ако няма филтри?),след кое да се вдигне IRQ и съответно Arudino-то чете съобщението и го праща към USB-то.
Ето този либ ползвам....
https://github.com/sparkfun/CAN-Bus_Shield/tree/master/Libraries/Canbus

Ето обаче какъв проблем се полувачава при мен
canlog.log.2660:ID: aa -0- Data: [8] fe d2 fc 0 0 0 84 0
canlog.log.2660:ID: 1ee -0- Data: [2] 0 ff
canlog.log.2660:ID: c8 -0- Data: [6] b9 3 a0ID: 1d0 -0- Data: [8] 6f ff 43 c3 85 a9 cd c4
canlog.log.2660:ID: 1b4 -0- Data: [8] 0 c0 e2 f2 14 32 fe 91
canlog.log.2660:ID: 130 -0- Data: [5] 45 40 2d 8f 17
canlog.log.2660:ID: aa -0- Data: [8] 9 dc fc 0 0 0 84 0
canlog.log.2660:ID: d7 -0- Data: [2] 26 ff
canlog.log.2660:ID: c0 -0- Data: [2] fb ff
canlog.log.2660:ID: 349 -0- Data: [5] a3 3 91 10 0
canlog.log.2660:ID: 3b4 -0- Data: [8] ff ff 0 fc ff ff ff ff
canlog.log.2660:ID: 1a6 -0- Data: [8] c1 93 d1 93 2 93 30 f4
canlog.log.2660:ID: 4f2 -0- Data: [8] 78 42 ff 1 0 1f 4 0
canlog.log.2660:ID: ce -0- Data: [8] 0 0 0 0 0 0 0 0
canlog.log.2660:ID: 1a0 -0- Data: [8] 0 80 0 0 0 15 a0 d7ID: d7 -0- Data: [2] 27 ff
canlog.log.2660:ID: 6 14 32 fe 95

canlog.log.2660:ID: 1d0 -0- Data: [8] 6f ff 4b c3 85 a9 cd c4
canlog.log.2660:ID: 1b4 -0- Data: [8] 0 c0 e2 f3 14 32 fe 92
canlog.log.2660:ID: 130 -0- Data: [5] 45 40 2d 8f 28
canlog.log.2660:ID: aa -0- Data: [8] 4 d7 fc 0 0 0 84 0
canlog.log.2660:ID: ee -0- Data: [8] 81 ff e7 fc ff ff ff ff
canlog.log.2660:ID: e2 -0- Data: [8] 81 ff e7 fcID: c8 -0- Data: [6] b9 3 a0 0 0 5c


Да ме насочиш къде да търся проблема?
п.с.: след всяка кан съобщение има serial.println(), Serial порта е на 250kbps скорост, CPU натоварването на четене + анализ на съобщенията е варира м/у 5-10% на RPi 1B


п.с.: опз... оправих линка за картинката...
Последна промяна shadowx на 02 Юни 2016, 20:37, променена общо 1 път

старши ентусиаст
Аватар
Мнения: 1857
Регистриран на: 20.10.2010
Местоположение: София
Пол: Мъж
Кара: BigBlockV8 и чат-пат SmallBlockV8
Мечтае да кара: бангия с предно
Детайли за колата: ;)
Big: Hemi 370 cu. in.
Small: S62B50 с жокери

Re: K-CAN Проект

Мнение от Nickelback » 01 Юни 2016, 19:41

shadowx написа:...
И малко да сондирам в главата на Nickelback.
Имам проблем с четенето на съобщения от CAN bus-а.... може би препълване на буфери?
Да обесня по-подробно... средното натоаварване на K-CAN bus-а при мен е 5-7% (при не запален двигател) и 10-15% (при запален двигател). (При скорост 100kbps на шината).
MPC2515 трябва да е способно на 1Mbps скорост, следователно при ~10-15% натоварване на 100kbps, това би било около 1-1.5% от капацитета му? Изглежда като доста далеч от възможностите.
аниуей, до колкото прочетох за него, той има 2 RX + 1 (MAB*), 3 TX буфери. За да влезне нещо в RX буфер, трябва да е минало CRC проверка и се предполага, че е ОК?
Ако го разбирам правилно, след като дойде съобщение и се провери CRC-то ще е ОК, трябва да влезне в MAB и от там да бъде пратено към RXB0 или RXB1 (който е свободен? или според филтър? Ако няма филтри?),след кое да се вдигне IRQ и съответно Arudino-то чете съобщението и го праща към USB-то.
Ето този либ ползвам....
https://github.com/sparkfun/CAN-Bus_Shield/tree/master/Libraries/Canbus

Да ме насочиш къде да търся проблема?


Щом го дават до 1Mbps едва ли лъжат. Rx буферите (като бройка) също са си ОК за мен. Реално имаш front буфер (MAB) и два back буфера, при което можеш да си позволиш да се моткаш в рамките на две поредни съобщения. Ако се помоткаш още малко (за трето), първото неминуемо го изпускаш :dunno: И оттам идва проблема, според мен. Много бавно Ардуиното чете буферите на MCP-то. Бавно, бавно... колко да е бавно - правят polling като пичове :ok: Не се и изненадвам всъщност - Ардуино и SPI... за какво да ползват прекъсвания :mhihi: Затова и Ардуино екосистемата не я долюбвам много, много за по-сериозни проекти. Всичко е active wait и хабене на процесорно време :mhihi: Дано не бъркам де, но аз interrupt service routine не виждам никъде в кода на библиотеката... :dunno:

https://github.com/sparkfun/CAN-Bus_Shi ... /mcp2515.c

https://github.com/sparkfun/CAN-Bus_Shi ... Canbus.cpp

Подозирам, че откъм main-а викаш CanbusClass::message_rx() метода на всеки XXXms (полираш), при което е много вероятно да изпуснеш burst от "n" на брой бързи съобщения. А този метод просто проверява за висящ месидж - mcp2515_check_message() - и евентуално го изчита в паметта - mcp2515_get_message(). Съвета ми е да си моднеш библиотеката да ти набива прекъсване, когато има готово съобщение в опашките, а не да полираш.
Полирането е гадно, защото се въртиш като гламав за тоя що духа, а месиджи няма. А пък когато има бърст от месиджи, ти седиш и дремеш - "ааа не може, не са ми изтекли 100ms, нищо няма да чета от MCP-то". Затова ги и изпускаш.

Гледам чипа има следните прекъсвания:

RXBF0, RXBF1 и такъв с общо предназначение - INT

Виж дали тия крака на MCP-то са опроводени до Ардуиното първо и се опитай да ги ползваш (специално първите две). Не съм се занивавал с абстракцията на прекъсванията в Ардуино специално и не мога да ти дам съвет веднага как точно да ги ползваш. Трябва да го ровя, но нямам много време в момента. Сигурен съм, че има примери в нета. Другият вариант е да търсиш готова библиотека/драйвер за MCP-то, която поддържа прекъсвания. Вероятно като краен резултата ще ти се викне callback в CanbusClass-а :dunno: Поне така би било "човешко" за ползване :yes:
Надявам се да съм те насочил "на две, на три"... :dunno:
Изображение Изображение

"За тЕя пари има Е-шеесе" - форумна пословица.
Лето две и седемнаесто.

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 02 Юни 2016, 20:24

Nickelback написа:Надявам се да съм те насочил "на две, на три"... :dunno:

Даже повече от необходимото :bowdown: :bowdown: :bowdown:
Само да си взема утре колата (сменят ми маховика :cry: ) и ако почивните дни ще поработя над проблема.

старши ентусиаст
Аватар
Мнения: 1857
Регистриран на: 20.10.2010
Местоположение: София
Пол: Мъж
Кара: BigBlockV8 и чат-пат SmallBlockV8
Мечтае да кара: бангия с предно
Детайли за колата: ;)
Big: Hemi 370 cu. in.
Small: S62B50 с жокери

Re: K-CAN Проект

Мнение от Nickelback » 02 Юни 2016, 21:15

Било лесно закачането на ISR, не знам защо Ардуино хората просто не желаят да го практикуват масово :dunno: Ето примерен код от тук:

http://www.elecfreaks.com/wiki/index.ph ... BUS_Shield


// demo: CAN-BUS Shield, receive data
#include <mcp_can.h>
#include <SPI.h>

unsigned char Flag_Recv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];

void setup()
{
CAN.begin(CAN_500KBPS); // init can bus : baudrate = 500k
attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt
Serial.begin(115200);
}

void MCP2515_ISR()
{
Flag_Recv = 1;
}

void loop()
{
if(Flag_Recv) // check if get data
{
Flag_Recv = 0; // clear flag
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
Serial.println("CAN_BUS GET DATA!");
Serial.print("data len = ");
Serial.println(len);

for(int i = 0; i<len; i++) // print the data
{
Serial.print(buf[i]);Serial.print("\t");
}
Serial.println();
}
}

attachInterrupt() функцията закача на прекъсване "0", хендлъра MCP2515_ISR() (което прекъсване не знам кое е от трите дето горе изброих... мно'о яко просто прекъсване "нула", няма макрос, няма бъкел :banghead: ). А хендлъра от своя страна вдига само един флаг - Flag_Recv. Той (флагът) се обработва при първа възможност - почти моментално в случая - понеже мейн луупа е почти свободен от други дейности (освен принтене).
Дори аз самия бих изчитал съобщението в паметта вътре в самия ISR !!! Тоест бих извикал CAN.readMsgBuf(&len, buf) директно от MCP2515_ISR(). След което (пак в MCP2515_ISR() ) ще вдигна флага, което ще е сигнал за мейн луупа, че може да обработи съобщението (например да го прати към RPi-то). Ако имаш повече свободна памет даже, си направи кръгов буфер от буфери ;) А не CAN.readMsgBuf(&len, buf) да пише просто в buf. Така си гарантираш, че няма да изпуснеш нито един месидж, или поне, докато не се препълни кръговият ти буфер.
Е това вече, ако не работи не знам :ok:

Дори и да не е тази библиотека (че имам леки съмнения какво точно се случва в CAN.readMsgBuf()), вярвам схващаш идеята с прекъсванията :bchug:
Изображение Изображение

"За тЕя пари има Е-шеесе" - форумна пословица.
Лето две и седемнаесто.

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 12 Юни 2016, 15:31

Никой не може да ти направи - това което можеш да си направиш сам :)
Дръпнах си последната версия на lib-а и всичко изглежа ОК (теста беше само 3-4 минути , налоследък никакво време ).
Тоза значи, че мога да се върна към идета да използвам Arudino-то като usb-can у-во (https://github.com/kahiroka/slcanuino)

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 16 Юни 2016, 10:29

Набързо разгледах библютеките на подобни shield-ове (Can Bus Shields за Arudino) и намерих това из сорсовете на Seeed Studio Can Bus Shield-а.

Код: Избери целия код
// demo: CAN-BUS Shield, receive data with interrupt mode
// when in interrupt mode, the data coming can't be too fast, must >20ms, or else you can use check mode

https://github.com/Seeed-Studio/CAN_BUS_Shield/blob/master/examples/receive_interrupt/receive_interrupt.ino

Код: Избери целия код
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way

https://github.com/Seeed-Studio/CAN_BUS_Shield/blob/master/examples/receive_check/receive_check.ino

Та явно в случея, не interrupt-а е правилния начин.... препдолагам,че даже мога да ползвам директно тази библютека (евентуално може да се наложи да ремап-на пин-овете, ако са подредени различно спрямо SparkFun Shield-а)

старши ентусиаст
Аватар
Мнения: 1857
Регистриран на: 20.10.2010
Местоположение: София
Пол: Мъж
Кара: BigBlockV8 и чат-пат SmallBlockV8
Мечтае да кара: бангия с предно
Детайли за колата: ;)
Big: Hemi 370 cu. in.
Small: S62B50 с жокери

Re: K-CAN Проект

Мнение от Nickelback » 03 Юли 2016, 20:06

Чак сега ти видях мненията (две седмици по-късно), добре че се присетих за темата :mhihi: Може би, защото все още имаш забавяне при одобрение на мненията :dunno:

Иначе по дефиниция подхода с прекъсване е най-риълтайм възможния, няма две мнения по въпроса :mrgreen:

Както ти казах е необходимо по най-бързия възможен начин да запишеш съобщението в буфер (даже кръгов буфер, за да събереш няколко такива, а не да трепереш дали ново съобщение няма да затръшка старото). Това, аз лично, бих го направил дори във самия MCP2515_ISR(). Ще отнеме няколко десетки микро секунди, за което време, друг месидж по CAN е слабо вероятно да дойде... А дори и да дойде, то той ще се буферира в един от "хардуерните" буфери на самия CAN интерфейсен чип и няма да го изпуснеш ;) Чипа е длъжен да ти изгенерира нов интеръпт, който ти пак ще прихванеш в MCP2515_ISR().

След като си спасил месиджа в кръговия буфер имаш правото да се моткат в рамките на "N" поредни месиджа, като "N" е дълбочината на кръговият ти буфер. Колкото по-голям - толкова по-дълги и свирепи бърстове от месиджи можеш да поемеш без проблем. Но... имаш ограничение откъм памет, все пак :mhihi: Под "моткане" имам в предвид да си обработиш съобщението както си прецениш и да го предадеш към RPi-то, да кажем.

Защо тия пичове казват, че интеръпт подхода не бил за чести месиджи...

https://github.com/Seeed-Studio/CAN_BUS ... errupt.ino

Ами защото им е калпаво написана библиотеката :mhihi: Ако си бяха направили голям кръгов буфер, който да се пълни от ISR-a няма да изпуснат нищичко :D Ама ги мързи. Какво се случва при тях, ако дойдат два бързи месиджа:
1. Идва първия. В ISR-a се вдига флага. Да кажем контекста на изпълнение на процесора е точно в началото на мейн луупа. Влизаме в иф-а. Чистим флага. Преверяваме там какво ще четем от CAN чипа. Четем го. И... го пращаме по серийната :mhihi: :arrow: Tooo slow :ok:
2. През това време идва друг месидж, който пак ще активира ISR-a. Пак ще се вдигне флага... Ама нас ни дреме, щото ние още пращаме стария месидж по серийната конзола. Еми... изпускаме го неминуемо новия. Затова ти казвам, че трябва да се буферира в ISR-a. Гледай на ISR-a като на най-високоприоритетна (почти :mhihi: ), непрекъсваема (почти :mhihi: ) нишка на изпълнение. Дет' вика д-р Хаус - Use it! :yes:

Другия подход (check mode - живо полиране, за мен) пък изобщо не искам да го коментирам (пак). Бях ти написал как работи, по-скоро, как не работи :) То все в г*з и като горния подход, като няма "дълбоко буфериране"...

А колко прекрасни щяха да са нещата, ако ползваха DMA за тия тривиални операции по прехвърляне на буфери. Еееехх :dunno:

Мога да напляскам някакъв код, ако не е станало нещо ясно, но дай знак, че се страхувам че само си пиша, а на теб не ти се занимава сам да си пачваш библиотеката или не разбираш реалния проблем, не съм сигурен :paranoid:
Изображение Изображение

"За тЕя пари има Е-шеесе" - форумна пословица.
Лето две и седемнаесто.

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 11 Юли 2016, 13:08

Nickelback написа:Чак сега ти видях мненията (две седмици по-късно), добре че се присетих за темата :mhihi: Може би, защото все още имаш забавяне при одобрение на мненията :dunno:

:mhihi:

Nickelback написа:А колко прекрасни щяха да са нещата, ако ползваха DMA за тия тривиални операции по прехвърляне на буфери. Еееехх :dunno:

В един перфектен свят .... :lalala:

Nickelback написа:Мога да напляскам някакъв код, ако не е станало нещо ясно, но дай знак, че се страхувам че само си пиша, а на теб не ти се занимава сам да си пачваш библиотеката или не разбираш реалния проблем, не съм сигурен :paranoid:

Ами малко по-зает с други неща бях последно време и не съм се занимавл много (желание и ентусязъм бол! Времето ми е проблема :cry: като на повечето хора ..та да не се оплаквам. ).
Иначе идеята за ringbuffer-а я разбирам... (аз не съм програмист ...пиша тук таме това унова като ми потрябва, но обикновенно на по-високо ниво... c/c++ най-вече чета ... )
И е силно вероятно накрая да изпрося малко помощ , но първо искам да тествам и с OrangePi-то ....защото на RPi B-то не му стига намоменти процесора и почва и от другия край да препълва буфера...
Та и там дроп.... :) Тия дни ще мигрирам към OPi-то ...(хем там съм си на Slackware-че...че тия debian based ми съкращават живота).....там с пренареждане на IRQ-та (по дефаулт биндва всичко към cpu0 :kuku: ) и малко underclock (тия идиоти са го пуснали на 1.5x Ghz... то е като термо ядрен реактор :banghead: ...зимата с 3 такива 20квадрата стая ще топлиш :mhihi: ... за сметка на това , при ~1.2Ghz нещата са съвсем прилични ако има радиатор.) се постига доста проличен setup. (dhcp/dns/hotspot/ssh) = 31MB memoery, ~28s boot с kbd/mouse и WiFi Dongle на USB-тата . (под 20s ако няма нищо по USBтата). Предполагам още може да се свали ако се заиграе човек... аз само едитнах rc.M набързо.

Та .... ще пробвам скоро да видим какво ще напиша ... ако fail-на , ще те тормозя за помощ :) :bchug:

старши ентусиаст
Аватар
Мнения: 1857
Регистриран на: 20.10.2010
Местоположение: София
Пол: Мъж
Кара: BigBlockV8 и чат-пат SmallBlockV8
Мечтае да кара: бангия с предно
Детайли за колата: ;)
Big: Hemi 370 cu. in.
Small: S62B50 с жокери

Re: K-CAN Проект

Мнение от Nickelback » 15 Юли 2016, 18:26

ОК супер, дръж ни в течение, че това е единствената сериозна и интересна тема в раздела от доста време насам, определено идейна и вървяща в правилната посока, според мен :yes:
Ще се опитам да потърся или да надградя накоя съществуваща CAN библиотечка тия дни, само че ще е "на сухо", понеже нямам на какво да тествам :ok:
Изображение Изображение

"За тЕя пари има Е-шеесе" - форумна пословица.
Лето две и седемнаесто.

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 17 Юли 2016, 14:46

Nickelback написа:ОК супер, дръж ни в течение, че това е единствената сериозна и интересна тема в раздела от доста време насам, определено идейна и вървяща в правилната посока, според мен :yes:
Ще се опитам да потърся или да надградя накоя съществуваща CAN библиотечка тия дни, само че ще е "на сухо", понеже нямам на какво да тествам :ok:

Май, май ще се наложи да удариш едно рамо :)

Потребител
Аватар
Мнения: 6
Регистриран на: 30.07.2011
Местоположение: Sofia
Пол: Мъж
Кара: BMW 520D/E61

Re: K-CAN Проект

Мнение от harryzz » 27 Юли 2016, 11:41

Здравейте,
понеже и за мен това е единствената интересна тема която намерих тук да си кажа и аз мнението.
Може би по-добрия вариант е да се закачи директно mcp-to към SPI на Rpi. Има готови решения и драйвер за linux. Какво печелим от това - работим със стандартните socketcan за linux и махаме ардуиното.
Ето примерно това: http://skpang.co.uk/catalog/pican2-canb ... -1476.html
Аз лично за тестове съм си взел beaglebone black - има си internal can и работи перфектно.Другия плюс за мен е че има 4GB flash и не е нужна SD карта.


поздрави
Захари

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 15 Яну 2017, 8:25

harryzz написа:Здравейте,
понеже и за мен това е единствената интересна тема която намерих тук да си кажа и аз мнението.
Може би по-добрия вариант е да се закачи директно mcp-to към SPI на Rpi. Има готови решения и драйвер за linux. Какво печелим от това - работим със стандартните socketcan за linux и махаме ардуиното.
Ето примерно това: http://skpang.co.uk/catalog/pican2-canb ... -1476.html
Аз лично за тестове съм си взел beaglebone black - има си internal can и работи перфектно.Другия плюс за мен е че има 4GB flash и не е нужна SD карта.


поздрави
Захари


Здрасти ...
1во да се извиня,че доста време не съм писал .... от други неща , не ми е оставало време за проектчето :(
Относно mcp подръжката в линукс ядрото - да. Прав си, има и е доста прилична... има и щитове за малинката даже... проекти като CanBerry и тнт.
Но идеята тук е нарочно да са разделени,за да може линукс мини комп. да отговаря за по-high level функционалността, а арудиното за low-level stuff.
Иначе ,socketcan може да се използва и при този setup ако ползваш https://github.com/kahiroka/slcanuino.
Само да се постопли времето (че не ми се седи с часове в колата в това време) и ще продължа с проекта.... принципно тесвам и контрол над запалването с добавяне на едно реле ... идеята е да не може да се запали колата ако не е въведен код. (без малинката/портокалчето да е заредило, всичко става само посредством арудиното)

Поздрави :)

кандидат ентусиаст
Аватар
Мнения: 119
Регистриран на: 6.05.2016
Пол: Мъж
Кара: 2010 e90 330d
Детайли за колата: Ръчка

Re: K-CAN Проект

Мнение от alma359 » 30 Апр 2017, 21:38

Здравейте, днес се опитах да свържа MCP2515 CAN Bus Modul с колата ми но незнам точно кои 2 кабела ми трябват за CAN Bus, искам да прочета температурата на двигателя и температурата на маслото, за да ги показвам на 7-сегментов дисплей. Свързах Зелен кабел на L, и Зелен/Оранжев на H. Но не чете. Правилни ли са тези два кабела?

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 29 Май 2017, 20:00

@alma359 Здравей... температурата на маслото не знам дали я има в K-CAN мрежата, в PT-CAN ще я има, но за K-CAN не знам... (нищо чудно да я има, просто да е в трафика които още не разбирам).
Относно това как да разпознаеш кабелите, CAN мрежите винаги са twisted pair (т.е. два увити един около друг кабела) независимо дали D-CAN (obd), К-CAN или PT-CAN. (м/у другото виж дали просто не си объркал High и Low, не трябва да има проблем ако закачиш can контролен на-обратно..т.е. high-low , low-high, но няма да получава сигнал.)

И сега малко updates по проекта ... :)
За съжеление не съм се занимавал много :S ... но за сметка на това, сега мисля,че ще имам време да продължа смело напред...тези дни мисля да сложа реле на горивната помпа, което ще я спира при заключване от дистанционно и ще я пуска след въвеждане на комбинация от копчета на волана(?)
Актуална (горе долу... може да е седмица , две назад) верия на кода може да намерите тук:
https://github.com/l4m3rx/carpino

И горе долу така изглеждат нещата в момента.
Изображение

Изображение

На първо време в TODO листа са ми както казах реле и да прехварля голяма част от парсването на информацията да свава в ардуиното.

Потребител
Аватар
Мнения: 31
Регистриран на: 5.04.2016
Пол: Мъж
Кара: BMW 120d e87
Детайли за колата: BMW 120d e87 163hp

Re: K-CAN Проект

Мнение от shadowx » 25 Юли 2017, 3:59

Лек ъпдейт по темата... скоро мисля,че и код ще мога да покажа, но накратко.
Преместих "декодирането" на трафика да става на Arduino-то, сложих си реле на горивната помпа и в момента тествам горе-споменатото key-code-to-start-engine. :mhihi:
В момента алгоритъма е така, след заключване от дистанционно, колата е в режим "lockdown", в момента в който види ключ - активира релето и чака за код, (комбинация от копчета на волана) за да го деактивира.
Добавил съм и "защита" от рестарт на arduino-то ..т.е., при рестарт/boot изчаква да види 1во статуса на двигателя, преди да прецени дали да мине в lockdown режим...ако двигателя е "запален", не преминава в такив режим.
Друго развитие което мога да отбележа е,че си взех видеорегистратор със външен GPS , който доста лесно успях да закача на Raspberry Pi-то и да чета данни от него :lalala:
А да и ще преминавам към Raspberry Pi 3 .... оказва се ,че носят на жега много повече от очаквано, плус факта,че имат wifi, bt и тнт buildin, макар и OPiPC-то да се справя доста прилично.

Та...тези дни сигурно ще мога да поустна малко работещ код за arudino и идните седмици ако има време, пренаписване на нещата за RPi/OPi.

ПредишнаСледваща

Назад към Електроника

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани

Последни теми
Facebook