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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> CAN128. Попробуем разобраться.
Седой
сообщение Apr 17 2006, 13:05
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата
Чуть-чуть портят впечатление кривенькие с косенькими светодиодиками торцевые стенки-заглушки, но надеюсь это до следующей партии.


Спасибо за замечание, в текущей партии уже исправили.
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Jun 8 2007, 16:24
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



Меня очень интерисует эта тема. т. к. я сейчас только разбираючь с CAN ом. У меня вопрос.
может ли в арбитраже учавствать не только индентификатор но и остальная часть какдра.

Сообщение отредактировал zuuuuk - Jun 8 2007, 16:30
Go to the top of the page
 
+Quote Post
spf
сообщение Jun 8 2007, 16:34
Сообщение #33


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(zuuuuk @ Jun 8 2007, 22:24) *
Меня очень интерисует эта тема. т. к. я сейчас только разбираючь с CAN ом. У меня вопрос.
может ли в арбитраже учавствать не только индентификатор но и остальная часть какдра.

Это вопрос для другого форума -- http://electronix.ru/forum/index.php?showforum=158

Нет, не может. Это четко описано в спецификации.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
J0hnNick
сообщение Jun 15 2007, 10:21
Сообщение #34





Группа: Новичок
Сообщений: 13
Регистрация: 28-04-07
Пользователь №: 27 387



Цитата(KRS @ Feb 17 2006, 18:42) *
При начале работы я использовал 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'

как их исправить?
Go to the top of the page
 
+Quote Post
d'Bill
сообщение Jun 18 2007, 19:34
Сообщение #35





Группа: Участник
Сообщений: 4
Регистрация: 12-06-07
Пользователь №: 28 388



Дык их то и надо написАть ручками
Go to the top of the page
 
+Quote Post
Dimorus
сообщение Jun 19 2007, 15:19
Сообщение #36





Группа: Новичок
Сообщений: 5
Регистрация: 17-06-07
Пользователь №: 28 490



я не могу понять как этот Can ваще работает млиин помогите....
Надо чтобы одна микросхемка At90cAn128 отправляла какие-нибудь данные а другая At90cAn128 их принимала и в случае обнарожения нуля в байте данных зажигала светодиод .....очень нужно помогите smile.gif))
_________________________________________________
я не волщебник я только учусь .....

Сообщение отредактировал Dimorus - Jun 19 2007, 15:20
Go to the top of the page
 
+Quote Post
Dimorus
сообщение Jun 20 2007, 15:42
Сообщение #37





Группа: Новичок
Сообщений: 5
Регистрация: 17-06-07
Пользователь №: 28 490



А кто-нибудь автора dormouse видел или может знает? 1111493779.gif
сорри за офтопик bb-offtopic.gif
Go to the top of the page
 
+Quote Post
Alexeus
сообщение Jan 22 2009, 13:52
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345



Цитата(Dimorus @ Jun 20 2007, 18:42) *
А кто-нибудь автора dormouse видел или может знает? 1111493779.gif
сорри за офтопик bb-offtopic.gif


Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть...
Кто может помочь, скиньте код. (at90can128)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 22 2009, 18:10
Сообщение #39


Гуру
******

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



По моему на асме ничего не было. Если только билиотеку взять и Сишный модуль на асм переложить.
Go to the top of the page
 
+Quote Post
ARV
сообщение Jan 22 2009, 18:20
Сообщение #40


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



я же выкладывал нормальную библиотеку для работы с этим контроллером - чем не подходит? Единственный недостаток - работа поллингом, т.е. без прерываний по приему/передаче сообщения, но для множества применений вполне достаточно и этого.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jan 23 2009, 11:02
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Alexeus @ Jan 22 2009, 16:52) *
Такая же проблема- нужен скелет на асемблере, что бы пакет хоть просто в сеть кинуть...
Кто может помочь, скиньте код. (at90can128)

Из моего проекта без к.л. обработки.
RG00 - регистр равный 0x00. RBXn - регистры из R16...R24.
Выключил автоматическую перепередачу при ошибках. При неподтверждении ACK передаю 3 раза (4 попытки).
Вопросы конечно будут ещё..
CODE

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, а файл прикрепить что-то не удаётся. Какие-то проблемы с прикреплением файлов.
Go to the top of the page
 
+Quote Post
Alexeus
сообщение Jan 23 2009, 12:12
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345



Цитата(ARV @ Jan 22 2009, 21:20) *
я же выкладывал нормальную библиотеку для работы с этим контроллером - чем не подходит? Единственный недостаток - работа поллингом, т.е. без прерываний по приему/передаче сообщения, но для множества применений вполне достаточно и этого.


Спасибо. Там вроде на Си все реализовано. Мне для понимания на асме полегче было бы... Но спасибо, будем разбираться...
(Ох уж этот CAN, никто не хочет написать обучалку на примерах попроще для реализации CAN??? Очень нужная вещь smile.gif )

Сообщение отредактировал Alexeus - Jan 23 2009, 12:58
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 23 2009, 19:52
Сообщение #43


Гуру
******

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



А там нечего писать. Инициализацию - заимствовать. А приём - передача - найприметивнейшая. Одни разговоры - CAN.
На PIC значительно сложнее всё получается.

Если же приём осущ. по прерыванию - вообще лафа. Можно даже таймаут настроить, без внешних измерений. Короче - несколько строк.

Главное - не ленитесь - разберитесь. Ну и общее представление по CAN надо иметь.
Go to the top of the page
 
+Quote Post
ARV
сообщение Jan 24 2009, 16:45
Сообщение #44


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Alexeus @ Jan 23 2009, 15:12) *
Спасибо. Там вроде на Си все реализовано. Мне для понимания на асме полегче было бы... Но спасибо, будем разбираться...
(Ох уж этот CAN, никто не хочет написать обучалку на примерах попроще для реализации CAN??? Очень нужная вещь smile.gif )

использование ассемблера для 128 килобайт флеша - это попахивает мазохизмом... а если абстрагироваться от удобольствий, то в вышеупомянутой библиотеке достаточно для понимания... ну и почитать даташит хоть поверхностно...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Alexeus
сообщение Jan 26 2009, 07:36
Сообщение #45


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345



Это, конечно, похоже больше в тематику- обучалка, но подскажите как пакет составить и отправить, что то не соображу куда подставлять ID и собственно сами данные...

Я понимаю УСАПП там... или SPI- есть регистр в который кидай из переменной и все уйдет, по приходу реагируем на поднятый флаг, но в этом CANе я что то не въеду никак. Нужно вот пакет с полезной инфой в 8 байт отправить с идентификатором (ID), ну пусть число 395. Что для этого нужно?

(8 байт будем? например, считывать циклом из ОЗУ (ld temp,Y+))
Go to the top of the page
 
+Quote Post

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

 


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


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