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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> CAN128. Попробуем разобраться.
dormouse
сообщение Feb 16 2006, 20:04
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Начал разработку несложного софта для системы из нескольких at90can128. Фактически, надо сделать несложный исходник на IAR EC++ 4.1 Посмотрел, что есть из готового, но ничего не нашёл.
Единственное - колоссального размера исходник от Atmel'a (вроде адаптированный от прошлой архитектуры).

Для начала очень желаемо суметь написать софт, который сможет принять-послать-обработать ошибку.

Насчёт более высокого уровня (DeviceNET, CANOpen e.t.c) пока не сумел разобраться - складывается ощущение, что ничего готового (ни одного готового каркаса) невозможно найти...

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

Жду ответа.
Go to the top of the page
 
+Quote Post
era
сообщение Feb 16 2006, 21:31
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 16-12-05
Пользователь №: 12 321



Типа совет. Когда работал с CAN-ом слепил приблуду - управляемый через ByteBlaster контроллер CAN на MCP2510 с опторазвязкой и драйвером линии. Можно посылать-принимать сообщения или подслушивать шину. Для отладки весьма полезно.
Возможно, можно найти что-нибудь не кустарное.
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Feb 17 2006, 03:39
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



По-моему проще разобраться и своё сгородить. На С это несколько строчек текста, не более того.

Протоколы высокого уровня конечно - более серьёзная тема, тоже ничего не попадалось.
Go to the top of the page
 
+Quote Post
spf
сообщение Feb 17 2006, 04:24
Сообщение #4


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

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



Цитата(dormouse @ Feb 17 2006, 01:04) *
Для начала очень желаемо суметь написать софт, который сможет принять-послать-обработать ошибку.

Не поверю что для Atmel'a такого нет. ;-)
Это же пара строк кода, после прочтения доки на can-контроллер и CAN спецификации.
- Инициализация (скорость и т.п)
- Настройка приемных фильтров (далее по прерыванию или контролю флага приема)
- Поместить в буфер сообщение и стартовать передачу
- Анализ регистров ошибок

Можно поискать/посмотреть примеры для других CAN-контроллеров, например SJA1000.

Цитата
Насчёт более высокого уровня (DeviceNET, CANOpen e.t.c) пока не сумел разобраться - складывается ощущение, что ничего готового (ни одного готового каркаса) невозможно найти...

Есть такие , один из них - http://www.vscp.org/

PS:
Рекомендую приобрести готовое can устройство, для контроля и отладки сети между МК. Подойдут недорогие USB-CAN, цена около 100$, к ним прилагаются библиотеки и примеры.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
dormouse
сообщение Feb 17 2006, 11:07
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Найденные в продаже устройства:
1. Славна $70 (г.Свердловск). http://www.slavna.ru/stran/devices.htm
2. Rainbow $? (г.Москва) http://www.rtcs.ru/prod_element2.asp?wh_ke...B-CAN&id=401846
3. Много всего http://www.datamicro.ru/can/interfaces/usb-can.shtml
4. Каскод $160 (г.Ленинград). http://www.kaskod.ru/templates/pdf.dop.php...USB-CAN-адаптер
5. Apox $157, $300 исходники http://www.apoxcontrols.com/usbcan.htm (возможно можно заказать через efo.ru http://www.efo.ru/doc/Ftdi/Ftdi.pl?642 - За $140 вероятно более дешёвая версия без опто, $125 на сайте производителя)

По производителям софта (наличию хоть чего-нибудь) пока плохо.

В качестве платы выбрал www.miklobit.com (MB128-USB-CAN) - Обещали дать в комплект немного рабочего софта.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 17 2006, 14:42
Сообщение #6


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

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



При начале работы я использовал CAN примерно так:

Код
//инициализация кана
static void CanInit(void)
{
  //входим в ресет моду
  CANGCON=0;
  while(CANGSTA & (1<<ENFG));

  // задаем TIME сеги... примеры есть в даташите
  CANBT1=CANBT1_DEF;
  CANBT2=CANBT2_DEF;
  CANBT3=CANBT3_DEF;

  // инициализируем все майлбоксы
  {
    BYTE i;
    for(i=0x00; i<0xF0; i+=0x10) {
      CANPAGE  = i;
      CANSTMOB = 0;
      CANCDMOB = 0;
    }  
  }
  
  // разрешаем прерывание на прием от майл боксов
  //  но только для полинга что бы использовать CANHPMOB
  CANGIE = 0x20;
  CANIE1=0x7F;
  CANIE2=0xFF;
  
}


// инициализация майл боксов
static void CanInitMailBoxes(void)
{
// инициализируем 6 майл боксов на прием extended frame

  CANPAGE=0;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;
  
  CANPAGE=0x10;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;

  CANPAGE=0x20;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;

  CANPAGE=0x30;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;

  CANPAGE=0x40;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;

  CANPAGE=0x50;
  CANIDT1=??;
  CANIDT2=??;
  CANIDT3=??;
  CANIDT4=??;
  CANIDM1=??;
  CANIDM2=??;
  CANIDM3=??;
  CANIDM4=??;
  CANCDMOB=0x90;
}

// вход в рабочий режим
static void CanEnterOperatingMode(void)
{
  CANGCON=(1<<ENASTB);
  while(!(CANGSTA & (1<<ENFG)));
}




// обработчик 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();
    }  
  }
}


void main(void)
{
    CanInit();
    CanInitMailBoxes();
    CanEnterOperatingMode();
      // посылаем стартовый пакет (устройство включилось)
      // примерно так (extended frame без данных)
      CANIDT1=??;
      CANIDT2=??;
      CANIDT3=??;
      CANIDT4=??;
      CANSTMOB=0;
      CANCDMOB=0x50;

    while(1) {
      CanHandler();
    }

}
Go to the top of the page
 
+Quote Post
dormouse
сообщение Feb 22 2006, 12:54
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Пока изучаю, ещё не компилировал. После обдумывания ситуации и изучения просторов интернета я понял, что ясного представления о "CAN" в терминах модели OSI у меня нет. Точнее - то я вижу это как UART, то как RS-232, то как modbus over serial (надюсь, что аналогия понятна: mailbox - это уже больше UART, поскольку это обработка; арбитраж мастеров по приоритету - тоже часть функций более высокого уровня; перепосылка... А обработка количества ошибок и отключение от линии- вообще неясно кем выполняется.).

По сути, для моих приложений оказалось достаточно ("можно втиснуть") MODBUS/RS-485 @ 0.5MBit.
На такой скорости вполне можно обойтись мастером и дополнительной линией синхронизации начала выполнения инструкции, переданной через MODBUS (если стартовый пакет не дойдёт до одного из slave, будет катастрофа).

В данном исходнике я вижу нечто подобное уровню физической сети + часть гарантированной доставки сообщения. Более высокий уровень надо мастерить руками и продвинутая версия будет называться DeviceNET, CANOpen e.t.c? При этом я так и не нашёл ни одного исходника "бесплатного" типа. Если посмотреть в форум (недавно начатая ветка про программы/библиотеки IAR C), можно увидеть характерное количество скачиваний файлов типа twi.c, lcd.c, timer.c e.t.c. Можно ли попробовать совместно с Вами написать что-то подобное (или просить Вас выложить более прилизанный каркас?) - т.е. готовое приложение "скомпилировал-залил в две CAN128-на правом жмём кнопочку-левый отвечает помаргиванием".


PS Ответа от slavna.ru с предложением о покупке их адаптера USB-CAN не получил пока.
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 24 2006, 07:51
Сообщение #8


Местный
***

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



Уважаемый dormouse, Вы пишите:
Цитата
PS Ответа от slavna.ru с предложением о покупке их адаптера USB-CAN не получил пока.


Отвечаю: запроса на покупку от Вас мы не получали.

На складе есть все http://www.slavna.ru/stran/devices.htm. Шлите заявку на npp@slavna.ru или непосредственно мне stas@slavna.ru

PS. Заканчиваем тестирование преобразователя USB-rs485 c аппаратными реализациями некоторых протоколов, в том числи и MODBUS (RTU и ASCII)

Сообщение отредактировал Седой - Feb 24 2006, 07:55
Go to the top of the page
 
+Quote Post
dormouse
сообщение Feb 24 2006, 11:00
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Письмо я направил на NPP@SLAVNA.RU, 17 Фев 2006 16:39:00. Тогда связываемся через форум.
Мне надо получить внешний CAN (1шт, к нему очень желательно исходник на С - мне надо понять способ реальной работы с CAN, поскольку я никак не могу пробиться на начальную стадию ("когда кто-то кому-то как-то что-то передал")).

Иными словами я обещаю, что исходник "дальше меня" не пойдёт, не будет использоваться как часть или целое в коммерческих проектах, не будет опубликован в любом виде и что единственный способ использования - самообразование ;-)

В итоге я хочу купить в Москве 1 шт. USB-CAN-ext-06 с исходником (или частью исходника, отвечающей за CAN).

Владимир.
Go to the top of the page
 
+Quote Post
spf
сообщение Feb 26 2006, 05:18
Сообщение #10


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

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



Цитата(dormouse @ Feb 22 2006, 17:54) *
Пока изучаю, ещё не компилировал. После обдумывания ситуации и изучения просторов интернета я понял, что ясного представления о "CAN" в терминах модели OSI у меня нет.

Два первых уровня реализованы аппаратно
http://www.can-cia.org/can/higher-layer/
На www.datamicro.ru был?
Цитата
Точнее - то я вижу это как UART, то как RS-232, то как modbus over serial (надюсь, что аналогия понятна: mailbox - это уже больше UART, поскольку это обработка; арбитраж мастеров по приоритету - тоже часть функций более высокого уровня; перепосылка... А обработка количества ошибок и отключение от линии- вообще неясно кем выполняется.).

Арбитраж выполняется аппаратно, перепосылка аппаратно, контроль допустимого количества ошибок приложением пользователя, отключение от шины аппаратно, при достижении порога ошибок. При нормальной работе "отключение от шины " не требуется.
Цитата
По сути, для моих приложений оказалось достаточно ("можно втиснуть") MODBUS/RS-485 @ 0.5MBit.
На такой скорости вполне можно обойтись мастером и дополнительной линией синхронизации начала выполнения инструкции, переданной через MODBUS (если стартовый пакет не дойдёт до одного из slave, будет катастрофа).

Какая катастрофа?
Каким образом собираетесь контролировать что слейв еще жив?
Цитата
В данном исходнике я вижу нечто подобное уровню физической сети + часть гарантированной доставки сообщения.

Доставка гарантируется аппаратно.
Цитата
Более высокий уровень надо мастерить руками и продвинутая версия будет называться DeviceNET, CANOpen e.t.c? При этом я так и не нашёл ни одного исходника "бесплатного" типа.

Ищи лучше, одну ссылку давал, вот вторая:
http://www.microcanopen.com/
Подобные ссылке копил раньше, сейчас они не работают, поэтому приходится "искать" их текущее местоположение...

Протокол высокого уровня может и не потребоваться, в определенных условиях можно обойтись аппаратными возможностями фильтрации сообщений.

В CAN самое важное понять принцип арбитража и фильтрации по ID, и как можно больше пользоваться этими возможностями при реализации обмена между абонентами. ID это не только номер абонента, в нем можно выделить поля параметров, приоритетов и т.п.
Цитата
Если посмотреть в форум (недавно начатая ветка про программы/библиотеки IAR C), можно увидеть характерное количество скачиваний файлов типа twi.c, lcd.c, timer.c e.t.c. Можно ли попробовать совместно с Вами написать что-то подобное (или просить Вас выложить более прилизанный каркас?) - т.е. готовое приложение "скомпилировал-залил в две CAN128-на правом жмём кнопочку-левый отвечает помаргиванием".

Пример уже привели, на его основе уже можно сделать такую поделку.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
dormouse
сообщение Feb 26 2006, 06:06
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Отлично. Почти собрал этот исходник. Осталось только немного разобраться с CANIDT? . Надеюсь, что скоро заработает. Критической ситуацией с подтверждениями я хотел обозначить следующее:
Предположим, надо добиться синхронного начала работы N слейвов. Мастер последовательно настроил их, после этого должен дать инструкцию "старт". Если пользоваться modbus, то вариантов два (с дополнительной линией и без).
1. С дополнительной линией: выставляем на ней сильный ноль - все клиенты стартовали. Так же в неожиданный момент времени любой клиент самостоятельно выставляет ноль на линии => все замирают и мастер начинает последовательно перебирать слейвов, чтобы разобраться, что случилось.

2. Мастер всем синхронирнизовал часы, после чего шлёт первому инструкцию стартовать через deltaTn. Получает подтверждение, шлёт второму deltaT(n-1) и т.д. В итоге, если на каком -то слейве произошёл сбой, то мастер шлёт броадкаст, что надо отложить старт на 1 попытку связи.

Проблема в том, что для паранои это сообщение само может быть не получено одним из слейвов и он начнёт работать не в нужное время.

До сих пор не смог внятно понять, как реализуется подверждения приёма всеми узлами броадкаста в CAN шине.

Жду ответа.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 26 2006, 10:02
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(dormouse @ Feb 26 2006, 11:06) *
До сих пор не смог внятно понять, как реализуется подверждения приёма всеми узлами броадкаста в CAN шине.

Жду ответа.


Совет один, прочитать спецификацию CAN, она открытая и в общем то понятная. В сети встречаются даже переведенные на русский язык спецификации, если не ошибаюсь, есть на www.datamicro.ru (эту ссылку уже давали выше). Уточняющие вопросы задать здесь.
Желание заниматься преподавательской деятельностью есть далеко не у всех.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
John
сообщение Mar 1 2006, 03:15
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 29
Регистрация: 6-10-04
Пользователь №: 799



Посмотрите еще здесь - Описание CAN на русском языке;
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Apr 4 2006, 10:13
Сообщение #14


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

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



Цитата(KRS @ Feb 17 2006, 18:42) *
При начале работы я использовал CAN примерно так:

Код
...............
      CANPAGE=0x60;
      if (!(CANSTMOB & (1<<TXOK))) return;
      TxHandler();

...............


А TxHandler() что делает?
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 4 2006, 11:14
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Цитата(dormouse @ Feb 26 2006, 10:06) *
Проблема в том, что для паранои это сообщение само может быть не получено одним из слейвов и он начнёт работать не в нужное время.


Такой ситуации просто неможет быть если все устройства сети настроены соответствующим образом(т.е работают на одной скорости и неотпинают пакет своим фильтром).Когда на линии выставляется любое состояние его принимают абсолютно все узлы.

Если существует проблема синхронизации действий разных узлов она предусмотрена в высокоуровневых протоколах(например в CANOpen есть пакет под названием SYNC имеющий высокий приоритет).

Вобще воспринимать интерфейс CAN в отрыве от конкретного протокола очень странно.А придумывать свой долго и нецелесообразно.
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Apr 4 2006, 11:43
Сообщение #16


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

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



Цитата(KRS @ Feb 17 2006, 18:42) *
При начале работы я использовал CAN примерно так:

Код
  //входим в ресет моду
  CANGCON=0;
  while(CANGSTA & (1<<ENFG))  {} ;


Не понимаю смысл этого куска. ENFG никогда не будет 1, если в CANGCON записать 0. Или я ошибаюсь?
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 4 2006, 14:28
Сообщение #17


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

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



Цитата(ruslannd @ Apr 4 2006, 15:43) *
Цитата(KRS @ Feb 17 2006, 18:42) *

При начале работы я использовал CAN примерно так:

Код
  //входим в ресет моду
  CANGCON=0;
  while(CANGSTA & (1<<ENFG))  {};


Не понимаю смысл этого куска. ENFG никогда не будет 1, если в CANGCON записать 0. Или я ошибаюсь?


если кан находится в рабочем режиме ENFG=1
когда записываем 0 в CANGCON дается команда войти в ресет моде
пока кан входит в ресет моде ENFG будет 1 надо ждать пока не станет 0
Go to the top of the page
 
