Отговори на тема  [ 5 мнения ] 
Проблем с MCP2515 CAN контролер 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 12:01 pm
Мнения: 2201
Мнение Проблем с MCP2515 CAN контролер
Здравейте! Трансфера на данни върви без проблем, но искам да добавя и адрес на получател. В документацията се говори за 2 маски и 6 филтъра. Като библиотека използвам CAN-MCP251x на CCS(имам я и преведена за XC8).
Изпробвах всякакви комбинации на маски и филтри - без резултат.
Контролерите продължават да получават данни от всички адреси, а връщаният адрес от can_getd() функцията винаги е 0(тя фукнцията не връща адрес, а се подава указател към адрес..).
Ето библиотеката за тези, които я нямат:
Прикачени файлове:
CAN-MCP251x.rar [8.55 KiB]
238 пъти

Как става тази работа? Или трябва аз да добавя някакъв байт в изпращаните данни, които да играе ролята на адрес?
Благодаря!

_________________
www.elkran.com


Нед Фев 19, 2017 10:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 12:01 pm
Мнения: 2201
Мнение Re: Проблем с MCP2515 CAN контролер
Реализирах варианта с допълнителен байт служещ като адрес. Добре работи!
Все пак ако някой знае как става работата с тези маски и филтри ще съм благодарен ако сподели!

_________________
www.elkran.com


Нед Фев 19, 2017 3:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Проблем с MCP2515 CAN контролер
Някой играл ли си е да подкара софтуерен can контролер на обикновен pic?
Да речем, че трябва да се пращат само 3-4 фрейма..... и няма RX данни. Демек - да разбира, кога шината е свободна, да разбира от арбитраж, да чете ack бит.....


Пет Апр 17, 2020 10:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Проблем с MCP2515 CAN контролер
Пробвах с pic12f1840 с вътрешен осцилатор на 16 Mhz. Слухти за свободна шина и прави арбитраж. На 50 Kb/s шина работи прилично. Ако трябва да се прави и RX частта, нещата стават тегави и не си струва мазохизма. :D


Нед Апр 26, 2020 3:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: Проблем с MCP2515 CAN контролер
Да го правиш софтуерно е безсмислено.
Какво те мъчи с филтрите и маските? Операцията е логическа - идва число (идентификатора от полученото съобщение), то се подава на филтъра. В този филтър първо се прилага "маската" като логическо И - на този етап целта ти е да махнеш определени битове, които не те интересуват - например ако искаш да хванеш група от идентификатори можеш да махнеш определени битове (примерно най-младшите 3) и така ще "минават" през филтъра 8 поредни идентификатори.
Та след като определени битове се махнат от числото, отива на следващата стъпка - сравнение (цифров компаратор) - ако съвпадне минава навътре и влиза в мейлбокса, ако не съвпадне изчезва и не влиза.
Това се прави, защото имаш ограничено количество "меилбокси", а те са там за да класифицираш групите съобщения според някаква приоритетност - в логически "канали". Това ти е нужно и полезно, ако искаш да закачиш обработката на различни прекъсвания поради това че определен идентификатор в протокола е с по-висок приоритет и трябва да се обслужи по-бързо.
Затова и протоколите за КАН се мислят за лесно групиране по идентификаторите - бавните, асинхронни данни се предават в една зона от идентификатори, бързите - в друга. Ако има идея за адресация (например canopen) се ползват примерно най-младшите битове за да се сложи адреса - например там SDO заявките се пращат като 0x600+адреса - т.е. заявката към нод на адрес 5 мастъра я праща като съобщение с идентификатор 0х605, а за адрес 43 се праща на 0х643.
В слейва имаш възможност за два подхода - да не ползва филтрите на хардуерно ниво и всички съобщения да влизат към софтуера - тогава софтуера ще се занимава с всичко по бъса, дори да е ясно че не е за него. Т.е. филтрите ще са софтуерни. Понякога и това се прави - ако примерно искаш да следиш трафика и да пращаш по усб примерно.
Но ако говорим за ембедед устройство, се прави друго - филтъра се слага така, че устройството с адрес 43 си настройва филтъра да влизат само идентификатори, завършващи на 43. Така съобщенията, предназначени за други адреси, не го безпокоят.
Маските позволяват да "махнеш" примерно старшите битове и филтърът ти да пропуска не само точно 0х643, а всичко завършващо на 43 - 0х043, 0х143, 0х243, .. 0х743 и т.н. За този пример маската ти трябва да има 0-ли в старшите битове и 1-ци в младшите - т.е. казваш старшите са "don't care", младшите трябва точно да съвпадат.

Цялата тая концепция идва от идеята на КАН бъса да има адресиране по съдържание, а не само по слейв адрес. В смисъл че предназначението на дадено съобщение се описва в идентификатора - няма друго поле за адрес, и, на твоя въпрос, не бива да слагаш адрес в данните. Ако имаш нужда да адресираш към физически конкретно устройство правиш обратното - къде в идентификатора стои адреса. На по-смислените протоколи това се ползва, но не за всичко - има "области" от идентификатори, за които тая логика е така (както описаната за SDO - тя е валидна за зона от 0х600-0х6FF за заявки, и от 0х500-0х5FF за отговори). Но извън тая зона има други зони - примерно от 0х180, в която няма адреси, т.е. 0х185 не значи че е нещо за адрес 5.
Така се комбинират различни услуги (протоколи) с различни нужди - SDO-то е за асинхронни request-response, другата зона на 0х180 е за процесни данни (PDO) - там механизма вече е producer-consumer и може да се прави предаване на данни от един източник към много получатели.


Нед Апр 26, 2020 4:37 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

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


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни