в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10.
Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с.
ЗЫ. Не знаю почему у тебя 12 не заработала.
Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК.
в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10.
Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с.
ЗЫ. Не знаю почему у тебя 12 не заработала.
Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК.
когда такое происходит нужно поставить флаг распечатки статусов в настройке отладки. И смотреть приходят ли статусы. Может скорость шины на разных МК разная у тебя была. Тут нужно внимательней. И да, канхакер конечно при этом помогает.
потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100
потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100
да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил.
Походу ты давно на 100 сидишь и ошибка не прилетаела.
да тоже только что исправил, когда тебе скорость 125 поставил, думаю дай проверю, а тут такая фигня. 250 он ещё норм отправлял, а всё что ниже, возвращал семёрку, но сообщения норм доставлялись.
да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил.
да я уже посмотрел. 8 10 11 12 19 20 . Почему то фильтры не срабатывают. Щас у себя залил эти адреса - всё нормально. Мистика да и только . У тебя там аура что ли плохая))
причём у меня была подобная фигня. МСР вообще не хотела принимать любые сообщения, но отправляла. Потом выснил что в ней косяк, отложил. Потом давай её мучить, позаливал разные примеры из разных либ - заработала. Щас норм пашет. Это прискорбно конечно.
сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало.
сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало.
Все восстановил перепаял.
Думаю проблемы были из-за разных аппаратных частей, давай я погоняю на этой скорости потом поднимем до 500 и уберем задержку до 50
Выскажу предположение, что проблема может быть в китайском трансивере CAN. Как я понял, на платах CAN у вас стоят MCP2115 и TJA1050. В оригинальном филипсовском TJA1050 тайм-аут на долгое доминантное состоянии при передаче составляет не менее 250 мкс. В состоянии ошибки MCP2115 может выдавать до 12 доминантных бит, это дает допустимую бодовую скорость не ниже 50 kbps. Китайская реплика TJA1050 может иметь этот тайм-аут в несколько раз меньше. Это могло бы объяснить, почему у вас на 125 kbps глючит, а на 250 kbps работает.
Выскажу предположение, что проблема может быть в китайском трансивере CAN. Как я понял, на платах CAN у вас стоят MCP2115 и TJA1050. В оригинальном филипсовском TJA1050 тайм-аут на долгое доминантное состоянии при передаче составляет не менее 250 мкс. В состоянии ошибки MCP2115 может выдавать до 12 доминантных бит, это дает допустимую бодовую скорость не ниже 50 kbps. Китайская реплика TJA1050 может иметь этот тайм-аут в несколько раз меньше. Это могло бы объяснить, почему у вас на 125 kbps глючит, а на 250 kbps работает.
Тут объединились все факторы и софт и реплики и разные китайские реплики (2 партии).
Возможно в разных репликах был немного по разному реализован как протокол так и трансивер. Гланое разобрались.
В общем ОТК на китайцев нет. Я визуально по индикации вижу что несколько мег и ESP-07 (8266) подглючивают. Из 15 купленых ESP-07 в принципе не завелись 3 (не прошились) с битыми антеннами еще 3.
это пофиг что spi i2c. ты пишешь для них свой код, в котором есть переменные. Этот код можно вставлять во вкладку Update_Parameters. Температура, давление, влажность. Ты их забиваешь в массив параметры. И они сами уже передаются мастеру по изменению или периодически.
Я визуально по индикации вижу что несколько мег и ESP-07 (8266) подглючивают. Из 15 купленых ESP-07 в принципе не завелись 3 (не прошились) с битыми антеннами еще 3.
Я использовал больше сотни ESP-12F и ESP-12S, ни одного битого пока не встретил.
Те несколько ESP-07, которые я пробовал, работали заметно хуже чем ESP-12, ESP-12F и ESP-12S. У меня впечатление сложилось такое, что при при передаче керамическая антенна просто расстраивается из-за сильного сигнала, а на приеме она имеет меньшее усиление, чем антенна ESP-12*. Использовать ESP-07 имеет смысл только с внешней антенной.
в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10.
Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с.
ЗЫ. Не знаю почему у тебя 12 не заработала.
Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК.
что в 12 не работает?
Постоянно FAIL по всем узлам.
в 11 и 12 версии есть ошибка в функции чтения ошибок (из регистров). Там где digitalWrite-ы нужно csPIN поставить вместо 10.
Всё это исправил. Вот версия 13. Настройку отладки упростил флагами. Теперь можно выставлять что будет в отладке. Скорость шины 125 кбит/с.
ЗЫ. Не знаю почему у тебя 12 не заработала.
Возьми 13 версию, ВСЮ папку, ничего не меняй, только настройки на первой вкладке, и наличие узлов в CAN (в system_variables.h) сделай и залей во все МК.
Ок.
когда такое происходит нужно поставить флаг распечатки статусов в настройке отладки. И смотреть приходят ли статусы. Может скорость шины на разных МК разная у тебя была. Тут нужно внимательней. И да, канхакер конечно при этом помогает.
По поводу ничего не менять
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. Если не менять 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.
2. Это всё твоя DUE, на МЕГЕ всё нормально должно быть. И это лучше не убирать, поэтому и переинит не работает у тебя скорее всего.
И если не очень сложно допавь как я просил ранее
это и так уже есть
1
Serial
.println();
Serial
.print(F(
"Мой адрес в сети CAN: "
)); Print (node_address, ADDR);
2
#ifdef type_node_master
3
Serial
.println (F(
" MASTER!"
));
4
#endif
остальное добавлю.
Вот включил я лог.
На слейве не выводит время На нем постоянно (тут понял нужн 1 в дебаге поставить как ждя МК)
Причем на мастере состояние ОК
Как так ни одного правильного пакета а состояние ОК, фигня какая то.
И если не очень сложно допавь как я просил ранее
это и так уже есть
1
Serial
.println();
Serial
.print(F(
"Мой адрес в сети CAN: "
)); Print (node_address, ADDR);
2
#ifdef type_node_master
3
Serial
.println (F(
" MASTER!"
));
4
#endif
остальное добавлю.
Я таким образом место вставки показал ;-)
потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100
с других либ, нормально всё пишет на любой скорости.
потому что библиотека корявая походу. Он в реале сообщение отправляет а пишет ошибка. Там возвращается функцией значение 7, что значит типа закончился таймаут отправки сообщения. На скорости 250 ещё он не пишет этого, а пишет удачно отправлено. Я побольше таймаут поставил вбиблиотеке. Было 50 , поставил 100
Ну так сказхал бы
Сомотри лог https://yadi.sk/d/ozOcbX7B3V5hYy папка лог
1. Куча неотправок
2. Фильтры не работают
3. переполнение буферов
Вот включил я лог.
На слейве не выводит время На нем постоянно (тут понял нужн 1 в дебаге поставить как ждя МК)
1
else
{
Serial
.println(F(
"Ошибка отправки CAN сообщения !!!"
)); readErrorFlags_MCP2515 ();}}
В логе сумашедший дом! все узлы себя ведут хаотичнои непредсказуемо. Логи разные. Это результат спагетти кода.
В общем я согласен с Andy пора структурировать код.
я пока наоборот смотрю норм всё в логах, на узлах по крайней мере мусор не ловится. На мастере только фигня летит всякая, ты DUE заменил на мегу?
Как же не хлам, почему узлы принимают запросы не себе???
дошёл до 8 узла, да вот он фигню порет. Почему то к нему все фреймы попадают
У меня заккралось впечатление что все мои беды это TIMEOUTVALUE 50 в mcp_can_defs.h, поставил 100, ушли неотправки и ошибки 7.
Походу ты давно на 100 сидишь и ошибка не прилетаела.
да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил.
Походу ты давно на 100 сидишь и ошибка не прилетаела.
да тоже только что исправил, когда тебе скорость 125 поставил, думаю дай проверю, а тут такая фигня. 250 он ещё норм отправлял, а всё что ниже, возвращал семёрку, но сообщения норм доставлялись.
да нет, не все. Смотри лог 15 узла. Вот какого хрена он не всегда отправляет свой статус после получения статуса мастера. См. время например 12:17 получил уже 5 статусов , а свой только один раз отправил.
нужно убрать флаг ошибок MCP, может из-за этого
да я уже посмотрел. 8 10 11 12 19 20 . Почему то фильтры не срабатывают. Щас у себя залил эти адреса - всё нормально. Мистика да и только . У тебя там аура что ли плохая))
убирай флаги ошибок MCP, в узлы заливай прошиву по новой до тех пор пока фильтр не заработает.
1
if
(can.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) can_ok = 1;
2
can.init_Mask(0,1,0x1000FF00);
// Init first mask...
3
can.init_Filt(0,1,((node_address & 0xFFFFFFFF)<<8)|0x10000000);
// Init first filter...
4
can.init_Filt(1,1,0x10000000);
// Init second filter...
5
can.init_Mask(1,1,0x1000FF00);
// Init second mask...
6
can.init_Filt(2,1,0x10000000);
// Init 3 filter...
7
can.init_Filt(3,1,0x10000000);
// Init 4 filter...
8
can.init_Filt(4,1,0x10000000);
// Init 5 filter...
9
can.init_Filt(5,1,0x10000000);
// Init 6 filter...
Может строку 3 заменить на
1
can.init_Filt(0,1, 0x1000XX00);
// Init first filter...
где , ХХ - адрес узла
и функцию инита сделай так. Я перенёс раньше Serial.begin . Теперь настройку фильтрации будет выводить в монитор при старте
01
void
MCP2515_Init () {
02
#ifdef debug
03
if
(!Setup) {
Serial
.begin(115200);
04
Serial
.println();
Serial
.print(F(
"Version 13.1 "
)); Print (node_address, ADDR);
Serial
.println();
Serial
.println();}
05
#endif
06
07
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
08
digitalWrite(csPIN, LOW);
09
SPI.transfer(0xC0);
10
digitalWrite(csPIN, HIGH);
11
SPI.endTransaction();
12
delay (100);
13
bool
can_ok = 0;
14
if
(can.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) can_ok = 1;
15
can.init_Mask(0,1,0x1000FF00);
// Init first mask...
16
can.init_Filt(0,1,((node_address & 0xFFFFFFFF)<<8)|0x10000000);
// Init first filter...
17
can.init_Filt(1,1,0x10000000);
// Init second filter...
18
can.init_Mask(1,1,0x1000FF00);
// Init second mask...
19
can.init_Filt(2,1,0x10000000);
// Init 3 filter...
20
can.init_Filt(3,1,0x10000000);
// Init 4 filter...
21
can.init_Filt(4,1,0x10000000);
// Init 5 filter...
22
can.init_Filt(5,1,0x10000000);
// Init 6 filter...
23
#ifdef debug
24
25
if
(can_ok)
Serial
.println(F(
"MCP2515 Initialized Successfully!"
));
26
else
27
Serial
.println(F(
"Error Initializing MCP2515..."
));
28
29
Serial
.println();
Serial
.print(F(
"РЕСТАРТ "
)); Print (node_address, ADDR);
30
#ifdef type_node_master
31
Serial
.println (F(
" MASTER!"
));
32
#endif
33
Serial
.println();
34
if
(!Setup) timeoutsConfigControl ();
35
#endif
36
can.setMode(MCP_NORMAL);
37
}
Так сделал хитрее залил в узел 7 прошивку 8 и наоборот, глюк с железом. Вот так то.
Теперь вопрос это контроллер маски не берет или INT например глючит.
.
всмысле INT глючит. INT это что? Выход MCP ты имеешь ввиду? кстати моя либа (ну на даче) без этого инт работает)
а чё пишет то удачно настраиваются фильтры? Так?
01
Entering Configuration Mode Successful!
02
Setting Baudrate Successful!
03
Starting to Set Mask!
04
Setting Mask Successful!
05
Starting to Set Filter!
06
Setting Filter Successfull!
07
Starting to Set Filter!
08
Setting Filter Successfull!
09
Starting to Set Mask!
10
Setting Mask Successful!
11
Starting to Set Filter!
12
Setting Filter Successfull!
13
Starting to Set Filter!
14
Setting Filter Successfull!
15
Starting to Set Filter!
16
Setting Filter Successfull!
17
Starting to Set Filter!
18
Setting Filter Successfull!
19
MCP2515 Initialized Successfully!
китайчане видать партию какашек продали, а мы тут моск себе тренируем)))
В общем кино еще интереснее, контроллеры из разных партий. Явно разныел
Перепаял на новый все в порядке 8 ожила, пересталп принимать всех.
причём у меня была подобная фигня. МСР вообще не хотела принимать любые сообщения, но отправляла. Потом выснил что в ней косяк, отложил. Потом давай её мучить, позаливал разные примеры из разных либ - заработала. Щас норм пашет. Это прискорбно конечно.
отключи от кана, питание пересбрось и ардуины в т.ч.
Перепаял 2 штуки, 8 и 11, сейчас 10 паяю, хорошо запас был.
Верхний с иероглифами глючный.
у меня все такие со звездочкой и иероглифами. Вроде пока живут)) А чё ты разъём паяешь?
сколько переделаешь, остальные глючные пока отключи от кана. И посмотрим, может заработает как положено уже наконец.
у меня все такие со звездочкой и иероглифами. Вроде пока живут)) А чё ты разъём паяешь?
Нет вот так мой мутант выглядит
сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало.
сейчас проверил на скорости 125 даже с таймаутом 100 изредка проскакивает ошибка отправки сообщения. но фрейм при этом естественно отправляется норм. Короче на скорости 250 вообще без косяков. Можно вот её выбрать 250 кбит/с - не много не мало.
Все восстановил перепаял.
Думаю проблемы были из-за разных аппаратных частей, давай я погоняю на этой скорости потом поднимем до 500 и уберем задержку до 50
ок. Желательно ещё мастером мегу сделать - чтобы у тебя рестарт 2515 нормально происходил с настройкой фильтров
канхакер собери на рабочей MCP если осталось и его тоже подключи. Посмотрим словит ли он эти левые сообшения, которые на мастере появляются
ок. Желательно ещё мастером мегу сделать - чтобы у тебя рестарт 2515 нормально происходил с настройкой фильтров
Фильтры то идут, не делается ручной по SPI рестарт.
Но мегу поставил.
12 часов полет нормальный, не зависало, но перезагрузку хотелось бы проверить
https://yadi.sk/d/ozOcbX7B3V5hYy лог log_20.05
Выскажу предположение, что проблема может быть в китайском трансивере CAN. Как я понял, на платах CAN у вас стоят MCP2115 и TJA1050. В оригинальном филипсовском TJA1050 тайм-аут на долгое доминантное состоянии при передаче составляет не менее 250 мкс. В состоянии ошибки MCP2115 может выдавать до 12 доминантных бит, это дает допустимую бодовую скорость не ниже 50 kbps. Китайская реплика TJA1050 может иметь этот тайм-аут в несколько раз меньше. Это могло бы объяснить, почему у вас на 125 kbps глючит, а на 250 kbps работает.
Выскажу предположение, что проблема может быть в китайском трансивере 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 вроде без сбоев.
MaksVV
Я на 20 узле распаял BME280 по I2C на 20 и 21 порт и MQ135 на A0 и 46
Подскажи как теперь с ними работать по твоей идеологии.
Как настроить, как инициировать передачу мастеру и соседям.
Как принять на мастере.
Тут как раз и выясняется упущение
Мы расчитывали на аналоговые и цифровые датчики. А если они SPI, I2C
это пофиг что spi i2c. ты пишешь для них свой код, в котором есть переменные. Этот код можно вставлять во вкладку Update_Parameters. Температура, давление, влажность. Ты их забиваешь в массив параметры. И они сами уже передаются мастеру по изменению или периодически.
Картинка 1
Картинка 2
Вот , например, как обновить температуру в массиве
1
parameter [PARAMETER][param_addr (air_t)] = тут код из BME280 о температуре.
PS не знаю как кликабельные картинки сюда вставлять
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
И как понять отправка будет периодическая или по изменению параметра (где это указать)
Я визуально по индикации вижу что несколько мег и ESP-07 (8266) подглючивают. Из 15 купленых ESP-07 в принципе не завелись 3 (не прошились) с битыми антеннами еще 3.
Я использовал больше сотни ESP-12F и ESP-12S, ни одного битого пока не встретил.
Те несколько ESP-07, которые я пробовал, работали заметно хуже чем ESP-12, ESP-12F и ESP-12S. У меня впечатление сложилось такое, что при при передаче керамическая антенна просто расстраивается из-за сильного сигнала, а на приеме она имеет меньшее усиление, чем антенна ESP-12*. Использовать ESP-07 имеет смысл только с внешней антенной.