Перейти к содержанию

Работа с CAN шиной на PIC через SPI


Zombie47

Рекомендуемые сообщения

Наверно мне бы стоило в вопросах для начинающих задать этот вопрос, но с другой стороны у меня уже это все давно работает, хоть я не знаю как)))
Среда MicroC Pro
У меня МК PIC16F1847 с кварцем 20Mhz, к нему подключен по SPI MCP2510 с кварцем 8Mhz а к нему MCP2551
Вот у меня в коде что то вроде стандартной конфигурации CAN SPI

void CANinit(void){
 Can_Init_Flags = 0;
  Can_Send_Flags = 0;                                         // clear flags
  Can_Rcv_Flags  = 0;                                         //
  Can_Send_Flags = _CANSPI_TX_PRIORITY_0 &                    // form value to be used
                   _CANSPI_TX_STD_FRAME &                     //     with CANSPIWrite
                   _CANSPI_TX_NO_RTR_FRAME;
  Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE &             // Form value to be used
                   _CANSPI_CONFIG_PHSEG2_PRG_ON &             //  with CANSPIInit
                   _CANSPI_CONFIG_STD_MSG &
                   _CANSPI_CONFIG_DBL_BUFFER_ON &
                   _CANSPI_CONFIG_VALID_STD_MSG;
  //SPI1_Init();                                                     // initialize SPI1 module
  CANSPIInitialize(1,1,3,3,1,Can_Init_Flags);                      // Initialize external CANSPI module
  CANSPISetOperationMode(_CANSPI_MODE_CONFIG,0xFF);                // set CONFIGURATION mode
  CANSPISetMask(_CANSPI_MASK_B1,-1,_CANSPI_CONFIG_STD_MSG);        // set all mask1 bits to ones
  CANSPISetMask(_CANSPI_MASK_B2,-1,_CANSPI_CONFIG_STD_MSG);        // set all mask2 bits to ones
  CANSPISetFilter(_CANSPI_FILTER_B2_F3,ID_1st,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B2_F4,ID_2nd,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B1_F2,ID_3rd,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B2_F1,ID_4th,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò

  CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF);
}

Не очень уже помню как и где это настраивается, но скорость работы у меня 500 000 байт в секунду вроде, ну или какие там единицы.
Не хочу перегружать вопрос кучей кода поэтому буду вырезать главное чтобы было читабельно.
В основном юзаю отправку например вот:
 

  zaderzka=180; //величина задержки 9765 это 1 сек. 190 задержка это 0.019сек
  zaderzka_flag=1; 
if (i>zaderzka) {
 CANSPIWrite(ID_512, RxTx_Data512, 8, Can_Send_Flags);
 RxTx_Data512[5]++;//счетчик от 00 до FF
}

Вопросы и проблемы:
1. я формирую задержку таймером, который запускаю флагом в коде, и я эту задержку использую для отправки в SPI шину, там проходит время по посылке в SPI и тд, поэтому тайминг отправки CAN не точный и плавает. А мне надо чтобы непосредственно MCP2510 слал мой пакет в шину с определенным таймингом как это сделать?
2. в шине есть еще устройства, они тоже шлют в шину пакеты со своим таймингом. Вообщем иногда я вижу очень редко пакеты встречаются, но контроллер MCP2510 вроде как рулит чтобы не было нахлеста. По идее хорошо бы чтобы каждое устройство попадало в свой тайминг, но я не могу выдержать отправку раз в 20мсек. у меня плавает туда сюда то 25 то 22 то 26 и тд, и поэтому встречаются места там где пересекаются пакеты и как я вижу по счетчикам, один пакет у меня просто теряется, а другой пакет который я шлю почему то шлется два три раза подряд, именно MCP2510 так как счетчик без изменений то-есть программа не сделала цикла.
3. Как вообще настраивается прием сообщений? как я понял настройкой фильтров типо этого:  CANSPISetFilter(_CANSPI_FILTER_B2_F1,ID_4th,_CANSPI_CONFIG_STD_MSG);
Тоесть я правильно понимаю что всего там ограниченное количество фильтров которое я могу использовать на прием?

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Нормально так, сейчас поиском искал опять инфу как с PIC работать с кан шиной и поиском вышел на это свое двухлетнее сообщение, на которое никто не ответил )))

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • и что не так? при входном токе 10 ма,и питании 3,3в выходной ток будет в районе 12ма.
    • Так случилось, что ничего кроме новых КТ840Б нет, а покупать на такую ерунду не охота. Нужно соединить параллельно 5 транзисторов *2, чтобы создать пуш-пул ферритовый преобразователь для питания магнетрона от микроволновой печи. Я уже намотал пластиковым проводом (они держат большее напряжение, чем эмальпровод) 267 витков вторичная обмотка (Одесакабель со снятой вторичной (белой) изоляцией 0.75) и 3*2 витка первичная (150 жил провода 0.1 мм), и уже испытал, что этот трансформатор держит 3 см дугу (около 30 киловольт) без пробоя (а сама изоляция держит около 50 кВ постоянного, тестировал умножителем УН9-27 со строчником ТВС110), дополнительно будет погружен в масло для охлаждения и изоляции, намотан на ферритовых полукольцах отклоняющей системы кинескопа М2000НМ, а габаритную мощность калькулятор показал 4кВт на частоте 35кГц (которая на Вашем форуме описана как оптимальная для "меандра" именно на М2000НМ). Возможно эти данные помогут определить, нужно уменьшать или увеличивать количество транзисторов КТ840 и повлияют на схему соединения. Программа расчета показала что нужно 1100 жил 0.1 мм но я намотал только 150 - больше не помещается и работать он будет в импульсном режиме (включатся на десяток секунд). Мощность 700 Вт, питание 12В, ток первичной обмотки 70А. Возможно придется добавлять еще транзистор КТ840 к каждой сборке, чтобы открывать такое большое количество транзисторов. Всего КТ840 есть 50 штук. По расчету преобразователь должен давать напряжение 1000-1400В, а остальное надо сделать умножителем, и я не нашел высоковольтных быстрых диодов на 35кГц ни в одном из местных киевских магазинов (возможно придется заказывать в интернете).  Множить хочу до максимального возможного (хоть 100кВ), которое выдержит магнетрон, потому что чем больше напряжение, тем больше мощность. Хочу купить фольгу и пленку, пропитать и погрузить в масло, скрутить в рулон, сделать высоковольтный конденсатор, типо этот преобразователь (допустим он даст 30кВ после умножения) заряжает этот конденсатор, а потом он разряжается на магнетрон.
    • Похоже так. При этом оптопара - далеко не микроскоп, а вполне себе ширпотреб, копеечный.  У ходовой оптопары PC817 типовое время закрытия - 3 мкс, максимальное - 18 мкс. Надо пробовать, возможно вам хватит. Быстрее будет 6N136, но у неё включение сложнее.
    • Вот и я о том же... 3,3 питание и нагрузка килоом... ее минимум раза в три надо уменьшать , если не во все десять... Вы бы хоть ДШ на ПыСы  открыли что ли...
    • там 3,3в питание или вы издеваетесь?
    • А че нагрузка всего 1кОм? поставил бы 10 или 100кОм  
×
×
  • Создать...