+Quote Post
dormouse
сообщение Apr 4 2006, 21:00
Сообщение #18


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Позволю добавить от себя ;-) Я разобрался с работой CAN за неделю. Из своего непонимания почти всё было ликвидировано. Вопрос о негарантированности доставки одному из слейвов (получателей) приобрёл другой характер:
CAN шина ГАРАНТИРУЕТ, что все приёмники РАБОТАЮЩИЕ В ЭТОТ МОМЕНТ на шине успешно получили сообщение. Никакой информации о количестве узлов, получивших сообщение НЕТ! В контексте поего предыдущего вопроса из этого можно сделать вывод, что надо после этого уметь на мастер узле принять N подтверждений о доставке (узел мог просто потерять питание!). В противном случае надо принять решение о дальнейшей работе всех устройств.

Сложность реализации оказалась незначительной, но до конца я пока не разобрался ( скажем, как надо распределить MOB'ы если посылающий RDF должен принять ответ на него и прочие мелочи), поскольку в данный момент после успешного испытания простейшего решения на базе "один сообщил => другой принял" работы ведутся над другими частями.

PS Отдельное спасибо НПП Славна (http://www.slavna.ru). Успешно получено купленное у них USB->CAN устройство. Пока не испытано.
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 5 2006, 05:11
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Цитата(dormouse @ Apr 5 2006, 01:00) *
Позволю добавить от себя ;-) Я разобрался с работой CAN за неделю. Из своего непонимания почти всё было ликвидировано. Вопрос о негарантированности доставки одному из слейвов (получателей) приобрёл другой характер:
CAN шина ГАРАНТИРУЕТ, что все приёмники РАБОТАЮЩИЕ В ЭТОТ МОМЕНТ на шине успешно получили сообщение. Никакой информации о количестве узлов, получивших сообщение НЕТ! В контексте поего предыдущего вопроса из этого можно сделать вывод, что надо после этого уметь на мастер узле принять N подтверждений о доставке (узел мог просто потерять питание!). В противном случае надо принять решение о дальнейшей работе всех устройств.

Сложность реализации оказалась незначительной, но до конца я пока не разобрался ( скажем, как надо распределить MOB'ы если посылающий RDF должен принять ответ на него и прочие мелочи), поскольку в данный момент после успешного испытания простейшего решения на базе "один сообщил => другой принял" работы ведутся над другими частями.

PS Отдельное спасибо НПП Славна (http://www.slavna.ru). Успешно получено купленное у них USB->CAN устройство. Пока не испытано.


Мне кажется что в данном случае имеет место попытка использовать CAN как обычный RS-485 с технологией запрос-ответ.Прелесть CANа как раз в том что проблемы целостности сети и работоспособности узлов решаются на более высоком уровне(на уровне протокола).Физическая линия гарантирует и так все на свете.Допустим в протоколе CANOpen существует по крайне мере 2 способа слежения за работой узлов это Nodeguarding и Heartbert.Первый заключается в периодичном опросе всех узлов мастером и получении их текущего статуса(режима работы) а второй заставляет slave-ы постоянно отправлять свой статус самостоятельно(из названия понятно что это как серцибиение).Кроме того в случае перезагрузки прибора он обязан отослать пакет BootUp который можно отлавливать.
В крайнем случае можно использовать RTR но это уже в чистом виде RS-485.

Кароче все возникающие вопросы относятся исключительно к отсутствию протокола(каждый из которых уже все эти грабли для себя определил)
Go to the top of the page
 
+Quote Post
kanzler
сообщение Apr 5 2006, 05:28
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Привет всем! Идейные соображения по поводу CAN меня не интересуют, такой я вот Пацак :-)
Авот в материальном плане чем смогу тем и помогу. Работал когда то я в команде которая разрабатывала Банковскую Автоматизированную Распознающую Систему. Так вот в ней все устройсва были подключены к хосту через CAN. Я уже давно там не работаю но исходники как ниского так и высого уровня есть. Может поработаем вместе. Прошу не судить строго но у меня есть свои интерсы в этом вопросе.
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 5 2006, 05:39
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Цитата(kanzler @ Apr 5 2006, 09:28) *
Привет всем! Идейные соображения по поводу CAN меня не интересуют, такой я вот Пацак :-)
Авот в материальном плане чем смогу тем и помогу. Работал когда то я в команде которая разрабатывала Банковскую Автоматизированную Распознающую Систему. Так вот в ней все устройсва были подключены к хосту через CAN. Я уже давно там не работаю но исходники как ниского так и высого уровня есть. Может поработаем вместе. Прошу не судить строго но у меня есть свои интерсы в этом вопросе.

Несовсем в тему но всетаки вопрос.А незавалялось ли с тех времен какого нибудь фирменного софта например IXXAT CANAnalizer или Vector CANErator а может быть CANOpen Conformance Test.
Go to the top of the page
 
+Quote Post
dormouse
сообщение Apr 5 2006, 07:00
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Совершенно верное суждение насчёт протоколов высокого уровня. В CANOpen, DEVICENET это всё есть. Единственная сложность в том, что нет готового OpenSource верианта, если я правильно понимаю суть проблемы. Иными словами если надо использовать MODBUS/485 - пожалуйста. За час работы в сети я нашей 4 независимые реализации. Полностью все спецификации выложены на сайте и т.д. С CAN ситуация иная. Пути:
1. Иметь МНОГО времени и реализовать либо свой CANOpen
2. Иметь МНОГО денег и купить уже реализованный (как я понял, минимум $850 за библиотеку без исходников)
3. Иметь большой умный мозг и МНОГО времени - придумать некое "подмножество" протокола CANOpen и реализовать его.
4. Ограничиться самым примитивным решением - взять только DataFrame от физической части CAN и сделать только HeartBeat для гарантированности работы всего "в целом".

Можно даже BootUP не использовать - в некотором смысле при фиксированном наборе устройств, при отсутствии одного по HeartBeat, работа всей остальной совокупности уже невозможна. В этом смысле BootUP заменяется просто "push'ингом" HeartBeat'ов от слейвов к мастеру. Даже не требуется RDF использовать для этого, шина и так рассчитана на большую пропускную способность.
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 5 2006, 07:22
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Цитата(dormouse @ Apr 5 2006, 11:00) *
Совершенно верное суждение насчёт протоколов высокого уровня. В CANOpen, DEVICENET это всё есть. Единственная сложность в том, что нет готового OpenSource верианта, если я правильно понимаю суть проблемы. Иными словами если надо использовать MODBUS/485 - пожалуйста. За час работы в сети я нашей 4 независимые реализации. Полностью все спецификации выложены на сайте и т.д. С CAN ситуация иная. Пути:
1. Иметь МНОГО времени и реализовать либо свой CANOpen
2. Иметь МНОГО денег и купить уже реализованный (как я понял, минимум $850 за библиотеку без исходников)
3. Иметь большой умный мозг и МНОГО времени - придумать некое "подмножество" протокола CANOpen и реализовать его.
4. Ограничиться самым примитивным решением - взять только DataFrame от физической части CAN и сделать только HeartBeat для гарантированности работы всего "в целом".

Можно даже BootUP не использовать - в некотором смысле при фиксированном наборе устройств, при отсутствии одного по HeartBeat, работа всей остальной совокупности уже невозможна. В этом смысле BootUP заменяется просто "push'ингом" HeartBeat'ов от слейвов к мастеру. Даже не требуется RDF использовать для этого, шина и так рассчитана на большую пропускную способность.


Ну для реализации своего CANOpen варианта нужно не так уж и много времени благо часть функциональности можно неделать что допускается спецификациями.Но в любом случае вопрос звучит по другому а именно для чего все это,какую задачу вы пытаетесь решить.Пару лет назад когда в моей лавке встала задача собрать измерительную систему тоже были варианты.
1.Купить готовую или собрать из покупных модулей
2.Купить исходники или библиотеки для убыстрения разработки
3.Создать свою с нуля определившись с технологией,интерфейсами и протоколами

В результате
1.Был произведен маркетинг и сравнение существующих систем и решений
В силу ряда причин готовое решение найти неудалось и было принято решение создавать свое
2.Была выбрана распределенная технология измерения(в силу конструктивных особеностей контролируемого обьекта)
3.Было проведено сравнение полевых шин и сделан выбор(CAN по соотношению цена качество оказался на коне)
4.Было проведено сравнение протоколов и по характеристикам и количеству/качеству существующего готового(само собой платного софта) а также ареалу рапространения был выбран CANOpen
5.Был проведен анализ функциональности(по пригодности для наших задач) готовых библиотек и их стоимость а также сроков выделенных на реализацию проекта после чего было принято решение писать протокол самостоятельно.
6.Была закуплена документация(спецификации CIA),интерфейсные платы для верхнего уровня и фирменная прога(Ixxat CANOpen Studio) для первоначально проверки реализации своего протокола.

Для чего все это и столько заморочек.А для того чтобы система была модульной и позволяла использовать приборы нашего изготовления совместно с покупными потомучто был выбран стандартный и очень рапространенный протокол.
Решение оказалось правильным и в данное время система находится в серийном производстве.
Go to the top of the page
 
+Quote Post
dormouse
сообщение Apr 5 2006, 07:51
Сообщение #24


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Тогда можно попросить указать цены на вами закупленное решение:
1. Цена на плату, на библиотеку, на документацию (примерно до +- 50$). Сайт datamicro оказался очень сложен в использовании :-)

В нашем случае вроде нет необходимости делать стыковку с приборами не своего изготовления, поскольку они "по сути" не применимы в данном случае. Скорее всего это будет сделано при переходе на "следующий" виток развития, если вообще будет сделано. На данном этапе скорее всего будет доделана работа с CAN на основе At90CAN128 (примерно шесть экземпляров на одну систему), сбор данных температуры и прочего осуществляется по Dallas 1-wire, а самый дешёвый датчик с CANOpen стоил почти 800euro, что пока излишне ;-)
В качестве USB-PC будет устройство от slavna.ru - они предоставляют "каркас" программы на VC, так что можно очень быстро начать его использовать, поскольку код на C портируется с MCU без изменений, только интерфейсная часть будет другой.
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 5 2006, 08:03
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Плата IXXAT USBtoCAN(2 канала с опторазвязкой) ~250 евро
Плата IXXAT USBtoCAN compact (1 канал с опторазвязкой) ~200 евро
Плата Adlink 7841 (два канал с опторазвякой) ~150 евро
CANOpen Configuration Studio ~1000 баксов(точно непомню)
СANOpen CIA Standart 200 евро + годовая подписка

Столько плат было нужно для разных целей,USB для использования с командировочными ноутбуками(и фирменным софтом) а PCI для рабочих станций на которых ведется калибровка и настройка приборов.

Средняя стоимость прибора(1-2ух канальных) получилась 200 баксов.
При выпуске около 2000 штук.
Go to the top of the page
 
+Quote Post
dormouse
сообщение Apr 5 2006, 08:16
Сообщение #26


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Цена действительно оказалась более чем приемлемой. Я полагал примерно 2x-4x диапазон. При этом раскладе это <$1500 для начала работы, что приемлимо даже для личной разработки.

Осталось разобраться в следующем: физически CANOpen - это только data frame, которые ходят по шине. Никакая конкретика непосредственной физической реализации аппаратного уровня его не интересуют. Из этого можно сделать вывод, что и код на C должен быть одинаковым как для PC карты, так и для MCU. У них же (если я правильно понимаю) предлагается отдельно "стандарт" и отдельно "он же реализованный под Win32 с закрытым кодом", отдельно "софт мониторирования пакетов и проверки соответствия работы устройства стандарту", ну и платы, разумееется.

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

Нешёл очень интересный сайт с большим чилом БЕСПЛАТНОГО софта (ограниченного на 125к/бит и временем работы), называется port.de. http://www.port.de/engl/canprod/content/software.html
Пока не ясно, но возможно, что предлагают недорогую кросс-платформенную реализацию на С.

Сообщение отредактировал dormouse - Apr 5 2006, 08:37
Go to the top of the page
 
+Quote Post
ipc
сообщение Apr 5 2006, 08:55
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793



Цитата(dormouse @ Apr 5 2006, 12:16) *
Цена действительно оказалась более чем приемлемой. Я полагал примерно 2x-4x диапазон. При этом раскладе это <$1500 для начала работы, что приемлимо даже для личной разработки.

Осталось разобраться в следующем: физически CANOpen - это только data frame, которые ходят по шине. Никакая конкретика непосредственной физической реализации аппаратного уровня его не интересуют. Из этого можно сделать вывод, что и код на C должен быть одинаковым как для PC карты, так и для MCU. У них же (если я правильно понимаю) предлагается отдельно "стандарт" и отдельно "он же реализованный под Win32 с закрытым кодом", отдельно "софт мониторирования пакетов и проверки соответствия работы устройства стандарту", ну и платы, разумееется.

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


Да для CANOpen вобщем по барабану на физическую линию это всего лишь формат пакетов,структура и диапазон идентификаторов и временные параметры(таймауты) передачи.
Но есть небольшой нюанс.Обычно в приборах реализуют CANOpen Slave а на PC CANOpenSlave+CANOpenMaster.Мастер как таковой очень громоздок и реализовать его в полном обьеме внутри микроконтроллера из среднего ценового дивапазона проблематично.То же касается готовых библиотек и патентованых кроссплатформенных исходников.Сами продавцы пишут что только CANOpen практически на любой платформе займет не менее 64K(это плата за универсальность).В моем случае узкоспециализированный и конкретно заточеный CANOpen(с приличной функциональностью) около 10Кслов(вместе со словарем).
Вобще CANOpen неоднородная вещь.Это набор подпротоколов(те вариантов обмена) которые используются для разных целей.Например.
SDO-протокол для конфигурационного обмена
PDO-протокол для обмена данными
NMT-протокол для управлению сетью и состоянием узлов
LSS и LMT -протоколы для раздачи идентификаторов(NID Node ID) и смены скорости сети.
Необязательно реализовывать все,но часть полюбому нужно будет сделать.Фирменные библиотеки содержат все и потому такие громоздкие.

Что действительно ненравица так это алчность рапростаранителей стандартов,библиотек и ПО для настройки и проверки,они все как сговорились,цена на исходники доходит до 10 килотугриков.
Кстати я где то видел аппаратное(кстати недорогое) решение CANOpen в микросхеме(можно порыть в интеренте).

Вот кароче бесплатная дока по CANOpen кому интересно можете почитать

Что касается ресурсов.
Фирма Port предлагает много но вот купить это у нас проблематично.
Лучше смотреть на http://www.vector-cantech.com/ и www.ixxat.com
Прикрепленные файлы
Прикрепленный файл  DS301.pdf ( 497.09 килобайт ) Кол-во скачиваний: 161
 
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Apr 5 2006, 14:48
Сообщение #28


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

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



Цитата(KRS @ Apr 4 2006, 18:28) *
Цитата(ruslannd @ Apr 4 2006, 15:43) *

Цитата(KRS @ Feb 17 2006, 18:42) *

При начале работы я использовал CAN примерно так:

Код
  //входим в ресет моду
  CANGCON=0;
  while(CANGSTA & (1<<ENFG))  {};


Не понимаю смысл этого куска. ENFG никогда не будет 1, если в CANGCON записать 0. Или я ошибаюсь?


если кан находится в рабочем режиме ENFG=1
когда записываем 0 в CANGCON дается команда войти в ресет моде
пока кан входит в ресет моде ENFG будет 1 надо ждать пока не станет 0


Сорри. Облажался. С CAN контроллером разобрался. Все работает, только у Atmel'a даташит не достаточно детальный.
Go to the top of the page
 
+Quote Post
dormouse
сообщение Apr 12 2006, 18:24
Сообщение #29


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



Atmel сделала шаг вперёд к gcc и CAN. Конкретно: только что выложили новую версию библиотеки для At90CANxxx для gcc! Качаем, разбираемся.
Похоже, что внутри уже имеются примеры работчего "скелета" программ hello world для работы с шиной.


http://www.atmel.com/dyn/products/product_...sp?part_id=3780
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2006, 19:07
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dormouse @ Apr 5 2006, 00:00) *
PS Отдельное спасибо НПП Славна (http://www.slavna.ru). Успешно получено купленное у них USB->CAN устройство. Пока не испытано.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Седой
сообщение 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 Текстовая версия Сейчас: 23rd July 2025 - 19:19
Рейтинг@Mail.ru


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