Очередной "Умный дом", на этот раз модульная система...

MaksVV
Offline
Зарегистрирован: 06.08.2015

в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10

Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с

ЗЫ. Не знаю почему у тебя 12 не заработала. 

Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

что в 12 не работает?

Постоянно FAIL по всем узлам. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10

Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с

ЗЫ. Не знаю почему у тебя 12 не заработала. 

Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК. 

Ок.

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:
Постоянно FAIL по всем узлам.

когда такое происходит нужно поставить флаг распечатки статусов в настройке отладки. И смотреть приходят ли статусы. Может скорость шины на разных МК разная у тебя была. Тут нужно внимательней. И да, канхакер конечно при этом помогает. 

riv
Offline
Зарегистрирован: 20.07.2017

По поводу ничего не менять

1. Если не менять const bool NodeCANpresence[NODS_NUMBER] то опрашивается только 1 узел

2. если не убрать 

    //SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
    //digitalWrite(csPIN, LOW);
    //SPI.transfer(0xC0);
    //digitalWrite(csPIN, HIGH);
    //SPI.endTransaction();
    //delay (100);

то отсутствует вывод в консоль на мастере

riv
Offline
Зарегистрирован: 20.07.2017

И если не очень сложно допавь как я просил ранее

//v13
#define version 13
 
В главный файл 
 
Serial.println (F("  MASTER!"));
Serial.print(F("  Version"));Serial.println (F(version));
 
в void MCP2515_Init () 
 
В будующих версиях естественно, я сейчас сам добавил.
Я без этого не могу проконтролировать правильно ли прошилось все
Я же HEX заливаю и только консоль показывает результат
MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

По поводу ничего не менять

1. Если не менять const bool NodeCANpresence[NODS_NUMBER] то опрашивается только 1 узел

2. если не убрать 

    //SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
    //digitalWrite(csPIN, LOW);
    //SPI.transfer(0xC0);
    //digitalWrite(csPIN, HIGH);
    //SPI.endTransaction();
    //delay (100);

то отсутствует вывод в консоль на мастере

1.

MaksVV пишет:
ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК.

2. Это всё твоя DUE, на МЕГЕ всё нормально должно быть. И это лучше не убирать, поэтому и переинит не работает у тебя скорее всего. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

И если не очень сложно допавь как я просил ранее

Serial.println (F("  MASTER!"));

это и так уже есть 

Serial.println(); Serial.print(F("Мой адрес в сети CAN:  ")); Print (node_address, ADDR); 
#ifdef type_node_master
Serial.println (F("  MASTER!"));
#endif

остальное добавлю. 

riv
Offline
Зарегистрирован: 20.07.2017

Вот включил я лог.

На слейве не выводит время На нем постоянно (тут понял нужн 1 в дебаге поставить как ждя МК)

NO ErrorFlags
TX Errors = 0     RX Errors = 0
NO ErrorFlags
TX Errors = 0     RX Errors = 0
NO ErrorFlags
TX Errors = 0     RX Errors = 0
 
На 6
00:00:10:45                     Принято  из  CAN:  СТАТУС  От Кого:  node_4_Net_center_Due1         - ID 96040000    86 2E 0A 00 00 00 00 00 
 
              Отправлено в CAN:  Ошибка отправки CAN сообщения !!!
NO ErrorFlags
TX Errors = 0     RX Errors = 0
 
на 21
 
 
              Отправлено в CAN:  Ошибка отправки CAN сообщения !!!
 
              Отправлено в CAN:  Ошибка отправки CAN сообщения !!!
 

Причем на мастере состояние ОК

Как так ни одного правильного пакета а состояние ОК, фигня какая то.

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

riv пишет:

И если не очень сложно допавь как я просил ранее

Serial.println (F("  MASTER!"));

это и так уже есть 

Serial.println(); Serial.print(F("Мой адрес в сети CAN:  ")); Print (node_address, ADDR); 
#ifdef type_node_master
Serial.println (F("  MASTER!"));
#endif

остальное добавлю. 

Я таким образом место вставки показал ;-)

MaksVV
Offline
Зарегистрирован: 06.08.2015

потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит  типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100

MaksVV
Offline
Зарегистрирован: 06.08.2015

с других либ, нормально всё пишет на любой скорости. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит  типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100

Ну так сказхал бы

Сомотри лог https://yadi.sk/d/ozOcbX7B3V5hYy  папка лог

1. Куча неотправок

2. Фильтры не работают

3. переполнение буферов 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Вот включил я лог.

На слейве не выводит время На нем постоянно (тут понял нужн 1 в дебаге поставить как ждя МК)

NO ErrorFlags
TX Errors = 0     RX Errors = 0
NO ErrorFlags
TX Errors = 0     RX Errors = 0
NO ErrorFlags
TX Errors = 0     RX Errors = 0
 
 
во вкладке RX_TX в самом низу строку вот на эту поменяй (скобки забыл поставить)
else {Serial.println(F("Ошибка отправки CAN сообщения !!!")); readErrorFlags_MCP2515 ();}}

 

 

riv
Offline
Зарегистрирован: 20.07.2017

В логе сумашедший дом! все узлы себя ведут хаотичнои непредсказуемо. Логи разные. Это результат спагетти кода.

В общем я согласен с Andy пора структурировать код. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

я пока наоборот смотрю норм всё в логах, на узлах по крайней мере мусор не ловится. На мастере только фигня летит всякая, ты DUE заменил на мегу?

riv
Offline
Зарегистрирован: 20.07.2017

Как же не хлам, почему узлы принимают запросы не себе???

MaksVV
Offline
Зарегистрирован: 06.08.2015

дошёл до 8 узла, да вот он фигню порет. Почему то к нему все фреймы попадают

riv
Offline
Зарегистрирован: 20.07.2017

У меня заккралось впечатление что все мои беды это TIMEOUTVALUE 50 в mcp_can_defs.h, поставил 100, ушли неотправки и ошибки 7.

Походу ты давно на 100 сидишь и ошибка не прилетаела.

MaksVV
Offline
Зарегистрирован: 06.08.2015

да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Походу ты давно на 100 сидишь и ошибка не прилетаела.

да тоже только что исправил, когда тебе скорость 125 поставил, думаю дай проверю, а тут такая фигня. 250 он ещё норм отправлял, а всё что ниже, возвращал семёрку, но сообщения норм доставлялись. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:

да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил. 

нужно убрать флаг ошибок MCP, может из-за этого 

riv
Offline
Зарегистрирован: 20.07.2017
8
10
11
12
19
20
 
Принимают чужое
 
21 не показывает прием но на что то отвечает
MaksVV
Offline
Зарегистрирован: 06.08.2015

да я уже посмотрел. 8 10 11 12 19 20 . Почему то фильтры не срабатывают. Щас у себя залил эти адреса - всё нормально. Мистика да и только . У тебя там аура что ли плохая)) 

MaksVV
Offline
Зарегистрирован: 06.08.2015

убирай флаги ошибок MCP, в узлы заливай прошиву по новой до тех пор пока фильтр не заработает.

  if(can.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) can_ok = 1;
  can.init_Mask(0,1,0x1000FF00);                       // Init first mask...
  can.init_Filt(0,1,((node_address & 0xFFFFFFFF)<<8)|0x10000000);   // Init first filter...
  can.init_Filt(1,1,0x10000000);                       // Init second filter...
  can.init_Mask(1,1,0x1000FF00);                       // Init second mask...   
  can.init_Filt(2,1,0x10000000);                       // Init 3 filter...
  can.init_Filt(3,1,0x10000000);                       // Init 4 filter...
  can.init_Filt(4,1,0x10000000);                       // Init 5 filter...
  can.init_Filt(5,1,0x10000000);                       // Init 6 filter...

 Может строку 3  заменить на 

can.init_Filt(0,1, 0x1000XX00);   // Init first filter...

где , ХХ - адрес узла

MaksVV
Offline
Зарегистрирован: 06.08.2015

и функцию инита сделай так. Я перенёс раньше Serial.begin . Теперь настройку фильтрации будет выводить в монитор при старте

