Перейти к содержанию
    

CAN девайс на Tiny2313-MCP2515. Примеры кода.

Всем привет!

Решил я соорудить CAN-девайс.

Что б в автомобиле можно было смотреть-посылать данные.

За основу взял Tiny2313-MCP2515.

На стадии экспериментов подключил 2313 к КОМ порту и могу туда-сюда данные передавать.

Что получилось.

Управлять через КОМ-порт 2515. Я её могу читать/писать/ресетить.

Что нехватает: знаний :)

А именно ПРОСТЫХ примеров кода на Си или АСМе для 2515.

Сконфигурировать 2515 я уже умею и знаю какими значениями.

Теперь хочу что-передать в CAN.

Подскажите, пожалуйста, минимальный пример кода для отправки одного сообщения в КАН.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала поясняю. Передавать туда ничего не надо. Особенно в движении.

Слава богу пока в самолёты задорные ребята подключиться не могут.

К чему приведёт всеобщая "грамотность", - я не знаю. Каждый второй - хакер. С умным видом меняем прошивки что-то прикручиваем, что-то откручиваем.

Желательно чтобы на пальцах показали, как летит вон тот спутник, ну а дальше я сам, методом научного тыка.

Что-нибудь прочитать, то это сложно.

Извините, но наболело.

Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала поясняю. Передавать туда ничего не надо.

Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца.

1. Откуда Вам знать, что мне надо, а что нет?

2. Делаю своими руками.

3. Вы разбираетесь в ЭТОЙ теме? С рождения? Или с садика? Павильно, с того момента, как начали разбираться, предварительно почитав, попаяв неоднократно.

Или, не ТАК это было? Сразу за самолёты взялись и полетели?

Вот и я стремлюсь к знаниям, и кое-что, если перечитаете мой пост, у меня даже получается, а что б ЭТО получилось, я две недели по 5 часов в день сидел, читал, пробовал, писал, читал итд.

Так-что или помогите, если знаете и есть желание помочь, или особо не умничайте. А если не знаете, то вообще почему здесь отвечаете.

Создайте свой топик и там задавайте вопросы, может Вам, как и мне ответят...

Изменено пользователем AVL4ELECTRONIX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у микрочипа есть готовые примеры кода на MCP2515. качаются с родного сайта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у микрочипа есть готовые примеры кода на MCP2515. качаются с родного сайта.

Да, но я просил ПРОСТЫЕ, а в Микрочипа на простые не похожи.

 

Вот, к примеру, простой пример:

 

Я расскажу, как правильно инициализировать MCP2515, и в режиме loopback гонять контрольный байт.

Алгоритм работы с MCP2515 достаточно прост - инициализация, запись данных на отправку в буферы TXnDF, отправка данных в CAN драйвер, считывание данных из регистров RXnDF.
Для работы достаточно подключить контроллер к АТмеге через SPI (режим 00 или 11). Так же можно использовать выходы прерываний #INT, #RX0BF и #RX1BF (предварительно их включить как прерывание в соответствующем регистре), входы #TX0RTS, #TX1RTS и #TX2RTS можно использовать для отправки данных из соответствующих буферов.

Итак, после подачи питания/резета контроллер находится в режиме Configuration mode, в чем можно убедиться, посмотрев регистр CANSTAT:

//Read from CANSTAT reg 
CS1=0;
delay_us(2);
spi(0x03);
spi(0x0E);
data=spi(0x00);
delay_us(2);
CS1=1;
PORTA=data;
delay_ms(1000);
PORTA=0;
delay_ms(1000);

Горит только PORTА.7 - все нормально.
Затем записываем в регистр CANINTE какие мы хотим видеть флаги прерываний:

//Set config to CANINTE reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x2B);
spi(0xFF); //set all
delay_us(2);
CS1=1;
delay_us(2);

Пишем в регистр RXBnCTRL

//Set config to RXB0CTRL reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x60);
spi(0x04); //set rollover
delay_us(2);
CS1=1;
delay_us(2);
Теперь у нас при наполнении регистра RXB0 (запись восьми байт) данные переходят в регистр RXB1.
Устанавливаем идентификаторы принимаемых данных:

//Set config to RXB0SIDH reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x61);
spi(0x0F); //set indentifier
delay_us(2);
CS1=1;
delay_us(2);

//Set config to RXB0SIDL reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x62);
spi(0x00); //set indentifier
delay_us(2);
CS1=1;
delay_us(2);
Идентификаторы отправляемых данных можно установить при записи в регистры TXBn а можно и отдельно.
Устанавливаем сколько байт мы примем:

//Set config to RXB0DLC reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x62);
spi(0x08); //set data length code
delay_us(2);
CS1=1;
delay_us(2);
Устанавливаем назначение выводов #RX0BF и #RX1BF:

