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

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. если не убрать 

1//SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
2//digitalWrite(csPIN, LOW);
3//SPI.transfer(0xC0);
4//digitalWrite(csPIN, HIGH);
5//SPI.endTransaction();
6//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. если не убрать 

1//SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
2//digitalWrite(csPIN, LOW);
3//SPI.transfer(0xC0);
4//digitalWrite(csPIN, HIGH);
5//SPI.endTransaction();
6//delay (100);

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

1.

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

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

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

riv пишет:

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

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

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

1Serial.println(); Serial.print(F("Мой адрес в сети CAN:  ")); Print (node_address, ADDR);
2#ifdef type_node_master
3Serial.println (F("  MASTER!"));
4#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!"));

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

1Serial.println(); Serial.print(F("Мой адрес в сети CAN:  ")); Print (node_address, ADDR);
2#ifdef type_node_master
3Serial.println (F("  MASTER!"));
4#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 в самом низу строку вот на эту поменяй (скобки забыл поставить)
1else {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, в узлы заливай прошиву по новой до тех пор пока фильтр не заработает.

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

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

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

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

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

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

 

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

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

 

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

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

1parameter [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 имеет смысл только с внешней антенной.