Седой 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Чуть-чуть портят впечатление кривенькие с косенькими светодиодиками торцевые стенки-заглушки, но надеюсь это до следующей партии. Спасибо за замечание, в текущей партии уже исправили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zuuuuk 0 8 июня, 2007 Опубликовано 8 июня, 2007 (изменено) · Жалоба Меня очень интерисует эта тема. т. к. я сейчас только разбираючь с CAN ом. У меня вопрос. может ли в арбитраже учавствать не только индентификатор но и остальная часть какдра. Изменено 8 июня, 2007 пользователем zuuuuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spf 0 8 июня, 2007 Опубликовано 8 июня, 2007 · Жалоба Меня очень интерисует эта тема. т. к. я сейчас только разбираючь с CAN ом. У меня вопрос. может ли в арбитраже учавствать не только индентификатор но и остальная часть какдра. Это вопрос для другого форума -- http://electronix.ru/forum/index.php?showforum=158 Нет, не может. Это четко описано в спецификации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
J0hnNick 0 15 июня, 2007 Опубликовано 15 июня, 2007 · Жалоба При начале работы я использовал CAN примерно так: // обработчик CAN (полингом) static void CanHandler(void) { { BYTE Tmp; if (CANGSTA & (1<<BOFF)) { Reset(); // произошло BUS OFF } Tmp=CANHPMOB; // Проверка принятых пакетов if (Tmp<0xF0) { CANPAGE=Tmp; if (Tmp<0x20) RxHandler1(); // прием из майл бокса 0 или 1 else if (Tmp<0x40) RxHandler2(); // прием из майл бокса 2 или 3 else if (Tmp<0x60) RxHandler3(); // прием из майл бокса 4 или 5 // удаляем пакет CANSTMOB=0; CANCDMOB=0x90; } else { // 7 ой майл бокс используем для отправки CANPAGE=0x60; if (!(CANSTMOB & (1<<TXOK))) return; TxHandler(); } } } на эту функчию получаю в компиляторе winavr ошибки C:\WinAVR\projects\Can_Int/main.c:143: undefined reference to `TxHandler' C:\WinAVR\projects\Can_Int/main.c:127: undefined reference to `Reset' C:\WinAVR\projects\Can_Int/main.c:132: undefined reference to `RxHandler1' C:\WinAVR\projects\Can_Int/main.c:133: undefined reference to `RxHandler2' C:\WinAVR\projects\Can_Int/main.c:134: undefined reference to `RxHandler3' как их исправить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d'Bill 0 18 июня, 2007 Опубликовано 18 июня, 2007 · Жалоба Дык их то и надо написАть ручками Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimorus 0 19 июня, 2007 Опубликовано 19 июня, 2007 (изменено) · Жалоба я не могу понять как этот Can ваще работает млиин помогите.... Надо чтобы одна микросхемка At90cAn128 отправляла какие-нибудь данные а другая At90cAn128 их принимала и в случае обнарожения нуля в байте данных зажигала светодиод .....очень нужно помогите :))) _________________________________________________ я не волщебник я только учусь ..... Изменено 19 июня, 2007 пользователем Dimorus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimorus 0 20 июня, 2007 Опубликовано 20 июня, 2007 · Жалоба А кто-нибудь автора dormouse видел или может знает? :1111493779: сорри за офтопик :bb-offtopic: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexeus 0 22 января, 2009 Опубликовано 22 января, 2009 · Жалоба А кто-нибудь автора dormouse видел или может знает? :1111493779: сорри за офтопик :bb-offtopic: Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть... Кто может помочь, скиньте код. (at90can128) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 22 января, 2009 Опубликовано 22 января, 2009 · Жалоба По моему на асме ничего не было. Если только билиотеку взять и Сишный модуль на асм переложить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 22 января, 2009 Опубликовано 22 января, 2009 · Жалоба я же выкладывал нормальную библиотеку для работы с этим контроллером - чем не подходит? Единственный недостаток - работа поллингом, т.е. без прерываний по приему/передаче сообщения, но для множества применений вполне достаточно и этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть... Кто может помочь, скиньте код. (at90can128) Из моего проекта без к.л. обработки. RG00 - регистр равный 0x00. RBXn - регистры из R16...R24. Выключил автоматическую перепередачу при ошибках. При неподтверждении ACK передаю 3 раза (4 попытки). Вопросы конечно будут ещё.. ICAN_L: ; Инициализация CAN. ; Тактовая частота 14745600. Связь 125000 (реально 126031) .SET CBT1=0x10 ; писаемое в CANBT1 (делитель=9, частота 1.6384 МГц) .SET CBT2=0x0A ; писаемое в CANBT2 (Tsjw=1, Tprs=6) .SET CBT3=0x25 ; писаемое в CANBT3 (Tphs2=3, Tphs1=3, SMP=1) ; TQ=(SYN=1)+(Tprs=6)+(Tphs1=3)+(Tphs2=3)=13 ; Sampling Point=((SYN=1)+(Tprs=6)+(Tphs1=3))/(TQ=13)=76.92% ;.SET CBT1=0x12 ; писаемое в CANBT1 (16 МГц) (частота 1,6 МГц) ;.SET CBT2=0x0C ; писаемое в CANBT2 (16 МГц) ;.SET CBT3=0x37 ; писаемое в CANBT3 (16 МГц) ; BRP=9 (предделитель на 10), SJW=0 (1 квант), PRS=6 (7 квантов), ; PHS2=3 (4 кванта), PHS1=3 (4 кванта), SMP=1 (3 выборки). Итого 16. ;.SET CBT1=0x0A ; писаемое в CANBT1 (12 МГц) (частота 2 МГц) ;.SET CBT2=0x0E ; писаемое в CANBT2 (12 МГц) ;.SET CBT3=0x4B ; писаемое в CANBT3 (12 МГц) ; BRP=5 (предделитель на 6), SJW=0 (1 квант), PRS=7 (8 квантов), ; PHS2=4 (5 квантов), PHS1=5 (6 квантов), SMP=1 (3 выборки). Итого 20. sts CANGCON,RG00 ; CAN запрещён ldi RBX0,15 ; имеется 15 MOb ldi RBX1,0x00 ; писаем в CANPAGE ldi XL,0x00 ; писаем в CANSTMOB ldi XH,0x00 ; писаем в CANCDMOB IniCAN1: ; цикл сброса всех MOb sts CANPAGE,RBX1 ; N MOb sts CANCDMOB,XH ; регистр контроля MOb sts CANSTMOB,XL ; регистр статуса MOb subi RBX1,0xF0 ; увеличим N Page MOb на след. раз dec RBX0 ; уменьшаем сч-к brne IniCAN1 ; циклимся ldi RBX0,CBT1 ; настройка sts CANBT1,RBX0 ; частоты ldi RBX0,CBT2 ; шоб получить sts CANBT2,RBX0 ; скорость ldi RBX0,CBT3 ; CAN sts CANBT3,RBX0 ; 125 кБит ; инициализируем скорость счёта CANTIM (Time Stamp) ldi RBX0,((Fclk>>3)/16000)-1 ; шоб считалось sts CANTCON,RBX0 ; +16 единиц за 1 мС ; иниц-зируем MOb N10..14 на прослушку сообщений "я ещё живой" ldi RBX1,14<<4 ; начнём с 14 MOb IniCAN2: ; цикл иниц-ии MOb N14..10 sts CANPAGE,RBX1 ; и писать в AT45 и слать через InIn ldi RBX0,1<<IDE ; 29 бит адреса (пока до кучи) sts CANCDMOB,RBX0 ; остальное пока запрещено ; адрес CAN приёма "я ещё живой" ldi RBX0,AdSiV>>21 ; 28..21 биты sts CANIDT1,RBX0 ; адреса приёма ldi RBX0,low(AdSiV>>13) ; 20..13 биты sts CANIDT2,RBX0 ; адреса приёма ldi RBX0,low(AdSiV>>5) ; 12..5 биты sts CANIDT3,RBX0 ; адреса приёма ldi RBX0,low(AdSiV<<3) ; 4..0 маска, sts CANIDT4,RBX0 ; RTRTAG, RB1TAG и RB0TAG ; маска адреса CAN приёма "я ещё живой" ldi RBX0,AmSiV>>21 ; 28..21 биты маски sts CANIDM1,RBX0 ; адреса приёма ldi RBX0,low(AmSiV>>13) ; 20..13 биты маски sts CANIDM2,RBX0 ; адреса приёма ldi RBX0,low(AmSiV>>5) ; 12..5 биты маски sts CANIDM3,RBX0 ; адреса приёма ldi RBX0,low(AmSiV<<3)|(1<<RTRMSK)|(1<<IDEMSK) sts CANIDM4,RBX0 ; 4..0 маска, RTR и IDE (2.0B) ldi RBX0,(1<<CONMOB1)|(1<<IDE) ; у MOb sts CANCDMOB,RBX0 ; разрешим приём (+2.0 B до кучи) subi RBX1,1<<4 ; уменьшаем N MOb cpi RBX1,10<<4 ; проверим на < 10го MOb brcc IniCAN2 ; C=0 - циклимся sts CANIE2,RG00 ; разрешим прерывание токо от ldi RBX0,1<<IEMOB14|1<<IEMOB13|1<<IEMOB12|1<<IEMOB11|1<<IEMOB10 sts CANIE1,RBX0 ; слушаюших MOb N10..14 ldi RBX0,0x7F ; сбросим все сбрасываемые sts CANGIT,RBX0 ; флаги прерываний от CAN ; sts L_GER,RG00 ; очистим LISTEN-накопитель ошибок ldi RBX0,(1<<ENIT)|(1<<ENRX)|(1<<ENTX)|(1<<ENERR)|(1<<ENERG) ; ldi RBX0,(1<<ENIT)|(1<<ENERG) ; ldi RBX0,0x00 sts CANGIE,RBX0 ; прер-я по приёму и ош-кам ; ldi RBX0,(1<<TTC)|(1<<SYNTTC)|(1<<LISTEN)|(1<<ENASTB) ldi RBX0,(1<<TTC)|(1<<SYNTTC)|(1<<ENASTB) sts CANGCON,RBX0 ; sts FlOpO,RG00 ; шоб не зависнуть sts FlCpO,RG00 ; после переиниц-ии ret ;*** C6CRO: ; Пошлём сообщение, управляющее CAN РЕЛЕ (передача Выходов). ; Но в начале запретим низкоприоритетную передачу Выходов. ldi RBX0,7<<4 ; выберем MOb sts CANPAGE,RBX0 ; N7 (+ MSG с 0) lds RBX0,CANCDMOB ; прочтём, шоб запретить токо передачу andi RBX0,low(~((1<<CONMOB1)|(1<<CONMOB0))) ; (шоб если она sts CANCDMOB,RBX0 ; уже пошла, то былаб такой-же) ldi RBX0,6<<4 ; выберем MOb sts CANPAGE,RBX0 ; N6 (+ MSG с 0) ldi RBX0,1<<IDE ; 29 бит адреса (пока до кучи) sts CANCDMOB,RBX0 ; остальное пока запрещено ; адрес CAN передачи срочного управления CAN РЕЛЕ (Выходов) lds RBX1,N8OpO ; N8 передачи Выходов lds XL,N16OpO ; м.б. N16 lds XH,N16OpO+1 ; с.б. N16 add XL,XL ; сдвинем rol XH ; всё rol RBX1 ; это rol RBX0 ; на 3 бита add XL,XL rol XH rol RBX1 rol RBX0 add XL,XL rol XH rol RBX1 rol RBX0 andi RBX0,0x07 ; тут 3 ст. бита N8 ori RBX0,(Ad6CAN>>21)&0xF8 ; 5 ст. бит адреса sts CANIDT1,RBX0 ; 28..21 биты адреса передачи sts CANIDT2,RBX1 ; 20..13 биты адреса передачи sts CANIDT3,XH ; 12..5 биты адреса передачи sts CANIDT4,XL ; 4..0 биты с RTR=RB1=RB0=0 ; маска адреса CAN передачи CAN РЕЛЕ (Выходов) ldi RBX0,Am6CAN>>21 ; 28..21 биты маски sts CANIDM1,RBX0 ; адреса передачи ldi RBX0,low(Am6CAN>>13) ; 20..13 биты маски sts CANIDM2,RBX0 ; адреса передачи ldi RBX0,low(Am6CAN>>5) ; 12..5 биты маски sts CANIDM3,RBX0 ; адреса передачи ldi RBX0,low(Am6CAN<<3)|(1<<RTRMSK)|(1<<IDEMSK) sts CANIDM4,RBX0 ; 4..0 маска, RTR и IDE (2.0B) ldi RBX0,(1<<IDE)|(LgMOb6&0x0F) ; у соотв-го MOb sts CANCDMOB,RBX0 ; запретим всё (+2.0 B до кучи) lds RBX0,DtOpO ; м.б. данных sts CANMSG,RBX0 ; в передачу lds RBX0,DtOpO+1 ; с.б. данных sts CANMSG,RBX0 ; в передачу ldi RBX0,0x03 ; разрешим 3 неполучения sts MO6Cn,RBX0 ; ACK (min м.б. 4 попытки) sts MO6St,RG00 ; статус передачи =0 sts CANSTMOB,RG00 ; очистим ош-ки и прерывания ldi RBX0,(1<<CONMOB0)|(1<<IDE)|(LgMOb6&0x0F) ; у MOb N6 sts CANCDMOB,RBX0 ; разрешим передачу + 2.0B lds RBX0,CANIE2 ; там разр-ние прерываний от MOb N0..7 andi RBX0,low(~(1<<IEMOB7)) ; запретим от MOb N7 ori RBX0,(1<<IEMOB6) ; разрешим от MOb N6 sts CANIE2,RBX0 ; назад изменённую маску lds RBX0,CANGIE ; прочтём шоб доп-но ori RBX0,(1<<ENIT)|(1<<ENTX); разрешить прер-е sts CANGIE,RBX0 ; по передаче (до кучи) ret ; возврат ;*** Кодировка не совпадает - пришлось перекодировать в DOS-866, а файл прикрепить что-то не удаётся. Какие-то проблемы с прикреплением файлов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexeus 0 23 января, 2009 Опубликовано 23 января, 2009 (изменено) · Жалоба я же выкладывал нормальную библиотеку для работы с этим контроллером - чем не подходит? Единственный недостаток - работа поллингом, т.е. без прерываний по приему/передаче сообщения, но для множества применений вполне достаточно и этого. Спасибо. Там вроде на Си все реализовано. Мне для понимания на асме полегче было бы... Но спасибо, будем разбираться... (Ох уж этот CAN, никто не хочет написать обучалку на примерах попроще для реализации CAN??? Очень нужная вещь :) ) Изменено 23 января, 2009 пользователем Alexeus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба А там нечего писать. Инициализацию - заимствовать. А приём - передача - найприметивнейшая. Одни разговоры - CAN. На PIC значительно сложнее всё получается. Если же приём осущ. по прерыванию - вообще лафа. Можно даже таймаут настроить, без внешних измерений. Короче - несколько строк. Главное - не ленитесь - разберитесь. Ну и общее представление по CAN надо иметь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 24 января, 2009 Опубликовано 24 января, 2009 · Жалоба Спасибо. Там вроде на Си все реализовано. Мне для понимания на асме полегче было бы... Но спасибо, будем разбираться... (Ох уж этот CAN, никто не хочет написать обучалку на примерах попроще для реализации CAN??? Очень нужная вещь :) ) использование ассемблера для 128 килобайт флеша - это попахивает мазохизмом... а если абстрагироваться от удобольствий, то в вышеупомянутой библиотеке достаточно для понимания... ну и почитать даташит хоть поверхностно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexeus 0 26 января, 2009 Опубликовано 26 января, 2009 · Жалоба Это, конечно, похоже больше в тематику- обучалка, но подскажите как пакет составить и отправить, что то не соображу куда подставлять ID и собственно сами данные... Я понимаю УСАПП там... или SPI- есть регистр в который кидай из переменной и все уйдет, по приходу реагируем на поднятый флаг, но в этом CANе я что то не въеду никак. Нужно вот пакет с полезной инфой в 8 байт отправить с идентификатором (ID), ну пусть число 395. Что для этого нужно? (8 байт будем? например, считывать циклом из ОЗУ (ld temp,Y+)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться