CAN bus transport implementation
-
"Can you provide logs (gateway/node) from the reset scenario. It would be great to have these logs for RS485 and CAN so I can compare them."
Released today 2 gateways connect to MyController
- UNO_usb - Gateway and RS485 bus
- UNO_usb - Gateway and CAN Bus
with connect, a UNO with the basic sketch "RelayWithButtonActuator_base.ino" (slightly modified)
with ... a Led and a Switch, for each bus.The Listing split in several parts
"Log of the IDE and MyC for the two types of bus (node34 and node 54), CAN and RS485.
- Listing Action RESET with MyController 2 parts for CAN and 2 parts for RS485 and - Listing Action On/Off on the node switch or with MyController 4 parts for CAN and 4 parts for RS485No error on the Reset, it works fine, an error from me.
Oh yes, I even found an error :)
the sendSketchInfo("test xxxxx", "1.0"); is not upsee the end of the video
video....I will answer the other question tomorrow.
-
@Adam-Slowik "Can you push your patch to my repository? " .... I don't know how
On the CAN principle
@Adam-Slowik "Based on this id, the filters are configured to remove all messages not intended for the current node. This way, if the gateway wants to send a message to the node with id = 51, only the node with that id receives that message." ... yes, that's how I see it.
another way to say/explain it.
"The philosophy of CAN is to constitute a messaging system.
The messages (the letter) send on the CAN Bus (the post office), distributed by the CAN Bus (the letter carrier).Each (letter) have each an identifier (stamp of the post ☺ ) that ... identifies it.
And put in the right mailbox (the MCP2515) according to the choice of filter/mask ( color, scent? ☺ ) of the letter."So there are two "stratum" of dialogue / work.
- one on the Can Bus, and another on the Nodes.
The idea is to relieve the Nodes of unnecessary work/effort with the risks that this brings. Less letter to open :)
@Adam-Slowik "... my modules and arduinos are buried in a box in my attic..." ? Arduino 8bit and MySensors is over for you?
( if it's a personal / family reason don't say anything ) -
I tested my sketch with clock and OLED to see :)
bah No the time is not up :(
I give this information for an overview, it can help for the continuation (but not to give you work :) )
The listing of the messages of mySensors
test with "void receiveTime" function (without RTC clock)
https://forum.mysensors.org/topic/4809/real-time-clock-module-lcd-display-and-controller-time/8?_=1655208396048..........Log MyC - terminal ssh ......... 2022-06-14T14:01:45.115+0200 recd 0;255;3;0;9;65310350 TSF:MSG:READ,55-55-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 2022-06-14T14:01:45.119+0200 recd 0;255;3;0;9;65310356 TSF:MSG:ECHO REQ 2022-06-14T14:01:45.127+0200 recd 0;255;3;0;9;65310360 TSF:MSG:SEND,0-0-55-55,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 2022-06-14T14:01:45.127+0200 recd 55;255;3;0;1; 2022-06-14T14:01:45.146+0200 sent 55;255;3;0;1;1655215305 2022-06-14T14:01:45.160+0200 recd 0;255;3;0;9;65310394 TSF:MSG:SEND,0-0-55-55,s=255,c=3,t=1,pt=0,l=10,sg=0,ft=0,st=OK:1655215305..........Log MyS - terminal IDE ......... time current:0 ------------------------------------------- 58007 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 58017 TSF:MSG:READ,0-0-55,s=255,c=3,t=1,pt=0,l=0,sg=0: 58022 TSF:MSG:ECHOavec Bus RS485
..........Log MyC - terminal ssh ......... 2022-06-14T14:22:41.265+0200 recd 0;255;3;0;9;72000090 TSF:SAN:OK 2022-06-14T14:22:41.274+0200 recd 0;255;3;0;9;72000096 TSM:READY:NWD REQ 2022-06-14T14:22:41.298+0200 recd 0;255;3;0;9;72000115 ?TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 2022-06-14T14:22:41.917+0200 recd 0;255;3;0;9;72000736 TSF:MSG:READ,22-22-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 2022-06-14T14:22:41.920+0200 recd 22;255;3;0;21;0 .........Log MyS - terminal IDE ......... time current:1422 ------------------------------------------- 423956 TSF:MSG:READ,0-0-255,s=255,c=3,t=20,pt=1,l=1,sg=0:0 423962 TSF:MSG:BC 424008 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=21,pt=1,l=1,sg=0,ft=0,st=OK:0 requestOn----------------------------------------- -
@JeeLet said in CAN bus transport implementation:
Arduino 8bit and MySensors is over for you?
No it is not over. Right now I don't have enough time. Now I am able to work for let's say 1 hour per week. Probably I will become more active at the end of 2023 :D
@JeeLet said in CAN bus transport implementation:
bah No the time is not up
Here You posted RS485 version:
https://forum.mysensors.org/topic/4809/real-time-clock-module-lcd-display-and-controller-time/8?_=1655208396048Could You post here CAN version?
-
@Adam-Slowik "Could you post the CAN version here?"
it's the same, except that the bus is not rs485 but CAN :)
...... ........ #define MY_NODE_ID 55 /*Node en ID static*/ #define MY_CAN #include "SSD1306Ascii.h" ........ .....but I'll go back to PaulStoffregen's Lib <TimeLib.h> to see if I can simplify the basic sketch of MySensors
-
In previous example (with diodes) did You set CAN_CLOCK to MCP_16MHZ?
-
no it stayed on 8Mhz ?
I didn't modify anything (the other sketches work)
But I just looked at the quartz and it's 16M!! (SW-65-16M)
I am lost :(
https://www.gotronic.fr/art-module-bus-can-sbc-can01-28405.htm
but on the doc there is :
The 8000000 stands that the MCP2515 operates with a clock of 8 MHz. This
depends on the quartz used and may need to be adjusted.error
on the official doc it's a 16Mhz like mine.- https://www.joy-it.net/en/products/SBC-CAN01
OSCILLATOR 16 MHz Crystal Oscillator
so 8Mhz or 16Mhz?
and why does it work with the previous sketches? - https://www.joy-it.net/en/products/SBC-CAN01
-
I think the dialogue is good
but the problem is the length of the storylinea part of the dialog on the IDE terminal for both types
CAN and RS485- IDE terminal sur RS485 : 4066 TSF:MSG:ECHO 4132 TSF:MSG:READ,0-0-22,s=255,c=3,t=1,pt=0,l=10,sg=0:1655285320 8018 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 8054 TSF:MSG:READ,0-0-22,s=255,c=3,t=1,pt=0,l=0,sg=0: 8058 TSF:MSG:ECHO 8111 TSF:MSG:READ,0-0-22,s=255,c=3,t=1,pt=0,l=10,sg=0:1655285324 newTime:1655285324 ------------------------------------------- - IDE terminal sur CAN : 22224 MCO:REG:REQ 22226 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 22233 !MCO:PRO:RC=1 22235 TSF:MSG:READ,0-0-55,s=255,c=3,t=27,pt=1,l=1,sg=0:1 22240 MCO:PIM:NODE REG=1 28004 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 28014 TSF:MSG:READ,0-0-55,s=255,c=3,t=1,pt=0,l=0,sg=0: 28019 TSF:MSG:ECHO newTime:0 -------------------------------------------sketch
void receiveTime(unsigned long controllerTime) { if (receiveTime) stateCom = true ; else stateCom = false; newTime = controllerTime; " " .... Serial.print(" newTime:"); Serial.print(newTime); -
frequency change
with 16Mhz I have a NACK
// #define CAN_CLOCK MCP_16MHZ 105 TSM:FPAR 18107 ?TSF:MSG:SEND,55-55-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=NACK: newTime:0 ------------------------------------------- time current:0 ------------------------------------------- 20115 !TSM:FPAR:NO REPLY 20117 TSM:FPAR 20119 ?TSF:MSG:SEND,55-55-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=5,st=NACK: // #define CAN_CLOCK MCP_8MHZ 8004 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 28014 TSF:MSG:READ,0-0-55,s=255,c=3,t=1,pt=0,l=0,sg=0: 28019 TSF:MSG:ECHO newTime:0 ------------------------------------------- time current:0 ------------------------------------------- 38005 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 38016 TSF:MSG:READ,0-0-55,s=255,c=3,t=1,pt=0,l=0,sg=0: -
in the sketch I added lines to visualize the buffer data
log IDE :
newTime:0 ------------------------------------------- Extended ID: 0x0410FF00 DLC: 8 Data: 0x00 0x00 0xFF 0x0A 0x23 0x14 0xFF 0x00 88010 TSF:MSG:SEND,55-55-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Extended ID: 0x05103700 DLC: 7 Data: 0x00 0x00 0x37 0x02 0x13 0x01 0xFF Extended ID: 0x06303700 DLC: 8 Data: 0x00 0x00 0x37 0x52 0x03 0x01 0xFF 0x31 newTime:0 -------------------------------------------I stop for me, I pause for 1 day or 2 :)
-
I found a bug in my code. Please re-download new version.
If something won't work please enable CAN debug by adding:
#define MY_DEBUG_VERBOSE_CANadd this to gateway and to node sketch
-
#define MY_DEBUG_VERBOSE_CAN .....yes yes I already tested it, it's very good.
(a very useful function)..go to
- Reloading the CAN-MyS update
- ClearEeprom of the GW and Nodes
- Reloading of Sketches on GW and Nodes
Bravo :woman-lifting-weights:
-
sendSketchInfo(" text ...."); and well up
-
requestTime(receiveTime); and functional
Ahhhhhh Lovely this is great :rainbow:
I offer the coffee crossing :croissant: :coffee:(what was the problem ??? )
After the test on the Digital I/O of the Nodes ,
now I test the Analog I/Oa Super Thank You @Adam-Slowik
:+1: -
a test with DHT22 probes.
the values go up well on MyC
real decimal values :)here is a screen shot
I have to find another type of probes, the DHT22 give me losses, or my sketch is to reviewReEdit
error :angry:
I got excited too fast
the values are not refreshed.
I look better :eyeglasses:ReRe-edition
I made a mistake, as I play a little too much with MyController, I add and remove gateways from nodes and other salads.
and well in the end it makes no sense ;)I cleaned up the Yaml files of MyC and it's better :)
-
@JeeLet said in CAN bus transport implementation:
what was the problem ???
Previous messages used 7 bytes long payload. Single CAN frame is able to transfer 8 bytes. So all messages was contained in single frame. Example with time, used 17 (!) bytes long payload. In order to transfer 17 bytes there is need to split data to 3 messages (8+8+1). Next in the other side of wire You have to concat it. This mechanism of splitting and concating had a bug. For details check last 3 commits (at the bottom)
https://github.com/mysensors/MySensors/compare/development...AdamSlowik:development -
Gateway Logs on MyController
(CAN Bus and RS485 Bus)two separate files
CAN log
RS485 logfiles split in parts :
A : gateways startup
B : reboot of the gateways
C : launch of MyClock Nodes (id23 and id55)
D ; periodic refresh requestTime(receiveTime)
E ; send value (1700 and 2100)(I have prepared the work for you to read)
a 1st analysis
- (at the bottom of the listing, the sending of values "1700 or 2100" with MyC)
The RS485 bus dialogues much more, the CAN bus is more timid :)
Adam Slowik bravo
I test what now???
the ACK ??Oh yes, I have to check the disconnection of the nodes.
The Gateway gives me the impression that the information does not go back to MyC if a Node is off ??? - (at the bottom of the listing, the sending of values "1700 or 2100" with MyC)
-
@JeeLet said in CAN bus transport implementation:
I test what now???
I was at similar position some time ago:
@Adam-Slowik said in CAN bus transport implementation:
Any suggestion what to test next?
I have no idea what to test next. I do not use MySensors. I hope this will change in the future, but as of now I'm a newbie.
If You won't get any advice from more experienced users I would suggest to do some long running test to see if it's stable. If it's stable try to use it in some real use cases.
If You find any bugs in transmission layer post logs here. I will do My best to support CAN, because I will need it in a future.
-
" I would suggest doing a long term test to see if it is stable." yes I will stress it to see the weakness
".. If it is stable, try to use it in real use cases." yes that's the point
One last question
I'm going from 8Mhz to 16Mhz (in development/MyConfig.h on line 306)
question: can you explain how I can bring up in the sketch the parameters that are related to the MCP_CAN_lib library
it should not be complicated for me :) it is only text to insert ???
an example with the #define CAN_CLOCK MCP_8MHZ
Thanks Adam Slowik
-
@JeeLet said in CAN bus transport implementation:
I'm going from 8Mhz to 16Mhz (in development/MyConfig.h on line 306)
In My opinion You should not override MyConfig.h. If You want to go for 16MHz You should put:
#define CAN_CLOCK MCP_16MHZin Your sketch. Preferably somewhere around line:
#define MY_CAN@JeeLet said in CAN bus transport implementation:
can you explain how I can bring up in the sketch the parameters that are related to the MCP_CAN_lib library
If it's a parameter that is listed in MyConfig.h simply define it like 'CAN_CLOCK'. If parameter is not listed in MyConfig please let me know exactly what parameter You would like to modify, then I will try to figure it out.
-
-
I'm not sure if We understood each other. This line
#define CAN_CLOCK MCP_16MHZshould be in Your sketch. You should not modify MyConfig.h.
Libraries (in general not only MySensors) should not be modified. MyConfig.h is part of library.Let's take a look at this code from MyConfig.h
#ifndef CAN_CLOCK #define CAN_CLOCK MCP_8MHZ #endif.This is if statement. If user didn't defined
CAN_CLOCKdefine it asCAN_CLOCK MCP_8MHZ
If user defined (in sketch)CAN_CLOCKthen do nothing.So You can treat MyConfig.h as a set of defaults which can be overridden from sketch.
I have put all relevant (in My opinion) properties from
MCP_CAN_libinto MyConfig.h, so You can override them. If I have missed some relevant property please let Me know.