|
CAN девайс на Tiny2313-MCP2515. Примеры кода. |
|
|
|
Feb 17 2014, 08:20
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545

|
Всем привет! Решил я соорудить CAN-девайс. Что б в автомобиле можно было смотреть-посылать данные. За основу взял Tiny2313-MCP2515. На стадии экспериментов подключил 2313 к КОМ порту и могу туда-сюда данные передавать. Что получилось. Управлять через КОМ-порт 2515. Я её могу читать/писать/ресетить. Что нехватает: знаний  А именно ПРОСТЫХ примеров кода на Си или АСМе для 2515. Сконфигурировать 2515 я уже умею и знаю какими значениями. Теперь хочу что-передать в CAN. Подскажите, пожалуйста, минимальный пример кода для отправки одного сообщения в КАН. Спасибо!
|
|
|
|
|
 |
Ответов
(1 - 12)
|
Feb 17 2014, 09:03
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Для начала поясняю. Передавать туда ничего не надо. Особенно в движении. Слава богу пока в самолёты задорные ребята подключиться не могут. К чему приведёт всеобщая "грамотность", - я не знаю. Каждый второй - хакер. С умным видом меняем прошивки что-то прикручиваем, что-то откручиваем. Желательно чтобы на пальцах показали, как летит вон тот спутник, ну а дальше я сам, методом научного тыка. Что-нибудь прочитать, то это сложно. Извините, но наболело. Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца.
|
|
|
|
|
Feb 17 2014, 09:12
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545

|
Цитата(SasaVitebsk @ Feb 17 2014, 11:03)  Для начала поясняю. Передавать туда ничего не надо. Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца. 1. Откуда Вам знать, что мне надо, а что нет? 2. Делаю своими руками. 3. Вы разбираетесь в ЭТОЙ теме? С рождения? Или с садика? Павильно, с того момента, как начали разбираться, предварительно почитав, попаяв неоднократно. Или, не ТАК это было? Сразу за самолёты взялись и полетели? Вот и я стремлюсь к знаниям, и кое-что, если перечитаете мой пост, у меня даже получается, а что б ЭТО получилось, я две недели по 5 часов в день сидел, читал, пробовал, писал, читал итд. Так-что или помогите, если знаете и есть желание помочь, или особо не умничайте. А если не знаете, то вообще почему здесь отвечаете. Создайте свой топик и там задавайте вопросы, может Вам, как и мне ответят...
Сообщение отредактировал AVL4ELECTRONIX - Feb 17 2014, 09:13
|
|
|
|
|
Feb 17 2014, 10:52
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
Feb 17 2014, 14:32
|

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

|
Цитата Вот, к примеру, простой пример: если для вас это "нипанятна", то SasaVitebsk прав. девайс же делали? на каком основании >> За основу взял Tiny2313-MCP2515. >> Что нехватает: знаний книги для этого и придумали. >> Теперь хочу что-передать в CAN. т.е. читать данные, передаваемые по CAN не интересно, вот сразу писать? поскольку вы алогично подошли к делу, то вам и дают советы, которые сначала должны исправить проблемы в логичности. раз вам непонятны примеры, то вероятно есть пробелы в ЯП. на форуме можно найти линки на много хороших книг по С и asm. -------------- по теме топика. вбил в поисковой машине то, что вам надо - на первой же странице великолепный тутор с разжовыванием и выка... всей темы. т.е. вам "тупо впадлу". почему с таким отношением ктото должен к вам спешить помогать?
|
|
|
|
|
Feb 17 2014, 17:01
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545

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

Профессионал
    
Группа: Свой
Сообщений: 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=en010406P.S. Работал с CAN и на приём и на передачу. Но пользовалься CAN-контроллерами встроенными в процессор. Приходилось слушать шину с протоколом CAN-FMS (грузовики, автобусы и т.п.). Поток данных сумашедший. Для CORTEX-M3 на 50МГц загрузка не большая, но всёравно он не справлялся с трансляцией данных с CAN (250кбит) в UART (115200). Не хватало пропускной способности UART. Как по мне Tiny2313 слабоват для этой шины. Разве что как мост CAN-UART и то с существенными ограничениями. Для работы с CAN подходят процессоры с аппаратными фильтрами CAN-сообщений. Но конечно всё зависит от вашей задачи.
|
|
|
|
|
Feb 17 2014, 21:11
|

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

|
>> И почему Вас так "заело", что я хочу писать, а не читать? одна из норм поведения на форуме - сообщать, что сделал, и что не получилось. так вы дайте больше информации для анализа тем кто вам попытается помочь. ваше сообщение выглядит так >> я вот тут сделал железку не зная CAN и хочу управлять ЭСУД. дайте код. >> я уверен, иначе б знали кхм >> На форуме сообщений: 1 206 320 угадайте: вы первый с таким постом? >> Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл. вот http://www.kreatives-chaos.com/artikel/ans...g-eines-mcp2515примеры от и до. там используется плата с мега8 и Си.
|
|
|
|
|
Feb 17 2014, 21:29
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545

|
smalcom, спасибо, но "великолепный тутор" на немецком языке. Я никогда небыл в Германии, немецкого, увы не знаю. Но спасибо.
|
|
|
|
|
Feb 18 2014, 06:52
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-02-14
Из: Коломыя UA
Пользователь №: 80 545

|
Цитата(msalov @ Feb 18 2014, 08:17)  Онлайн переводчик вам в помощь http://translate.google.com/translate?hl=r...g-eines-mcp2515В идеале лучше переводить на английский - меньше огрехов. Только сделайте скидку на машинный перевод, например, шина -> bus -> автобус. Спасибо. Перевод на украинский язык выглядит ещё прикольнее
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|