|
Настройка скорости CAN АТ90CAN128, clock 14.7456 MHz for 125kbps |
|
|
|
Jul 29 2010, 14:21
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(zuuuuk @ Jul 29 2010, 07:56)  Помогите подсчитать коэфициэнты для скорости 125 кб/с CANBT1 CANBT2 CANBT3 частота контроллера 14.7456 MHz
ничего не выходит. вроде все правильно но преобразователь USB-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% А поиском лень было воспользоваться?
|
|
|
|
|
Jul 30 2010, 13:56
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(zuuuuk @ Jul 29 2010, 19:36)  поиск по форуму что ли? Да, по форуму. Обсуждалось и неоднократно. Есть ещё вариант с делителем=7 и TQ=17. Там получается 123912 бод. А вообще, здесь принято на вы обращатся...
|
|
|
|
|
Aug 3 2010, 10:01
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Видимо у вас в сети нет никого, кроме этого самого USB-CAN, поэтому никто ему ACK не отвечает, возникает ошибки Ack Error, счётчик ошибок инкрементируется, передатчик автоматически перепередаёт сообщение, и так до тех пор, пока не окажется в Error Passive. Сеть CAN не может состоять из одного устройства, а остальные, как я понял, неправильно проинициализированы.
|
|
|
|
|
Aug 3 2010, 14:03
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(zuuuuk @ Aug 3 2010, 16:54)  // CAN Controller initialization // CAN: On CANGCON=0x02; Так вы с самого начала неправильно инитите контроллер Надо Код CANGCON=0; while(CANGSTA & (1<<ENFG)); .... нужная инициализация // запуск CAN CANGCON=(1<<ENASTB); while(!(CANGSTA & (1<<ENFG)));
|
|
|
|
|
Aug 3 2010, 15:44
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(zuuuuk @ Aug 3 2010, 16:54)  да там короткие нулевые биты длинной 15 мк секунд. доходят до драйвера CAN. Значит, хоть CANGCON перед инициализацией и не был сброшен, похоже, скорость проинициализировалась правильно. 15 мк секунд это как раз 2 бита на скорости 125 кбод. Вроде должно работать. А терминальные резисторы имеются? Цитата(KRS @ Aug 3 2010, 18:03)  Код while(CANGSTA & (1<<ENFG)); Если речь идёт о инициализации после включения питания, то, на мой взгляд, это необязательно. После включения питания никакой передачи происходить не может, поэтому выключаться CAN контроллер будет мгновенно. А вот добавить в инициализацию цикл сброса всех MOb обязательно нужно, т.к. после включения питания там м.б. что угодно.
|
|
|
|
|
Aug 4 2010, 07:39
|
Частый гость
 
Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334

|
Цитата(galjoen @ Aug 3 2010, 19:44)  15 мк секунд это как раз 2 бита на скорости 125 кбод. там действительно идут импульсы. длинна одного нулевого импульсы 15 мк секунд. только возникает вопрос. ACk должен быть 1 бит а не 2. и следовательно длинна нулевых имп. должна быть в 2 раза меньше. я неправ?
|
|
|
|
|
Aug 4 2010, 13:20
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата ACK FIELD The ACK FIELD is two bits long and contains the ACK SLOT and the ACK DELIMITER. In the ACK FIELD the transmitting station sends two ’recessive’ bits. A RECEIVER which has received a valid message correctly, reports this to the TRANSMITTER by sending a ’dominant’ bit during the ACK SLOT (it sends ’ACK’). Цитата BIT ERROR A unit that is sending a bit on the bus also monitors the bus. A BIT ERROR has to be detected at that bit time, when the bit value that is monitored is different from the bit value that is sent. An exception is the sending of a ’recessive’ bit during the stuffed bit stream of the ARBITRATION FIELD or during the ACK SLOT. Then no BIT ERROR occurs when a ’dominant’ bit is monitored. A TRANSMITTER sending a PASSIVE ERROR FLAG and detecting a ’dominant’ bit does not interpret this as a BIT ERROR Надо будет у себя глянуть сколько бит длина у ACK.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|