//Set config to BFPCTRL reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x0C);
spi(0x0F); //set RXnBF pins like the interrapt pins
delay_us(2);
CS1=1;
delay_us(2);
Теперь на них будет 0, когда данные будут в соответствующем буфере.
Итак, можно выбрать режим, включить клоковый выход CLKOUT, задать значение делителя:

//Set config to CANCTRL reg

CS1=0;
delay_us(2);
spi(0x02);
spi(0x0F);
spi(0x5D); //set loopback mode, ABAR,OSM,CLKEN,Fout=Fin/2
delay_us(2);
CS1=1;
delay_us(20);

Режим - loopback, CLKOUT включен, входная частота сразу делится пополам, что можно наблюдать осциллографом. Инициализация закончена, хотя можно еще записать кучу других нужных регистров, пора передавать данные. 
Записываем данные в TXBn начиная с регистра TXBnSIDH, если используем команду SPI LOAD TX BUFFER: 

CS1=0;
delay_us(2);

a=2*nB+0x40; //nB - номер буффера 0, 1 или 2
spi(a);
spi(0x0F);// TXBnSIDH
spi(0x00);// TXBnSIDL
spi(0x00);// TXBnEID8
spi(0x00);// TXBnEID0
spi(0x08);// TXBnDLC
spi(data);// TXBnD0
spi(0x02);// TXBnD1
spi(0x03);// TXBnD2
spi(0x04);// TXBnD3
spi(0x05);// TXBnD4
spi(0x06);// TXBnD5
spi(0x07);// TXBnD6
spi(0x08);// TXBnD7
delay_us(2);

Можно записать и используя адреса регистров, тогда, единожды прописав регистры TXBnSIDH, TXBnSIDL, TXBnEID8, TXBnEID0 и TXBnDLC, можно записывать данные в регистры TXBn, используя команду LOAD TX BUFFER, начиная с байта данных D0 (значение а, естественно, вычисляется по-другому, см. даташит).
Теперь надо поставить буфер в режим ожидания отправки:

//Set config to TXB0CTRL reg
CS1=0;
delay_us(2);
spi(0x02);
spi(0x30);
spi(0x08); //set TXREQ bit
delay_us(2);
CS1=1;
delay_us(2);

Готово, можно проверить записанные данные, считав из регистров TXBnDm, например: 

//Read from TXB0D7 reg 
CS1=0;
delay_us(2);
spi(0x03);
spi(0x3D);
data=spi(0x00);
delay_us(2);
CS1=1;
PORTA=data;
delay_ms(1000);
PORTA=0;

Моргнул PORTА.3 - все в порядке. Посылаем команду на отправку из TXB0:

delay_us(2);
CS1=0;
delay_us(2);
spi(0x81);//write to RTS transmit 0 buff
delay_us(2);
CS1=1;
delay_us(2);

Попробуем считать. Запускаем цикл считывания из регистра CANINTF, пока бит RX1IF не станет равным 1, и считываем данные из регистра RX1B (nB=1). Почему из первого? Так данные заполнили регистр RX0B и перешли в RX1B:

do {
CS1=0;
delay_us(2);

spi(0x03);
spi(0x2C);
IF=spi(0x00);

CS1=1;}

while ((IF&0x02)==0);
CS1=0;
delay_us(2);

a=0x92;
a=a+(0x04*nB); //start at RXBnD0
spi(a);
data=spi(0x00); // RXBnD0
spi(0x00); // RXBnD1
spi(0x00); // RXBnD2
spi(0x00); // RXBnD3
spi(0x00); // RXBnD4
spi(0x00); // RXBnD5
spi(0x00); // RXBnD6
spi(0x00); // RXBnD7

PORTA=data;
delay_ms(500);
PORTA=0;

Готово, PORTА показывает то, что было послано.
В моем примере задействованы далеко не все возможности MCP2515, да и передачи данных в шину не было. Но для знакомства с контроллером уже не надо ломать голову=)

Изменено пользователем AVL4ELECTRONIX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, но я просил ПРОСТЫЕ, а в Микрочипа на простые не похожи.

для меня они достаточно прозрачны, хотя я и не программист. и главное гарантированно рабочие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот, к примеру, простой пример:

если для вас это "нипанятна", то SasaVitebsk прав.

 

девайс же делали? на каком основании

>> За основу взял Tiny2313-MCP2515.

 

>> Что нехватает: знаний

книги для этого и придумали.

 

>> Теперь хочу что-передать в CAN.

т.е. читать данные, передаваемые по CAN не интересно, вот сразу писать?

поскольку вы алогично подошли к делу, то вам и дают советы, которые сначала должны исправить проблемы в логичности.

 

раз вам непонятны примеры, то вероятно есть пробелы в ЯП. на форуме можно найти линки на много хороших книг по С и asm.

--------------

по теме топика. вбил в поисковой машине то, что вам надо - на первой же странице великолепный тутор с разжовыванием и выка... всей темы.

