Ayuda con 2x 74hc595 + placa 8 reles

Buenas gente!! Pues en vista del éxito con mi pequeño proyecto de controlador de acuario y despues de estar funcionando durante varios meses continuadamente sin problemas estoy pensando en ampliarlo.

Para ello estoy montando 2 x 74hc595 para ampliar las salidas con una placa de reles.

Estoy revisando el manual de Shiftout (en ingles) y no me queda muy claro porque veo en el codigo que siempre que va a cambiar algun valor del registro hace con un reset (todo OFF) para luego escribir el nuevo valor y eso no me vale.

void registerWrite(int whichPin, int whichState) { // funcion // the bits you want to send. Use an unsigned int, // so you can use all 16 bits: unsigned int bitsToSend = 0;

// turn off the output so the pins don't light up //resetea todos los pines?? // while you're shifting bits: digitalWrite(latchPin, LOW);

Es muy probable que este equivocado , por eso pido vuestra ayuda. Lo que quiero es poder poner HIGH o LOW en cada una de las salidas, algo asi como "digitalwrite , 1, Low" desde el 1 al 16.

Muchas gracias gente!! ;) Cuando esto lo tenga funcionando me pondre con un controlador ethernet para ver si puedo pasar informacion y actuar via WEB. :-?

con ese integrado no te queda mas remedio que hacerlo asi, es un registro de desplazamiento como bien sabes y para encender una salida tiene que pasar el estado por el anterior. Creo recordar que en la familia ttl no hay opcion de hacer lo que necesitas con un integrado.

Pero se me ocurre lo siguiente, el cambio es muy rapido, puede ser que el rele ni se entere que ha habido un refresco de estado, si no puede ser buena idea ponerle un condensador entre las patitas del rele para que aguante momentaneamente el estado alto en el rele mientras la actualizacion.

Bufff pues vaya askitin!! jejeje. Tendre que probar lo del los condensadores porque no creo que sea bueno para los motores y luces esos cambios de on-off por muy cortos que sean.

Por otro lado, cuando yo cmabie de estado algun rele tengo que indicar como se deben quedar cada una de las 8 salidas o puedo solo indicar el cambio de estado de 1 y el resto seguir como estaban?¿?¿

Gracias.

Si son reles mecánicos ni se enterarían ya que necesitan unos pocos milisegundos para cambiar de estado (aunque para estar 100% seguro habría que probarlo), si son estáticos ya sería un problema.

De todas maneras, existen dispositivos I2C que expanden las salidas (ej. 9355, 9555 de Texas Instruments) y si no necesitas una velocidad muy alta, son una muy buena opción.

Un saludo

Pues velocidad no necesito. El tema es que en mi proyecto necesto que las salidas sean independientes ya que depende de la hora del día y de algunos sensores pueden estar en un estado u en otro, por lo que si se activa un sensor solo debo actuar un rele (y dependiendo de la hora del dia el resto deben quedarse On u Off, y si cada vez que tuviera que cambiar un rele de estado tuviera que ver todas las condiciones para ver como deben quedar el resto de reles sería una locura!!) ;D

Estoy buscando info sobre IC2 (que ya utilizo varios sensores de teperatura que se comunican de este modo) , pero no encuentro ningun ejemplo del 9355 / 9555.

Sabes de algún ejemplo por la WEb con arduino y los 9555?

Por cierto que tal utlizando Expansor I2C PCF8575. ??? Algun ejemplo??

Gracias!! 8-)

Pues poniendo 'arduino i2c' en google, sale exactamente la página de la que hablo, jejeje, esta muy muy bien explicado todo, aunque en inglés. http://www.neufeld.newton.ks.us/electronics/?p=241

Las operaciones las vas a tener que realizar igual, lo único que cambia el 9555 con el 75HC595 es que te mete el valor a la vez en vez de haciendo shifting. Para saber como quedan los reles y que valor mandar, tienes que tener guardado en memoria el estado de los relés y aplicar operaciones de bit (creo que en la página de referencia de arduino los llama 'bitwise operations' y si no pregunta o al amigo google)

También ten en cuenta que no pueden haber muchos metros de cable desde el arduino hasta el dispositivo I2C

Un saludo

Buenas!! Esa página es una de las muuuchas que habia encontrado pero la verdad es que no me aclara mucho.

El tema de tener que reescribir todas las salidas cada vez que tenga que cambiar el estado de una no me convence.

Estoy tratando de encontrar la manera de ampliar puertos pero que se pueda trabajar con ellos de manera independiente...

Por ahora he encontrado dos posibilidades. Conectar otro arduino y manejarlo por I2C desde el principal....

Por otro lado este expansor, pero he pedido a la tienda que me confirme si sirve como puertos independientes

http://www.bricogeek.com/shop/198-expansor-i2c-pcf8575.html

Un saludo!!

Los IC que te he dicho hacen lo mismo que el que acabas de decir. Pues lo de reescribir todo de algo en electrónica es el pan de cada día y es totalmente normal y por I2C, como no te crees un protocolo con otro Arduino/microcontrolador pocas opciones más vas a tener.

Pues en esa página es donde aprendí I2C ;D

Muchas gracias por tu ayuda chivi!!! Creo que finalmente voy a poner otro arduino en el proyecto. De esta manera voy a dividir todas las tareas en 2 grupos y trabajara de manera independiente. Se que es la opción "mas facilona" pero no me atrevo con el shift out...

Salu2

Pues es la más difícil :smiley:

Si no te atreves con el shiftout para eso están las IO por I2C, que le mandas los valores de la salida y el se ocupa de cambiar las que hagan falta.
En cambio si metes otro Arduino, tienes que programar la parte de esclavo, crear el protocolo e interpretar los datos enviados para cambiar las salidas, cuando todo eso ya lo hace cualquiera de los chips ya hablados y por muchísimo menos dinero.
Pero si te quieres hacerlo con otro Arduino, pues adelante!

Un saludo

Vaya..... Chiva,no quiero abusar de tus conocimientos, pero la verdad es que a mi me gusta aprender y de echo hace unos meses no tenia ni idea de electronica (aun no se ni un 1%) pero con esto de arduino y leyendo leyendo me hice un controlador de acuario con su pantalla lcd, reles, sonda de temp y niveles de agua etc etc...

El caso es que quiero segir haciendo mejoras y me encuentro con esta dificultad y no se salir de ella...

He estado revisando bastante info sobre el I2C pero no llego a encontrar un codigo que haga lo que necesito o bien no los entientendo 100% , por esto me da miedo.

Hasta ahora con arduino era muy facil, digitalread.... digital wirte... y poco mas jejeje.

Si tu me echaras una mano con el I2c y por ejemplo el pcf8575.... Basicamente lo que necesito es poder controlar independientemente 8 reles y leer 3 sondas analogicas (funcionan como interruptores) en plan, si se activa esta sonda apaga estos 2 reles, si son las 21.00h apaga este rele, etc etc....

Gracias por tu tiempo.

Seguro que chiva te ayuda. Somos tantos los que envidiamos sus conocimientos....

Yo hace algun tipmpo que sigo algunos de sus posts y me da envidia (sana), jejejeje

En el código fuente de ejeplo que hay en la página que te he pasado, está la funión gpio_write que con darle la dirección I2C y el valor de las salidas, se ocupa de mandarlo. http://www2.neufeld.newton.ks.us/files/electronics/arduino/i2c_gpio.pde

De todas maneras, no estaría mal que te hicieras con un uno para ir probando código y te vayas haciendo con el manejo.

Casualmente estoy realizando un proyecto para aprender a manejar dispositivos I2C sin tener que programar nada, si no que le vas enviando comandos al Arduino y el crea las órdenes I2C al vuelo. Por lo que la fase de pruebas no es tan desesperante con tanto programar, subir al Arduino, probar, fallo, corregir, subir al Arduino, probar, fallo, corregir, ... http://code.google.com/p/i2c-wushu/ http://wiki.kungfulabs.com/arduino/i2c-wushu

Tienes un ejemplo en la página del proyecto, asi como conectarte al Arduino para enviar los comandos

Un saludo

Muchas gracias!!

Me voy a hacer con uno y voy adejarme los sesos!! jajaja.

Ya ire preguntando cuando me quede atascado!!

Gracias! ;)