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

AVL4ELECTRONIX

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о AVL4ELECTRONIX

  • День рождения 25.03.1970

Старые поля

  • skype
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Спасибо. Перевод на украинский язык выглядит ещё прикольнее :)
  2. smalcom, спасибо, но "великолепный тутор" на немецком языке. Я никогда небыл в Германии, немецкого, увы не знаю. Но спасибо.
  3. Вот интересный ответ. Одни нравоучения, вместо конкретно полезной информации. Я уже писал постом выше, что если хотите мне помочь чем-то, то я рад Вас услышать. А если просто "повыпендриваться", ибо Вам "наболело", то это к врачу, ибо здесь форум радиоэлектронщиков, а не больных людей. И по делу. А покажите мне КНИГУ по MCP2515. Слабо? И почему Вас так "заело", что я хочу писать, а не читать? Вы ж не знаете, ибо Вы не экстрасенс, я уверен, иначе б знали, что данные которые мне нужны я уже давно вычитал с CAN-шины. Как раз с Вашей стороны алогично делать какие-то выводы, не зная вводных данных. Бумажные книги по СИ, АВР, АСМ у меня есть, штук 10. Я их почитываю. А конкретно в этом топике меня интересует, цитирую "CAN девайс на Tiny2313-MCP2515. Примеры кода." Пока-что "умных" ответов хватает, а вот полезной информации - нет. Предварительно, "не в падлу", я перечитал все темы этого форума в которых упоминалось про MCP2515. Но нужной мне информации я не нашёл. Допускаю, и так скорее всего оно и есть, что я слишком туп и глуп, по-этом я и создал ЭТОТ топик в надежде на ПОМОЩЬ, а не на нравоучения. Впредь, прошу, отвечать по-делу. Ибо УЧИТЬ и ПОУЧАТЬ - это две большие разницы. А Вам, я так вижу, хочется именно ПОУЧАТЬ, что б возвыситься в своём самомнении, наверное. Может, я и ошибаюсь, но такое моё мнение, на основании Ваших ответов. А что на форуме можно найти линки на хорошие книги... К чему такой ответ. Я ж не знаю какие книги хорошие, а какие нет. Если Вы ЗНАЕТЕ и хотите мне ПОМОСЬ, то, пожалуйста, дайте линки на хорошие, а не пишите расплывчатую фразу о могуществе интернета. Пожалуйста, дайте линк на "великолепный тутор", я, увы, так его и не нашёл. Спасибо!
  4. Да, но я просил ПРОСТЫЕ, а в Микрочипа на простые не похожи. Вот, к примеру, простой пример: Я расскажу, как правильно инициализировать 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, да и передачи данных в шину не было. Но для знакомства с контроллером уже не надо ломать голову=)
  5. 1. Откуда Вам знать, что мне надо, а что нет? 2. Делаю своими руками. 3. Вы разбираетесь в ЭТОЙ теме? С рождения? Или с садика? Павильно, с того момента, как начали разбираться, предварительно почитав, попаяв неоднократно. Или, не ТАК это было? Сразу за самолёты взялись и полетели? Вот и я стремлюсь к знаниям, и кое-что, если перечитаете мой пост, у меня даже получается, а что б ЭТО получилось, я две недели по 5 часов в день сидел, читал, пробовал, писал, читал итд. Так-что или помогите, если знаете и есть желание помочь, или особо не умничайте. А если не знаете, то вообще почему здесь отвечаете. Создайте свой топик и там задавайте вопросы, может Вам, как и мне ответят...
  6. Всем привет! Решил я соорудить CAN-девайс. Что б в автомобиле можно было смотреть-посылать данные. За основу взял Tiny2313-MCP2515. На стадии экспериментов подключил 2313 к КОМ порту и могу туда-сюда данные передавать. Что получилось. Управлять через КОМ-порт 2515. Я её могу читать/писать/ресетить. Что нехватает: знаний :) А именно ПРОСТЫХ примеров кода на Си или АСМе для 2515. Сконфигурировать 2515 я уже умею и знаю какими значениями. Теперь хочу что-передать в CAN. Подскажите, пожалуйста, минимальный пример кода для отправки одного сообщения в КАН. Спасибо!
×
×
  • Создать...