void MCP2515_Init () {
#ifdef debug
if (!Setup) {Serial.begin(115200);
Serial.println(); Serial.print(F("Version 13.1   ")); Print (node_address, ADDR); Serial.println(); Serial.println();}
#endif
    
    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
    digitalWrite(csPIN, LOW);
    SPI.transfer(0xC0);
    digitalWrite(csPIN, HIGH);
    SPI.endTransaction();
    delay (100);
  bool can_ok = 0;
  if(can.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) can_ok = 1;
  can.init_Mask(0,1,0x1000FF00);                       // Init first mask...
  can.init_Filt(0,1,((node_address & 0xFFFFFFFF)<<8)|0x10000000);   // Init first filter...
  can.init_Filt(1,1,0x10000000);                       // Init second filter...
  can.init_Mask(1,1,0x1000FF00);                       // Init second mask...   
  can.init_Filt(2,1,0x10000000);                       // Init 3 filter...
  can.init_Filt(3,1,0x10000000);                       // Init 4 filter...
  can.init_Filt(4,1,0x10000000);                       // Init 5 filter...
  can.init_Filt(5,1,0x10000000);                       // Init 6 filter...
#ifdef debug

      if (can_ok) Serial.println(F("MCP2515 Initialized Successfully!"));
    else
                  Serial.println(F("Error Initializing MCP2515..."));

Serial.println(); Serial.print(F("РЕСТАРТ  ")); Print (node_address, ADDR); 
#ifdef type_node_master
Serial.println (F("  MASTER!"));
#endif
Serial.println();
if (!Setup) timeoutsConfigControl ();
#endif 
 can.setMode(MCP_NORMAL);    
    }

 

riv
Offline
Зарегистрирован: 20.07.2017

Так сделал хитрее залил в узел 7 прошивку 8 и наоборот, глюк с железом. Вот так то.

Теперь вопрос это контроллер маски не берет или INT например глючит.

riv
Offline
Зарегистрирован: 20.07.2017

.

MaksVV
Offline
Зарегистрирован: 06.08.2015

всмысле INT глючит. INT это что? Выход MCP ты имеешь ввиду? кстати моя либа (ну на даче) без этого инт работает)

MaksVV
Offline
Зарегистрирован: 06.08.2015

а чё пишет то удачно настраиваются фильтры? Так? 

Entering Configuration Mode Successful!
Setting Baudrate Successful!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
MCP2515 Initialized Successfully!

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

китайчане видать партию какашек продали, а мы тут моск себе тренируем)))

riv
Offline
Зарегистрирован: 20.07.2017

В общем кино еще интереснее, контроллеры из разных партий. Явно разныел 

Перепаял на новый все в порядке 8 ожила, пересталп принимать всех.

MaksVV
Offline
Зарегистрирован: 06.08.2015

причём у меня была подобная фигня. МСР вообще не хотела принимать любые сообщения, но отправляла. Потом выснил что в ней косяк, отложил. Потом давай её мучить, позаливал разные примеры из разных либ - заработала. Щас норм пашет. Это прискорбно конечно. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

отключи от кана, питание пересбрось и ардуины в т.ч.

riv
Offline
Зарегистрирован: 20.07.2017

Перепаял 2 штуки, 8 и 11, сейчас 10 паяю, хорошо запас был.

Верхний с иероглифами глючный.

MaksVV
Offline
Зарегистрирован: 06.08.2015

у меня все такие со звездочкой и иероглифами. Вроде пока живут)) А чё ты разъём паяешь?

MaksVV
Offline
Зарегистрирован: 06.08.2015

сколько переделаешь, остальные глючные пока отключи от кана. И посмотрим, может заработает как положено уже наконец. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

у меня все такие со звездочкой и иероглифами. Вроде пока живут)) А чё ты разъём паяешь?

Нет вот так мой мутант выглядит

MaksVV
Offline
Зарегистрирован: 06.08.2015

сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало. 

Все восстановил перепаял.

Думаю проблемы были из-за разных аппаратных частей, давай я погоняю на этой скорости потом поднимем до 500 и уберем задержку до 50

MaksVV
Offline
Зарегистрирован: 06.08.2015

ок. Желательно ещё мастером мегу сделать - чтобы у тебя рестарт 2515 нормально происходил с настройкой фильтров

MaksVV
Offline
Зарегистрирован: 06.08.2015

канхакер собери на рабочей MCP если осталось и его тоже подключи. Посмотрим словит ли он эти левые сообшения, которые на мастере появляются

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

ок. Желательно ещё мастером мегу сделать - чтобы у тебя рестарт 2515 нормально происходил с настройкой фильтров

Фильтры то идут, не делается ручной по SPI рестарт.

Но мегу поставил.

riv
Offline
Зарегистрирован: 20.07.2017

12 часов полет нормальный, не зависало, но перезагрузку хотелось бы проверить

https://yadi.sk/d/ozOcbX7B3V5hYy лог log_20.05

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Выскажу предположение, что проблема может быть в китайском трансивере CAN. Как я понял, на платах CAN у вас стоят MCP2115 и  TJA1050. В оригинальном филипсовском TJA1050 тайм-аут на долгое доминантное состоянии при передаче составляет не менее 250 мкс. В состоянии ошибки MCP2115 может выдавать до 12 доминантных бит, это дает допустимую бодовую скорость не ниже 50 kbps. Китайская реплика TJA1050 может иметь этот тайм-аут в несколько раз меньше. Это могло бы объяснить, почему у вас на 125 kbps глючит, а на 250 kbps работает.

riv
Offline
Зарегистрирован: 20.07.2017

triac пишет:

Выскажу предположение, что проблема может быть в китайском трансивере CAN. Как я понял, на платах CAN у вас стоят MCP2115 и  TJA1050. В оригинальном филипсовском TJA1050 тайм-аут на долгое доминантное состоянии при передаче составляет не менее 250 мкс. В состоянии ошибки MCP2115 может выдавать до 12 доминантных бит, это дает допустимую бодовую скорость не ниже 50 kbps. Китайская реплика TJA1050 может иметь этот тайм-аут в несколько раз меньше. Это могло бы объяснить, почему у вас на 125 kbps глючит, а на 250 kbps работает.

Тут объединились все факторы и софт и реплики и разные китайские реплики (2 партии).

Возможно в разных репликах был немного по разному реализован как протокол так и трансивер. Гланое разобрались.

В общем ОТК на китайцев нет. Я визуально по индикации вижу что несколько мег и ESP-07 (8266) подглючивают. Из 15 купленых ESP-07 в принципе не завелись 3 (не прошились) с битыми антеннами еще 3.

Меги Про от RobotDyn вроде без сбоев.

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV

Я на 20 узле распаял BME280 по I2C на 20 и 21 порт и MQ135 на A0 и 46

Подскажи как теперь с ними работать по твоей идеологии. 

Как настроить, как инициировать передачу мастеру и соседям.

Как принять на мастере.

Тут как раз и выясняется упущение

Мы расчитывали на аналоговые и цифровые датчики. А если они SPI, I2C

MaksVV
Offline
Зарегистрирован: 06.08.2015

это пофиг что spi i2c. ты пишешь для них свой код, в котором есть переменные. Этот код можно вставлять во вкладку Update_Parameters. Температура,  давление, влажность. Ты их забиваешь в массив параметры. И они сами уже передаются мастеру по изменению или периодически. 

Картинка 1 

Картинка 2

Вот , например,  как обновить температуру в массиве 

parameter [PARAMETER][param_addr (air_t)] = тут код из BME280 о температуре. 

PS не знаю как кликабельные картинки сюда вставлять

riv
Offline
Зарегистрирован: 20.07.2017

1. Код для обработки датчиков кидаю в файл Update_Parameters

int bme_temp() {}

int bme_hum() {}

int bme_pres() {}

2. 

parameter [PARAMETER][param_addr (air_t)] = bme_temp();

parameter [PARAMETER][param_addr (air_h)] = bme_hum();

parameter [PARAMETER][param_addr (air_p )] = bme_pres();

С этим вроде понятно

а вот дальше типы параметров в byte parameter [5][parameters_quantity]  нигде не описаны.

И как соотносится 

#define  air_t        1 //датчик температуры

BYTE_1_SIGNED, //1 //датчик температуры

1,        //1 //датчик температуры

и как сделать чтоб ы температура отсылалась не только node_4_Net_center_Due1,         //1 //датчик температуры

но и например 

   node_1_Net_center_PC,                 //1

   node_2_Net_center_oraPi1,             //2

   node_3_Net_center_oraPi2,             //3 

 

И как понять отправка будет периодическая или по изменению параметра (где это указать)

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

riv пишет:

Я визуально по индикации вижу что несколько мег и ESP-07 (8266) подглючивают. Из 15 купленых ESP-07 в принципе не завелись 3 (не прошились) с битыми антеннами еще 3.

Я использовал больше сотни ESP-12F и ESP-12S, ни одного битого пока не встретил.

Те несколько ESP-07, которые я пробовал, работали заметно хуже чем ESP-12, ESP-12F и ESP-12S.  У меня впечатление сложилось такое, что при при передаче керамическая антенна просто расстраивается из-за сильного сигнала, а на приеме она имеет меньшее усиление, чем антенна ESP-12*. Использовать  ESP-07 имеет смысл только с внешней антенной.