Go Down

Topic: CAN BUS: Red de Arduinos (Read 41344 times) previous topic - next topic

flico

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

flico

Igor necesito ser iluminado, estoy hecho un lio, me habre leido el FAQ de tu pagina como diez veces y me asaltan un monton de dudas.
Son pocas, pero quiero estar seguro de poder usar CAN para mi casita domotica.
Las dudas son:
Quote

Si dos dispositivos intentan enviar a la vez información, aquel que envia un mensaje con ID mas baja, será el que "gana" y el otro esperará a que el bus este libre para reenviar el otro mensaje (ID mayor).


Entiendo que un mensaje con ID 0x001 tiene mayor prioridad que uno con id 0x200

Quote
Asegurate que dos de tus dispositivos (nodos) no manden mensajes usando la misma ID.


Imagina que tengo 4 nodos con un termistor en cada uno y entre otras cosas quiero enviar la temperatura de cada termistor
¿Podria enviar cada nodo un mensaje con ID 103 con la temperatura?

ID 0x103   Temperatura
data[0]=0x00; Nodo   (El nodo que envia el mensaje)   
data[1]=0x00; Temperatura zona

Para enviar por ejemplo la temperatura 24,65 ¿estaria bien asi?

data[1]=0x24;
data[2]=0x65;

y por ultimo si quiero ademas enviar la temperatura del congelador que tiene signo negativo.

Gracias Igor.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Igor R

#152
Aug 13, 2011, 11:15 am Last Edit: Aug 13, 2011, 12:02 pm by Igor R Reason: 1
Hola,

Como bien pone ahí, NO se han de repetir las ID. La ID es un identificador. No necesitas nada más, ya que es algo único en tu red. Como diseñador has elegido que datos hay en cada mensaje.
Por otro lado, puedes enviar el valor "raw" de tu conversor ADC, en vez de liarte. En cada mensaje pudes enviar 8 bytes, y para cada canal, necesitas 2 bytes (el conversor es de 10 bits).

Ponemos un par de ejemplos, puedes extrapolar a tantos mensajes como sean necesarios:

Para la habitación 1, decido que uso el mensaje con identificador 0x100
Para la habitación 2, decido que uso el mensaje con identificador 0x101
etc.

En cada mensaje puedes enviar 4 canales analógicos. Ejemplo temperatura de la habitación, posición de la persiana, valor del sensor ldr para el control de persianas y otra cosa más.

Entonces en tu red, ya sabes que cuando haya un mensaje con identificador 0x100, corresponde a habitación 1. Y además ya sabes que en el byte 0-1 está la temperatura, en el byte 2-3 posición persiana, en el byte 4-5 valor ldr y en el byte 6-7 otro sensor (el que sea).

Si recibes un mensaje que su identificador es 0x101, pues sabrás que es la habitación 2 y que datos tienes.

Para enviar datos, ha salido varias veces por el foro.  Puedes usar los operadores bitwise => http://arduino.cc/forum/index.php?topic=50658.15.
En la referencia de Arduino, también tienes cuantos bytes necesitas para cada variable, por ejemplo, para un long 4 bytes. Así que descompones en 4 bytes como lo explicado en dicho post, y haces la operación inversa al recogerlo. Aunque sigo pensando que lo más sencillo es enviar el dato como te sale en el conversor ADC, y linealizarlo cuando toque usarlo.

Espero que quede más claro. Te puedo asegurar, que puedes usar CAN sin problemas para tu casita domótica.... XD
Lo más sencillo, es comprar un par de shields y empezar a hacer las pruebas, porque manos a la obra es como mejor se aprende.
Puedes ojear los ejemplos del "Getting Started" => http://secuduino.blogspot.com/2011/02/getting-started.html

Salu2


;)

flico

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Sergegsx

Igor no seria mejor usar el ID para definir el tipo de sensor, aparato, pulsador, ...
y luego usar los 8 bits para dar datos al respecto?
por ejemplo ID 0x100 es el sensor de temperatura
byte1+byte2 = habitación de la que procede la medida (asi puedes tener mas de 8 habitaciones, vamos 255)
byte3+byte4 = valor del sensor (uso 2 bytes para datos tamaño int)

tu forma de hacerlo limita que que una habitación con ID 0x100 solo puede enviar 4 canales analogicos por lo que habria que crear otra ID para esa misma habitación si queremos tambien enviar mas datos, PIR, humo, alarma, luz, etc etc

de esta forma no se asemejaría mas a como se estructuran en el CANBUS de un coche? donde cada ID corresponde a un parametro del coche y no del sitio de donde viene???

ahora es cuando me das una razón que desmonta todo mi argumento por muy convencido que yo este de que mi idea es buena jejeje

Igor R

