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

 
 
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

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

 


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


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