AVL4ELECTRONIX 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Всем привет! Решил я соорудить CAN-девайс. Что б в автомобиле можно было смотреть-посылать данные. За основу взял Tiny2313-MCP2515. На стадии экспериментов подключил 2313 к КОМ порту и могу туда-сюда данные передавать. Что получилось. Управлять через КОМ-порт 2515. Я её могу читать/писать/ресетить. Что нехватает: знаний :) А именно ПРОСТЫХ примеров кода на Си или АСМе для 2515. Сконфигурировать 2515 я уже умею и знаю какими значениями. Теперь хочу что-передать в CAN. Подскажите, пожалуйста, минимальный пример кода для отправки одного сообщения в КАН. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Для начала поясняю. Передавать туда ничего не надо. Особенно в движении. Слава богу пока в самолёты задорные ребята подключиться не могут. К чему приведёт всеобщая "грамотность", - я не знаю. Каждый второй - хакер. С умным видом меняем прошивки что-то прикручиваем, что-то откручиваем. Желательно чтобы на пальцах показали, как летит вон тот спутник, ну а дальше я сам, методом научного тыка. Что-нибудь прочитать, то это сложно. Извините, но наболело. Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL4ELECTRONIX 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 (изменено) · Жалоба Для начала поясняю. Передавать туда ничего не надо. Ребят, не хватайтесь за спутники. Возьмите хоть что-нибудь. Сделайте своими руками. И, главное, доведите до конца. 1. Откуда Вам знать, что мне надо, а что нет? 2. Делаю своими руками. 3. Вы разбираетесь в ЭТОЙ теме? С рождения? Или с садика? Павильно, с того момента, как начали разбираться, предварительно почитав, попаяв неоднократно. Или, не ТАК это было? Сразу за самолёты взялись и полетели? Вот и я стремлюсь к знаниям, и кое-что, если перечитаете мой пост, у меня даже получается, а что б ЭТО получилось, я две недели по 5 часов в день сидел, читал, пробовал, писал, читал итд. Так-что или помогите, если знаете и есть желание помочь, или особо не умничайте. А если не знаете, то вообще почему здесь отвечаете. Создайте свой топик и там задавайте вопросы, может Вам, как и мне ответят... Изменено 17 февраля, 2014 пользователем AVL4ELECTRONIX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба у микрочипа есть готовые примеры кода на MCP2515. качаются с родного сайта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL4ELECTRONIX 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 (изменено) · Жалоба у микрочипа есть готовые примеры кода на 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, да и передачи данных в шину не было. Но для знакомства с контроллером уже не надо ломать голову=) Изменено 17 февраля, 2014 пользователем AVL4ELECTRONIX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Да, но я просил ПРОСТЫЕ, а в Микрочипа на простые не похожи. для меня они достаточно прозрачны, хотя я и не программист. и главное гарантированно рабочие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Вот, к примеру, простой пример: если для вас это "нипанятна", то SasaVitebsk прав. девайс же делали? на каком основании >> За основу взял Tiny2313-MCP2515. >> Что нехватает: знаний книги для этого и придумали. >> Теперь хочу что-передать в CAN. т.е. читать данные, передаваемые по CAN не интересно, вот сразу писать? поскольку вы алогично подошли к делу, то вам и дают советы, которые сначала должны исправить проблемы в логичности. раз вам непонятны примеры, то вероятно есть пробелы в ЯП. на форуме можно найти линки на много хороших книг по С и asm. -------------- по теме топика. вбил в поисковой машине то, что вам надо - на первой же странице великолепный тутор с разжовыванием и выка... всей темы. т.е. вам "тупо впадлу". почему с таким отношением ктото должен к вам спешить помогать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL4ELECTRONIX 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Вот интересный ответ. Одни нравоучения, вместо конкретно полезной информации. Я уже писал постом выше, что если хотите мне помочь чем-то, то я рад Вас услышать. А если просто "повыпендриваться", ибо Вам "наболело", то это к врачу, ибо здесь форум радиоэлектронщиков, а не больных людей. И по делу. А покажите мне КНИГУ по MCP2515. Слабо? И почему Вас так "заело", что я хочу писать, а не читать? Вы ж не знаете, ибо Вы не экстрасенс, я уверен, иначе б знали, что данные которые мне нужны я уже давно вычитал с CAN-шины. Как раз с Вашей стороны алогично делать какие-то выводы, не зная вводных данных. Бумажные книги по СИ, АВР, АСМ у меня есть, штук 10. Я их почитываю. А конкретно в этом топике меня интересует, цитирую "CAN девайс на Tiny2313-MCP2515. Примеры кода." Пока-что "умных" ответов хватает, а вот полезной информации - нет. Предварительно, "не в падлу", я перечитал все темы этого форума в которых упоминалось про MCP2515. Но нужной мне информации я не нашёл. Допускаю, и так скорее всего оно и есть, что я слишком туп и глуп, по-этом я и создал ЭТОТ топик в надежде на ПОМОЩЬ, а не на нравоучения. Впредь, прошу, отвечать по-делу. Ибо УЧИТЬ и ПОУЧАТЬ - это две большие разницы. А Вам, я так вижу, хочется именно ПОУЧАТЬ, что б возвыситься в своём самомнении, наверное. Может, я и ошибаюсь, но такое моё мнение, на основании Ваших ответов. А что на форуме можно найти линки на хорошие книги... К чему такой ответ. Я ж не знаю какие книги хорошие, а какие нет. Если Вы ЗНАЕТЕ и хотите мне ПОМОСЬ, то, пожалуйста, дайте линки на хорошие, а не пишите расплывчатую фразу о могуществе интернета. Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Может тут есть чтото что Вам поможет. 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-сообщений. Но конечно всё зависит от вашей задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба >> И почему Вас так "заело", что я хочу писать, а не читать? одна из норм поведения на форуме - сообщать, что сделал, и что не получилось. так вы дайте больше информации для анализа тем кто вам попытается помочь. ваше сообщение выглядит так >> я вот тут сделал железку не зная CAN и хочу управлять ЭСУД. дайте код. >> я уверен, иначе б знали кхм >> На форуме сообщений: 1 206 320 угадайте: вы первый с таким постом? >> Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл. вот http://www.kreatives-chaos.com/artikel/ans...g-eines-mcp2515 примеры от и до. там используется плата с мега8 и Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL4ELECTRONIX 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба smalcom, спасибо, но "великолепный тутор" на немецком языке. Я никогда небыл в Германии, немецкого, увы не знаю. Но спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба но "великолепный тутор" на немецком языке.Онлайн переводчик вам в помощь 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL4ELECTRONIX 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Онлайн переводчик вам в помощь http://translate.google.com/translate?hl=r...g-eines-mcp2515 В идеале лучше переводить на английский - меньше огрехов. Только сделайте скидку на машинный перевод, например, шина -> bus -> автобус. Спасибо. Перевод на украинский язык выглядит ещё прикольнее :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться