реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> CAN девайс на Tiny2313-MCP2515. Примеры кода.
AVL4ELECTRONIX
сообщение Feb 17 2014, 08:20
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



Всем привет!
Решил я соорудить CAN-девайс.
Что б в автомобиле можно было смотреть-посылать данные.
За основу взял Tiny2313-MCP2515.
На стадии экспериментов подключил 2313 к КОМ порту и могу туда-сюда данные передавать.
Что получилось.
Управлять через КОМ-порт 2515. Я её могу читать/писать/ресетить.
Что нехватает: знаний sm.gif
А именно ПРОСТЫХ примеров кода на Си или АСМе для 2515.
Сконфигурировать 2515 я уже умею и знаю какими значениями.
Теперь хочу что-передать в CAN.
Подскажите, пожалуйста, минимальный пример кода для отправки одного сообщения в КАН.
Спасибо!
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 17 2014, 09:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Для начала поясняю. Передавать туда ничего не надо. Особенно в движении.
Слава богу пока в самолёты задорные ребята подключиться не могут.
К чему приведёт всеобщая "грамотность", - я не знаю. Каждый второй - хакер. С умным видом меняем прошивки что-то прикручиваем, что-то откручиваем.
Желательно чтобы на пальцах показали, как летит вон тот спутник, ну а дальше я сам, методом научного тыка.
Что-нибудь прочитать, то это сложно.
Извините, но наболело.
Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца.
Go to the top of the page
 
+Quote Post
AVL4ELECTRONIX
сообщение Feb 17 2014, 09:12
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



Цитата(SasaVitebsk @ Feb 17 2014, 11:03) *
Для начала поясняю. Передавать туда ничего не надо.
Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца.

1. Откуда Вам знать, что мне надо, а что нет?
2. Делаю своими руками.
3. Вы разбираетесь в ЭТОЙ теме? С рождения? Или с садика? Павильно, с того момента, как начали разбираться, предварительно почитав, попаяв неоднократно.
Или, не ТАК это было? Сразу за самолёты взялись и полетели?
Вот и я стремлюсь к знаниям, и кое-что, если перечитаете мой пост, у меня даже получается, а что б ЭТО получилось, я две недели по 5 часов в день сидел, читал, пробовал, писал, читал итд.
Так-что или помогите, если знаете и есть желание помочь, или особо не умничайте. А если не знаете, то вообще почему здесь отвечаете.
Создайте свой топик и там задавайте вопросы, может Вам, как и мне ответят...

Сообщение отредактировал AVL4ELECTRONIX - Feb 17 2014, 09:13
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Feb 17 2014, 10:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



у микрочипа есть готовые примеры кода на MCP2515. качаются с родного сайта.
Go to the top of the page
 
+Quote Post
AVL4ELECTRONIX
сообщение Feb 17 2014, 10:52
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



Цитата(ZASADA @ Feb 17 2014, 12:38) *
у микрочипа есть готовые примеры кода на MCP2515. качаются с родного сайта.

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

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

CODE
Я расскажу, как правильно инициализировать 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 - Feb 17 2014, 10:55
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Feb 17 2014, 12:07
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



Цитата(AVL4ELECTRONIX @ Feb 17 2014, 13:52) *
Да, но я просил ПРОСТЫЕ, а в Микрочипа на простые не похожи.

для меня они достаточно прозрачны, хотя я и не программист. и главное гарантированно рабочие.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 17 2014, 14:32
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



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

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

девайс же делали? на каком основании
>> За основу взял Tiny2313-MCP2515.

>> Что нехватает: знаний
книги для этого и придумали.

>> Теперь хочу что-передать в CAN.
т.е. читать данные, передаваемые по CAN не интересно, вот сразу писать?
поскольку вы алогично подошли к делу, то вам и дают советы, которые сначала должны исправить проблемы в логичности.

раз вам непонятны примеры, то вероятно есть пробелы в ЯП. на форуме можно найти линки на много хороших книг по С и asm.
--------------
по теме топика. вбил в поисковой машине то, что вам надо - на первой же странице великолепный тутор с разжовыванием и выка... всей темы.
т.е. вам "тупо впадлу". почему с таким отношением ктото должен к вам спешить помогать?
Go to the top of the page
 
+Quote Post
AVL4ELECTRONIX
сообщение Feb 17 2014, 17:01
Сообщение #8





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



Вот интересный ответ.
Одни нравоучения, вместо конкретно полезной информации.
Я уже писал постом выше, что если хотите мне помочь чем-то, то я рад Вас услышать.
А если просто "повыпендриваться", ибо Вам "наболело", то это к врачу, ибо здесь форум радиоэлектронщиков, а не больных людей.
И по делу. А покажите мне КНИГУ по MCP2515. Слабо?
И почему Вас так "заело", что я хочу писать, а не читать?
Вы ж не знаете, ибо Вы не экстрасенс, я уверен, иначе б знали, что данные которые мне нужны я уже давно вычитал с CAN-шины.
Как раз с Вашей стороны алогично делать какие-то выводы, не зная вводных данных.
Бумажные книги по СИ, АВР, АСМ у меня есть, штук 10. Я их почитываю.
А конкретно в этом топике меня интересует, цитирую "CAN девайс на Tiny2313-MCP2515. Примеры кода."
Пока-что "умных" ответов хватает, а вот полезной информации - нет.
Предварительно, "не в падлу", я перечитал все темы этого форума в которых упоминалось про MCP2515. Но нужной мне информации я не нашёл. Допускаю, и так скорее всего оно и есть, что я слишком туп и глуп, по-этом я и создал ЭТОТ топик в надежде на ПОМОЩЬ, а не на нравоучения.
Впредь, прошу, отвечать по-делу. Ибо УЧИТЬ и ПОУЧАТЬ - это две большие разницы. А Вам, я так вижу, хочется именно ПОУЧАТЬ, что б возвыситься в своём самомнении, наверное. Может, я и ошибаюсь, но такое моё мнение, на основании Ваших ответов.
А что на форуме можно найти линки на хорошие книги... К чему такой ответ. Я ж не знаю какие книги хорошие, а какие нет. Если Вы ЗНАЕТЕ и хотите мне ПОМОСЬ, то, пожалуйста, дайте линки на хорошие, а не пишите расплывчатую фразу о могуществе интернета.
Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл.
Спасибо!
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Feb 17 2014, 17:25
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Может тут есть чтото что Вам поможет.
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-сообщений.
Но конечно всё зависит от вашей задачи.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 17 2014, 21:11
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



>> И почему Вас так "заело", что я хочу писать, а не читать?
одна из норм поведения на форуме - сообщать, что сделал, и что не получилось.
так вы дайте больше информации для анализа тем кто вам попытается помочь.
ваше сообщение выглядит так
>> я вот тут сделал железку не зная CAN и хочу управлять ЭСУД. дайте код.

>> я уверен, иначе б знали
кхм
>> На форуме сообщений: 1 206 320
угадайте: вы первый с таким постом?

>> Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл.
вот
http://www.kreatives-chaos.com/artikel/ans...g-eines-mcp2515
примеры от и до. там используется плата с мега8 и Си.
Go to the top of the page
 
+Quote Post
AVL4ELECTRONIX
сообщение Feb 17 2014, 21:29
Сообщение #11





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



smalcom, спасибо, но "великолепный тутор" на немецком языке. Я никогда небыл в Германии, немецкого, увы не знаю.
Но спасибо.
Go to the top of the page
 
+Quote Post
msalov
сообщение Feb 18 2014, 06:17
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(AVL4ELECTRONIX @ Feb 18 2014, 00:29) *
но "великолепный тутор" на немецком языке.
Онлайн переводчик вам в помощь
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
Go to the top of the page
 
+Quote Post
AVL4ELECTRONIX
сообщение Feb 18 2014, 06:52
Сообщение #13





Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545



Цитата(msalov @ Feb 18 2014, 08:17) *
Онлайн переводчик вам в помощь
http://translate.google.com/translate?hl=r...g-eines-mcp2515

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

Спасибо.
Перевод на украинский язык выглядит ещё прикольнее sm.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.03164 секунд с 7
ELECTRONIX ©2004-2016