je,je,je
Lo puedes hacer cómo quieras, pero en un coche no va una ID por sensor.... ;)
Estas hablando de OBD, que es otro tema.

Lo que dices tu, el argumento más fuerte es....¿para que necesitas mandar en el mensaje de que habitación es enviado? ¿Vas a hacer que varios dispositivos manden la misma ID?  No me parece buena idea...¿cómo vas a controlar cuando le toca transmitir?
Tienes 2^11 identificadores.... no creo que te los acabes....je,je,je


Sergegsx

entiendo que hay muchos ID disponibles pero pensaba que hablabas de asignar un unico ID a una habitación, por eso decia que te limitaba a 4 datos unicamente.

basicamente entonces es decir pues de la ID0x100 a la 0x125 son para la habitación 1.

yo me estaba guiando mas en el OBD como tu dices, en el que piensas en un parametro del coche y tiene su ID. lo cual traduci a 1 sensor o un parametro de la casa... un ID.


pero vamos que todo es discutible y analizable, estaria bien ver que opción es la optima o mas facil de implementar e interpretar y seguro que le ayuda a flico

Igor R

El OBD sigue un protocolo de petición-respuesta y hay que tener cuidado de no confundir la ID del mensaje con el PID del OBD. Tampoco es el mejor ejemplo para tomarlo como referencia.
Normalmente en aplicaciones de bus CAN de control o instrumentación, se están enviando los mensajes de forma períodica.

Puedes tener tantos mensajes por habitación que quieras, y como es algo que eliges tú, no hace falta mandar en el mensaje más información de quien lo está enviando, ya que es redundante. Explique sólo con 2 mensajes para no confundir.

Como expliqué en mi mensaje es como suele usarse.

Saludos


;)

flico

Voy hacer lo que dice Igor, que cada nodo emita los ID unicos. Me explico, que la habitacion 1 envie el mensaje 0x101, la habitacion 2 el mensaje 0x102, ... y asi con todos los mensajes.
Saludos.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

LuisAntonio

Buenas!!!

¿Seguro que el OBD únicamente sigue protocolo petición respuesta? ya que yo he hecho un programa únicamente de lectura y esta leyendo continuamente tramas... aunque desconozco que pueden ser!
Algunas personas sueñan con grandes logros, mientras que otros no duermen cumpliéndolos.

http://diagnostican.blogspot.com

flico

@LuisAntonio encontre ayer un blog de estudio del trafico CAN sobre un mazda. Espero que te sirva.

Web:
http://hackingmazda.blogspot.com/
Doc:
https://docs.google.com/document/d/1Lsgtie9PFxNh6iVtXRmFRJuttXuDYox_2AI_odx62os/edit?hl=es

Saludos
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

flico

Igor, sabes porque pueden usar opto-acopladores en este esquema? Creo que es por que usan lógica de 3,3V pero tampoco lo se ha ciencia cierta.

Saludos.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

LuisAntonio

Muchas gracias por la información flico!!

Voy a mirarlo a fondo.
Algunas personas sueñan con grandes logros, mientras que otros no duermen cumpliéndolos.

http://diagnostican.blogspot.com

ASTROCAR

#163
Aug 31, 2011, 11:54 am Last Edit: Aug 31, 2011, 11:58 am by ASTROCAR Reason: 1
Buenos dias, en una oportunidad le escribi a Igor para comprar el placa can bus de la cual le dio vida a este post pero por conceptos de control de cambio en mi pais no la pude comprar ya que no pude hacer el deposito ya que ese control de cambio nos limita mucho a nosotros los venezolanos. En vista de no poder obtener la placa can bus que todos ustedes tienen tuve que trabajar con una que ya disponia hace mucho tiempo llamada SPI-CAn que la compre a la gente de MIKROE pero para empezar mis desarrollos no disponia de una libreria que me soportara can bus y use la falicitada gratuitamente por ARcan y cosa que se lo agradesco esa libreria la he usado y hechos mis propios arreglos por ejemplo en cuanto a la velocidad de can bus pero en este momento me encuentro desarrollando la funcion de filtraje para can ya que la libreria de ARcan no dispone de esa funcion. Si alguien tiene ejemplo de como poder desarrollar la funcion de filtrado de IDs en can se lo agradeceria de igual modo sigo en pie de mucha por desarrollar la funcion que me permita manejar filtros en can bus con arduino.

Saludos y lastima que no dispongo de la libreria del colega Igor que viene con la placa can que el tiene disponible.

Sergegsx

mis ojooooos !!!  :smiley-eek: :smiley-eek: :smiley-eek:
una de las frases mas largas que he leido en mi vida jeje.

La verdad es que con la libreria de Igor todo es mas facil, yo intentaria comprar su brick porque te hara la vida mas facil. alguna forma tiene que haber,no? globalización...ya claro ! =(

Go Up