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

 
 
> AT90CAN128 конфигурирование mob на прием?, CAN протокол
Alexeus
сообщение Feb 26 2010, 11:29
Сообщение #1


Участник
*

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



Контроллер AT90CAN128, cреда программирования CvAVR.
CAN инициализировал, мобы на отправку тоже. Сообщения отправляются.

Уперся в прием кадра:
В сеть другим устройством кидается кадр с id 401 и длиной 1 байт, мне нужно его принять.
Пытаюсь сконфигурировать моб7 на прием конкретного кадра с id 401. Что то не получается принять данные... Я правильно конфигурирую сам моб?
Пожалуйста прочтите каменты после строк кода и ответьте если в курсе...


CANPAGE = 0x78; //выбор моб7 автоинкремент буфера данных отключен
// вопрос. если автоинкремент отключен, то как читать/писать canmsg с индексом байта, так? canmsg[0]... canmsg[7]

CANCDMOB = 0;
//вводим моб в неопределенное состояние (прием/передача не определены) -думаю это не обязательно

CANIDT1 = 0x32; //задаем TAG: id "401"
CANIDT2 = 0x20; //...
//сдесь задаем именно этот id -401

CANIDM1 = 0xFF; //задаем mask "111 1111 1111" прием/передача только одного id
CANIDM2 = 0xE0; //...
//тут по-идее маска, что прием будет конкретного id, а зачем??? если мы уже указали в TAGe, что ждем id 401 и другие будут отсеиваться...

CANSTMOB=0; // очистим ош-ки и прерывания данного моба
CANCDMOB = 0b10000001; //Разрешаем прием кадров в этот моб, без ответа, CAN2.0A, ожидаемая длина сообщения 1байт

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

Сообщение отредактировал Alexeus - Feb 26 2010, 11:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alexeus
сообщение Feb 27 2010, 09:00
Сообщение #2


Участник
*

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



CAN настроен, включены мобы с 0 по 7й, исходящие кадры уходят и принимаются другим устройством (другое устройство- это дисплей, я визуально вижу приходящую информацию, она совпадает с той, что я задумал отправить)

есть дисплей в автомобиле, на нем две кнопки- нажатие первой вызывает информацию борткомпьютера (сама информация БК приходит уже в другом кадре, с другим id ! ), повторное нажатие первой- переключает на часы, нажатие второй- вызывает информацию с датчика внешней температуры, повторное нажатие этой же (второй кнопки) возвращает к отображению внутренней температуры (и снова, информация о температурах приходит в другом кадре, с другим id ! ).

для обеих кнопок один can-кадр c id 401, судя по программе CANHACKER, он содержит 1 байт, в котором изменяются разные биты в реакцию на нажатие одной или другой кнопки.

Исходя из этих данных, я так понял, что это похоже на удаленный запрос, а ловил я кадр с id 401 как простой кадр приема- может поэтому он и не проходил процедуру сравнения и в статусе этого "моба на прием" не было RxOK, там вообще ничего, он в "0".


Может мне кто нибудь разъяснить как принять удаленный запрос? В даташите атмела (и в русской версии) очень скудно написано, "при удаленном запросе нужно выставить бит RTRTAG". Ну понятно что если ждем удаленный запрос, то нужно выставить бит RTRTAG в CANIDT4, но для чего там же RB0TAG, как его выставить? и для чего в CANIDM4 биты RTRMSK и IDEMSK- их как выставлять в этом случае?

Сообщение отредактировал Alexeus - Feb 27 2010, 09:13
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 06:14
Рейтинг@Mail.ru


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