т.е. вам "тупо впадлу". почему с таким отношением ктото должен к вам спешить помогать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот интересный ответ.

Одни нравоучения, вместо конкретно полезной информации.

Я уже писал постом выше, что если хотите мне помочь чем-то, то я рад Вас услышать.

А если просто "повыпендриваться", ибо Вам "наболело", то это к врачу, ибо здесь форум радиоэлектронщиков, а не больных людей.

И по делу. А покажите мне КНИГУ по MCP2515. Слабо?

И почему Вас так "заело", что я хочу писать, а не читать?

Вы ж не знаете, ибо Вы не экстрасенс, я уверен, иначе б знали, что данные которые мне нужны я уже давно вычитал с CAN-шины.

Как раз с Вашей стороны алогично делать какие-то выводы, не зная вводных данных.

Бумажные книги по СИ, АВР, АСМ у меня есть, штук 10. Я их почитываю.

А конкретно в этом топике меня интересует, цитирую "CAN девайс на Tiny2313-MCP2515. Примеры кода."

Пока-что "умных" ответов хватает, а вот полезной информации - нет.

Предварительно, "не в падлу", я перечитал все темы этого форума в которых упоминалось про MCP2515. Но нужной мне информации я не нашёл. Допускаю, и так скорее всего оно и есть, что я слишком туп и глуп, по-этом я и создал ЭТОТ топик в надежде на ПОМОЩЬ, а не на нравоучения.

Впредь, прошу, отвечать по-делу. Ибо УЧИТЬ и ПОУЧАТЬ - это две большие разницы. А Вам, я так вижу, хочется именно ПОУЧАТЬ, что б возвыситься в своём самомнении, наверное. Может, я и ошибаюсь, но такое моё мнение, на основании Ваших ответов.

А что на форуме можно найти линки на хорошие книги... К чему такой ответ. Я ж не знаю какие книги хорошие, а какие нет. Если Вы ЗНАЕТЕ и хотите мне ПОМОСЬ, то, пожалуйста, дайте линки на хорошие, а не пишите расплывчатую фразу о могуществе интернета.

Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл.

Спасибо!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может тут есть чтото что Вам поможет.

http://forum.easyelectronics.ru/viewtopic.php?f=4&t=4836

 

Сам микрочип в разделе documentation and software предлагает достаточно информации для этого контроллера

http://www.microchip.com/wwwproducts/devic...ocName=en010406

 

P.S.

Работал с CAN и на приём и на передачу. Но пользовалься CAN-контроллерами встроенными в процессор.

Приходилось слушать шину с протоколом CAN-FMS (грузовики, автобусы и т.п.). Поток данных сумашедший.

Для CORTEX-M3 на 50МГц загрузка не большая, но всёравно он не справлялся с трансляцией данных

с CAN (250кбит) в UART (115200). Не хватало пропускной способности UART.

Как по мне Tiny2313 слабоват для этой шины. Разве что как мост CAN-UART и то с существенными ограничениями.

Для работы с CAN подходят процессоры с аппаратными фильтрами CAN-сообщений.

Но конечно всё зависит от вашей задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>> И почему Вас так "заело", что я хочу писать, а не читать?

одна из норм поведения на форуме - сообщать, что сделал, и что не получилось.

так вы дайте больше информации для анализа тем кто вам попытается помочь.

ваше сообщение выглядит так

>> я вот тут сделал железку не зная CAN и хочу управлять ЭСУД. дайте код.

 

>> я уверен, иначе б знали

кхм

>> На форуме сообщений: 1 206 320

угадайте: вы первый с таким постом?

 

>> Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл.

вот

http://www.kreatives-chaos.com/artikel/ans...g-eines-mcp2515

примеры от и до. там используется плата с мега8 и Си.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

smalcom, спасибо, но "великолепный тутор" на немецком языке. Я никогда небыл в Германии, немецкого, увы не знаю.

Но спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но "великолепный тутор" на немецком языке.
Онлайн переводчик вам в помощь

http://translate.google.com/translate?hl=r...g-eines-mcp2515

 

В идеале лучше переводить на английский - меньше огрехов. Только сделайте скидку на машинный перевод, например, шина -> bus -> автобус.

 

А почему вы не смотрели в сторону Arduino? Под неё есть шилды и примеры кода

https://www.sparkfun.com/products/10039

http://forum.arduino.cc/index.php?topic=152145.0

https://github.com/sparkfun/CAN-Bus_Shield

https://github.com/franksmicro/Arduino/tree...braries/MCP2515

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Онлайн переводчик вам в помощь

http://translate.google.com/translate?hl=r...g-eines-mcp2515

 

В идеале лучше переводить на английский - меньше огрехов. Только сделайте скидку на машинный перевод, например, шина -> bus -> автобус.

Спасибо.

Перевод на украинский язык выглядит ещё прикольнее :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...