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

 
 
> Посоветуйте пожалуйста, ввязываться ли, ... в новую технологию и схемотехнику
Kitsok
сообщение Feb 4 2010, 08:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Добрый день!

Имеется задача: обеспечить интерфейс между ПО на компьютере и большим количеством дискретных вводов и выводов(около 300 вводов и примерно столько-же выводов), некоторого количества 7-сегментных индикаторов (12 штук по 5 разрядов), небольшим (8) - аналоговых входов, и десятка ШИМов (управление электромоторами).

Требования по таймингу - от нажатия на кнопку до срабатывания функции ПО на компьютере - макс. 100 мс, в обратную сторону - то-же.

Вокруг бродят магнитные поля от мощных сервоприводов.
Напряжение питания всей сети ввода-вывода - желательно одно, желательно - 12 вольт.

Из элементной базы - мне близки AVRы и ARM7 от Atmel, из языка - С, с ассемблером не дружу лет 10, крайний раз писал на нём под х51.
Дискретный ввод-вывод планировал делать цепочками сдвиговых регистров, ШИМ - ШИМом контроллера, аналоговый ввод - АЦП AVRов.

Особых требований по стоимости решения нет, поэтому я как буриданов осёл мечусь между IP, RS-232 over IP, RS-485 и вот наткнулся на CAN, а точнее - на чип MCP25050, и стало мне хорошо-хорошо wink.gif

Вопрос такой: где стоит начать читать про CAN, и стоит ли вообще ввязываться в новую тему (как я понимаю, оптимально будет и контроллер использовать микрочиповский, что для меня - вновье).

Заранее благодарен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kitsok
сообщение Feb 16 2010, 06:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Чисто полтергейст.
Функция отсылки фрейма, низкоуровневая:
Код
BOOL can_tx( char mob,  CAN_packet *packet)
{
        unsigned short cnt;

        cli();//portENTER_CRITICAL();
        /* Select page (MOB 1) */
        CANPAGE = 1 << 4;
        /* Setup DLC and IDE */
        CANCDMOB = (packet->length) | (1<<IDE);
        /* Setup ID */
        CANIDT1=0;
        CANIDT2=packet->id >>13;
        CANIDT3=packet->id >>5;
        CANIDT4=packet->id <<3;
        /* Load data to FIFO, byte index is autoincremented */
        for (cnt=0; cnt<8; ++cnt)
         CANMSG = packet->data[cnt];

        /* Debug counter */
        cnt=0;
        /* Start transmittion */
        CANCDMOB|=(1<<CONMOB0); //enable TX FIXME!!!
        /* Wait until TXOK is raised */
        while (!(CANSTMOB & (1<<TXOK))) {cnt++;}
        /* Reset TXOK by  read-modify-write */
        CANSTMOB &= ~(1<<TXOK);                              
        /* Reset (disable) MOB */
        CANCDMOB = 0x00;
        /* Finita */
        sei();
        return (TRUE);
}


Единственное место, где вызывается can_tx:
Код
/* Task for CAN transmittion */
void can_tx_task(void *x)
{
(void)x;

static unsigned portCHAR mob;
static CAN_packet packet;
static unsigned portCHAR cnt;
static portCHAR retv=FALSE;

/* Create Tx queue */
CANTxQueue = xQueueCreate( 16, sizeof( CAN_packet));
ASSERT(CANTxQueue != 0);

/* Find free MOB, die if no free channel found */
/* FIXME!!! MOB #0 used by Dump queue */
cli();
for( mob=1; mob < NO_MOBS; ++mob)
  {
   if( channels[mob]==0)
                        break;
  }

ASSERT(mob != NO_MOBS);
channels[mob]=(CAN_cbf)0xffff;
sei();

/* Main loop */
while(1)
  {
   /* Receive packet to send */
   xQueueReceive( CANTxQueue, &packet, portMAX_DELAY);
   cnt=50;
   retv=TRUE;
   while( cnt--)
    {
     retv=can_tx( mob, &packet);
     if( retv==TRUE) // transmission succsessful
      {
       break;
      }
         vTaskDelay(1);
        }
  }
}


Многозадачность - кооперативная, не вытесняющая.
Если в дебаггере, с остановкой на sei() can_tx - все отлично, пакеты улетают друг за другом, все работает как задумано.
Без дебаггера - 2-байтовый пакет "затирает" длинный. Но не всегда Когда счетчик в первом байте длинного пакета (не ID, а payload) достигает 0x2a, все начинает работать как задумано wink.gif Эффект постоянный.

Что это???
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kitsok   Посоветуйте пожалуйста, ввязываться ли   Feb 4 2010, 08:02
- - firstvald   Смотрите. Чем меньше технологий вы используете, те...   Feb 4 2010, 08:24
- - Kitsok   Спасибо за ответ. Про RS-232. Самый быстрый (и с...   Feb 4 2010, 09:05
|- - galjoen   Цитата(Kitsok @ Feb 4 2010, 12:05) Также ...   Feb 4 2010, 10:00
- - firstvald   С can не помогу - не знаю. RS232 и 485 по помехоза...   Feb 4 2010, 09:15
|- - Victor®   Цитата(firstvald @ Feb 4 2010, 12:15) RS2...   Feb 4 2010, 09:36
|- - rezident   Цитата(firstvald @ Feb 4 2010, 14:15) RS2...   Feb 4 2010, 10:05
- - galjoen   Цитата(Kitsok @ Feb 4 2010, 11:02) Добрый...   Feb 4 2010, 09:32
- - mrlee   Преимущество КЭН многие вещи делаются аппаратно. ...   Feb 4 2010, 09:39
- - syoma   Если стоимость не имеет значения а изделие штучное...   Feb 4 2010, 09:53
- - Kitsok   Спасибо за отклик Насчет multidrop RS-232 - я с...   Feb 4 2010, 10:21
- - syoma   ЦитатаА можно ли (предусмотрено ли стандартом) ...   Feb 5 2010, 08:00
- - firstvald   бухта в 1000 метров с резюками на концах. И гоняем...   Feb 5 2010, 08:23
|- - Kitsok   Добрый день! Последние дни читал и даташит на...   Feb 7 2010, 10:33
|- - galjoen   Цитата(Kitsok @ Feb 7 2010, 13:33) они вы...   Feb 7 2010, 11:37
||- - AlexandrY   Цитата(galjoen @ Feb 7 2010, 13:37) Усы 3...   Feb 7 2010, 11:46
||- - Kitsok   Стандарт лезу читать. Про ошибки опять. Правильн...   Feb 7 2010, 20:45
|- - cant   Цитата(Kitsok @ Feb 7 2010, 14:33) Читаю ...   Feb 15 2010, 09:26
- - AlexandrY   CAN самая надежная, дешевая и простая технология. ...   Feb 7 2010, 11:30
- - Kitsok   Добрый день! Ввязался Сейчас имеет место б...   Feb 13 2010, 16:23
|- - Kitsok   Всем привет опять! Бьюсь, обессилил. Со сто...   Feb 14 2010, 22:35
- - syoma   ЦитатаПро ошибки опять. Правильно ли я понимаю, чт...   Feb 15 2010, 08:45
- - Kitsok   Цитата(syoma @ Feb 15 2010, 11:45) Не зна...   Feb 15 2010, 11:37
- - Kitsok   Отвечу себе сам. Это - криво написанная функция ...   Feb 17 2010, 18:35


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

 


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


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