The "center pin" of probe one is to CanHi, and the "center pin" of probe two is to CanLo. The ground of both probes are grounded/connected to the PS ground powering the Shifter. I assume that's what you meant by "connecting the scope gnd." I am not sure how exactly to draw the probe and grounding of the probe, so I drew it that way. I see how it can be confusing.
If your Nano is powered - as your drawing implies - from the USB port and nothing is drawing a ridiculous current, then unlikely to be the problem as such.
With the probes grounded to the ground of the none, but without using the ground of the linear power supply that is powering the shifter, the traces drop to zero volts, but the CanHi goes up about a volt, while the CanLo drops a volt, with a "normal" wave form. Once power is applied to the Nano/MCP, the wave form flatlines.
Linear power supply.
I did. As soon as the Nano and MCP2515 get power, Both CanHi and CanLo get pulled to 2.5 volts, and the waveform is a straight line just like before.
TIA
in post #14 there is a scope plot of the signals from the shifter - the pulses appear to be about 2microseconds wide - does that give us an indication of the can baudrate as 500K ?
may be useful to get an expanded scope plot? say 5uSec/division
it is possible if the Can shield baudrate is incorrect the shiffter is shutting down the bus ?
Edit: just checked with my CAN shield set to
while(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) // for Can MCP2515 board
scope shows

the cursor indicates a pulse width of 2uSec - looks as though 500KBS is set correctly
maybe worth running a program on your CAN shield which receives and displays messages received
e.g. running the transmit message program of post #8 on one CAN shield and the following receive message program (from File>Examples>mcp_can>Can_Receive) on another can shield (you may need to change the CS pin)
// CAN Receive Example
//
#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char msgString[128]; // Array to store serial string
#define CAN0_INT 2 // Set INT to pin 2
MCP_CAN CAN0(10); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
//if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
Serial.println("MCP2515 Initialized Successfully!");
else
Serial.println("Error Initializing MCP2515...");
CAN0.setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data.
pinMode(CAN0_INT, INPUT); // Configuring pin for /INT input
Serial.println("MCP2515 Library Receive Example...");
}
void loop()
{
if(!digitalRead(CAN0_INT)) // If CAN0_INT pin is low, read receive buffer
{
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
if((rxId & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits)
sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len);
else
sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len);
Serial.print(msgString);
if((rxId & 0x40000000) == 0x40000000){ // Determine if message is a remote request frame.
sprintf(msgString, " REMOTE REQUEST FRAME");
Serial.print(msgString);
} else {
for(byte i = 0; i<len; i++){
sprintf(msgString, " 0x%.2X", rxBuf[i]);
Serial.print(msgString);
}
}
Serial.println();
}
}
the receiver displays
Entering Configuration Mode Successful!
Setting Baudrate Successful!
MCP2515 Initialized Successfully!
MCP2515 Library Receive Example...
Standard ID: 0x100 DLC: 8 Data: 0x02 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Standard ID: 0x100 DLC: 8 Data: 0x01 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Standard ID: 0x100 DLC: 8 Data: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Standard ID: 0x100 DLC: 8 Data: 0x24 0x01 0x02 0x03 0x04 0x05 0x06 0x07
you should see any message transmitted by the shifter
