Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme

TEMA: Comunicación CAN entre arduinos

Comunicación CAN entre arduinos 7 meses 2 semanas antes #1430

eso es otra cosa, yo lo había entendido así, que con dos placas, una por Arduino se podía implementar en el ROV, y se ganaba velocidad y distancia de transmisión, si es así, con dos placas si que me atrevo, con 14 placas no
ya me había asustado
no solo por el precio, también por tener que programar 14 placas

un saludo.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Última Edición: por asesorplaza1.

Comunicación CAN entre arduinos 6 meses 3 semanas antes #1551

Buenas a todos, voy a intentar en todo lo posible estar aquí otra vez con ustedes.
Vamos con lo del CAN BUS, este post sera algo extenso.

Bueno supongo que habéis leído lo que ya puse sobre el CAN, voy a hacer un resumen.

Hay dos tipos de formas de mandar la trama: Standar (11 bits) o Extendida (29 bits), vamos a usar la de 11 bits que tendremos de sobra para cualquier proyecto.

La trama se compondrá de:
- Un identificador (ID) que es donde pondremos la dirección en hexadecimal por la cual queremos enviar la trama, al tener 11bits,
tendremos un margen de direcciones desde 0x000 a 0x7FF, vamos a poder mandar muchísimos datos.
La ID también representa la prioridad de envió de los datos, Ej; si mandamos dos trama una con dirección 0x010 y otra con 0x036 se enviara primero la 0x010.

- El DCL o Length: Esto nos indica la longitud de la trama, tendremos que poner el numero de bytes que vamos a mandar por la trama, Maximo 8 bytes.

-La Trama, estará compuesta como máximo de 8 bytes, podremos mandar un dato por cada bytes o 1 dato en dos bytes, según la precisión de medida que queramos,
(os explicare mas adelante como mandar 1 datos en dos bytes, de momento vamos a mandar 1 dato en 1 bytes, Ej: mandamos la lectura de un sensor de temperatura en un solo bytes y obtendremos una lectura de dos digitos, si queremos decimales, tendremos que mandar esa lectura en 2 bytes, es asín mas o menos ya entrare a explicar esto mejor).

-La velocidad de envió de la trama la seleccionaremos según nuestro propósito, siempre teniendo en cuenta la limitación por longitud del cable(siempre trenzado).

40 mts...................................1000 kbit/seg
100 mts...................................500 kbit/seg
200 mts...................................250 kbit/seg
500 mts...................................100 kbit/seg
1000mts....................................50 kbit/seg

Os dejo aquí como se conecta el MCP con arduino UNO y Mega, que ya sabréis que se conecta por SPI, os dejo también una imagen de como se conectan los dos MCP entre ellos y uno de ellos tiene que tener un punte echo para cerrar el CAN, si no, no funciona.

Por ultimo respecto al cristal de 8Mhz o 16Mhz, os dije de poner 16Mhz a parte por la velocidad, es por que las librerías buenas que tengo para el CAN solo funcionan a 16Mhz no hay otra opción. Pero como estas librerías son algo mas complicadas de usar, que lo haremos, vamos a usar otras librerías en la cual si podemos configurar la velocidad de reloj y ponerlo a 8Mhz y son mas fácil de comprender.

Mañana subiré los dos Steck el de envió y el de recepción y los explicare,vamos a usar:
1 Arduino nano
1 Arduino Mega
2 MCP2515
2 Sensores DS18B20

Vamos a enviar la lectura de estos dos sensores de un arduino a otro y lo veremos por el puerto serie.

Saludos
Adjuntos:
El siguiente usuario dijo gracias: asesorplaza1

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Comunicación CAN entre arduinos 6 meses 3 semanas antes #1554

Buenos pues aquí os dejo los dos Skech de arduino y os los comento un poco.

Solo voy a comentar lo referente al CAN lo demás sobre los sensores DS16B20 ya esta en los vídeos de Jose Luis.

El Sketch de envio:

Crearemos una estructura para la trama CAN, que este caso llamaremos canMsg, podéis poner el nombre que queráis.
struct can_frame canMsg;
Definiremos en pin en el cual conectaremos el pin CS del MCP, en este caso el pin 10.
MCP2515 mcp2515(10);
En el Setup:
Reseteamos el MCP
mcp2515.reset();
Selecionamos velocidad y reloj del CAN
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
Selecionamos el modo en que enviaremos la trama
mcp2515.setNormalMode();

En el Loop:

Bueno aquí con los comentarios creo que ya os vale, lo que podéis ver es que en cada Data, podemos enviar el dato que queramos, y podemos enviar tantas tramas como ID le corresponden a 11 bits.
Por Ej: Con la estructura canMsg vamos a poder mandar 8 bytes, pero si creamos una estructura canMsg1 podemos mandar otros 8 bytes y asin hasta cubrir todas las ID desde la 0x001 hasta la 0x7FF

canMsg.can_id = 0x001; // CAN id es 0x001
canMsg.can_dlc = 8; // CAN dlc o length es 8, ya que vamos a usar una trama de 8 bits, aunque es este caso no hace falta.
canMsg.data[0] = TemperaturaIN; // Mandamos el valor del sensor TemperaturaIN
canMsg.data[1] = TemperaturaEX; // Mandamos el valor del sensor TemperaturaEX
canMsg.data[2] = 0x00;
canMsg.data[3] = 0x00;
canMsg.data[4] = 0x00;
canMsg.data[5] = 0x00;
canMsg.data[6] = 0x00;
canMsg.data[7] = 0x00;

mcp2515.sendMessage(&canMsg); // Con este comando mandamos la estructura de la trama CAN


El Sketch de recibir no lo voy a explicar, por que creo que en cuanto lo veáis lo comprenderéis, si no, me preguntas.

Os dejo también las librerías necesarias.

Lo próximo a parte de las dudas que tengáis, sera explicaros como mandar los datos del sensor de temperatura en 2 bytes.

Saludos
Adjuntos:
El siguiente usuario dijo gracias: asesorplaza1

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Comunicación CAN entre arduinos 6 meses 3 semanas antes #1555

Hombre DEA, has vuelto al mundo de Cambatronics, me alegro de que hallas vuelto, un abrazo virtual, que ahora hay que guardar las distancias de seguridad.
Voy a estudiar todo lo que has publicado que tiene tela.
Has vuelto con ganas, me alegro. Un saludo.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Comunicación CAN entre arduinos 6 meses 2 semanas antes #1558

Que bueno que regresaste che. :side:

Estudiare todo con detinimiento, pero ahora estoy liado ocn lo de la fuente que ya casi la tenia lista, ya funciona bastante bien y zas acabo de chocar con una problema que no me esperaba y que me esta fastidiando bastante.

Pero pronto me pondre a estudiar la documentacion que nos aportas.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Tiempo de carga de la página: 0.141 segundos
Gracias a Foro Kunena