Pages: 1 ... 9 10 [11] 12 13 ... 17   Go Down
Author Topic: CAN BUS: Red de Arduinos  (Read 37415 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Seguimos con el hilo de domotica.
http://arduino.cc/forum/index.php/topic,55012.0.html
Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.... smiley-lol
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


 smiley-wink
« Last Edit: August 13, 2011, 05:02:53 am by Igor R » Logged


0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok Igor R.
Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je,je,je
Lo puedes hacer cómo quieras, pero en un coche no va una ID por sensor.... smiley-wink
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

Logged


0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


smiley-wink
Logged


0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Trabajando en ...

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

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
No he fallado. Acabo de encontrar 10 mil maneras que no funcionan. Thomas Edison
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

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

http://diagnostican.blogspot.com

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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
Logged

Trabajando en ...

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

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

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.


* MCP2515.jpg (157.69 KB, 1417x824 - viewed 16 times.)
Logged

Trabajando en ...

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

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
No he fallado. Acabo de encontrar 10 mil maneras que no funcionan. Thomas Edison
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias por la información flico!!

Voy a mirarlo a fondo.
Logged

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

http://diagnostican.blogspot.com

Venezuela
Offline Offline
Full Member
***
Karma: 0
Posts: 124
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.


* shieldfisicocanbusconar.jpg (46.45 KB, 1142x812 - viewed 17 times.)
« Last Edit: August 31, 2011, 04:58:31 am by ASTROCAR » Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ! smiley-cry
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Pages: 1 ... 9 10 [11] 12 13 ... 17   Go Up
Jump to: