Easyelectronics.ru

Электроника для всех
Текущее время: 13 авг 2020, 07:42

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 20 дек 2019, 23:52 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
Скачал библиотеку для работы c CAN шиной. на 100kb работает без проблем а на 10kb работать не хочет, в инициализации частоту делил на 10 эффекта нет
Код:
int CAN_init() {

   // Time quantum
   double __tq;

   // enable module
   DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
   DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);

   // configure TX pin
   gpio_set_level(CAN_cfg.tx_pin_id, 1);
   gpio_set_direction(CAN_cfg.tx_pin_id, GPIO_MODE_OUTPUT);
   gpio_matrix_out(CAN_cfg.tx_pin_id, CAN_TX_IDX, 0, 0);
   gpio_pad_select_gpio(CAN_cfg.tx_pin_id);

   // configure RX pin
   gpio_set_direction(CAN_cfg.rx_pin_id, GPIO_MODE_INPUT);
   gpio_matrix_in(CAN_cfg.rx_pin_id, CAN_RX_IDX, 0);
   gpio_pad_select_gpio(CAN_cfg.rx_pin_id);

   // set to PELICAN mode
   MODULE_CAN->CDR.B.CAN_M = 0x1;

   // synchronization jump width is the same for all baud rates
   MODULE_CAN->BTR0.B.SJW = 0x1;

   // TSEG2 is the same for all baud rates
   MODULE_CAN->BTR1.B.TSEG2 = 0x1;

   // select time quantum and set TSEG1
   switch (CAN_cfg.speed) {
   case CAN_SPEED_1000KBPS:
      MODULE_CAN->BTR1.B.TSEG1 = 0x4;
      __tq = 0.125;
      break;

   case CAN_SPEED_800KBPS:
      MODULE_CAN->BTR1.B.TSEG1 = 0x6;
      __tq = 0.125;
      break;

   case CAN_SPEED_200KBPS:
      MODULE_CAN->BTR1.B.TSEG1 = 0xc;
      MODULE_CAN->BTR1.B.TSEG2 = 0x5;
      __tq = 0.25;
      break;

   default:
      MODULE_CAN->BTR1.B.TSEG1 = 0xc;
      __tq = ((float) 1000 / CAN_cfg.speed) / 16;
   }

   // set baud rate prescaler
   MODULE_CAN->BTR0.B.BRP = (uint8_t) round((((APB_CLK_FREQ * __tq) / 2) - 1) / 1000000) - 1;

   /* Set sampling
    * 1 -> triple; the bus is sampled three times; recommended for low/medium speed buses     (class A and B) where
    * filtering spikes on the bus line is beneficial 0 -> single; the bus is sampled once; recommended for high speed
    * buses (SAE class C)*/
   MODULE_CAN->BTR1.B.SAM = 0x1;

   // enable all interrupts
   MODULE_CAN->IER.U = 0xff;

    // Set acceptance filter   
   MODULE_CAN->MOD.B.AFM = __filter.FM;   
    MODULE_CAN->MBX_CTRL.ACC.CODE[0] = __filter.ACR0;
    MODULE_CAN->MBX_CTRL.ACC.CODE[1] = __filter.ACR1;
    MODULE_CAN->MBX_CTRL.ACC.CODE[2] = __filter.ACR2;
    MODULE_CAN->MBX_CTRL.ACC.CODE[3] = __filter.ACR3;
    MODULE_CAN->MBX_CTRL.ACC.MASK[0] = __filter.AMR0;
    MODULE_CAN->MBX_CTRL.ACC.MASK[1] = __filter.AMR1;
    MODULE_CAN->MBX_CTRL.ACC.MASK[2] = __filter.AMR2;
    MODULE_CAN->MBX_CTRL.ACC.MASK[3] = __filter.AMR3;

   // set to normal mode
   MODULE_CAN->OCR.B.OCMODE = __CAN_OC_NOM;

   // clear error counters
   MODULE_CAN->TXERR.U = 0;
   MODULE_CAN->RXERR.U = 0;
   (void) MODULE_CAN->ECC;

   // clear interrupt flags
   (void) MODULE_CAN->IR.U;

   // install CAN ISR
   esp_intr_alloc(ETS_CAN_INTR_SOURCE, 0, CAN_isr, NULL, NULL);

   // allocate the tx complete semaphore
   sem_tx_complete = xSemaphoreCreateBinary();

   // Showtime. Release Reset Mode.
   MODULE_CAN->MOD.B.RM = 0;

   return 0;
}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 11:23 
Старожил
Аватара пользователя

Зарегистрирован: 20 апр 2010, 17:59
Сообщения: 1183
Откуда: Челябинск
А спецификации ESP32 какую минимальную скорость обещают?
Есть вероятность, что и MCP2551 на 10кб/с не будет работать.

_________________
Everybody lies


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 12:19 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
Stm32f103 и Mcp2551 работают замечательно на 10kb


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 14:10 
Старожил
Аватара пользователя

Зарегистрирован: 20 апр 2010, 17:59
Сообщения: 1183
Откуда: Челябинск
А ESP32?

_________________
Everybody lies


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 17:05 
Только пришел

Зарегистрирован: 10 фев 2015, 10:43
Сообщения: 10
Не настроите. Делитель получается больше 2^8. А регистр 8-битный...


Последний раз редактировалось Z_A 21 дек 2019, 17:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 19:50 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
что-то в reference manual про CAN ничего не сказано. Проц больше 200МГц а регистры 8бит. фигня какая то


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 20:00 
Только пришел

Зарегистрирован: 10 фев 2015, 10:43
Сообщения: 10
kingoff писал(а):
что-то в reference manual про CAN ничего не сказано. Проц больше 200МГц а регистры 8бит. фигня какая то

Ага. Сам хотел полтора года назад беспроводной шлюз сделать, надо было 16 кбит скорость. А фигвам.
Делал по примерам, когда не взлетело, стал ковырять, нарыл короткий регистр. Его хватает на 40 с чем-то килобит. Меньше нельзя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 21:26 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
а случайно не шлюз MQTT-CAN?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 21 дек 2019, 23:21 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
ну по мануалу минимальная частота 80МГц / 256 / 25 (TSEG1=16 + TSEG2=8 + 1sync) = 12500.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 22 дек 2019, 00:46 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
А как тогда настроить делитель? Почему то ниже 50kb ничего не работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 22 дек 2019, 09:42 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
Регистры TSEG1 и TSEG2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 22 дек 2019, 11:56 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
MODULE_CAN->BTR1.B.TSEG1 = 15; это максимум если 16 то компилятор ругается
MODULE_CAN->BTR1.B.TSEG2 = 7;это максимум если 7 то компилятор ругается
MODULE_CAN->BTR0.B.BRP = тут что должно быть ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 22 дек 2019, 12:20 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
kingoff писал(а):
MODULE_CAN->BTR1.B.TSEG1 = 15; это максимум если 16 то компилятор ругается
MODULE_CAN->BTR1.B.TSEG2 = 7;это максимум если 7 то компилятор ругается
MODULE_CAN->BTR0.B.BRP = тут что должно быть ?

С помощью дедуктивного метода предположу что 255, ведь на 256 компилятор заругается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 22 дек 2019, 20:03 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
дедуктивный метод для ардуино не работает. не дает записать больше 63 выдает компилятор ошибку
warning: large integer implicitly truncated to unsigned type [-Woverflow]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 23 дек 2019, 13:23 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
Ну хз, документации человеческой нет, видел описание что делитель от 1 до 256 с шагом 4, возможно под этим этот 6ти битный регистр и подразумевался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ESP 32 настроить передачу CAN на 10kb
СообщениеДобавлено: 23 дек 2019, 21:56 
Заглядывает иногда

Зарегистрирован: 16 дек 2012, 22:17
Сообщения: 64
такой процессор, а нужен для мигания светодиодом


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB