Añadir I/O a arduino

Muy buenas,

Tengo una duda sobre como añadir entradas/salidas a Arduino.
Quiero probar lo siguiente:

  • Añadir entradas digitales
  • Añadir salidas digitales
  • Añadir salidas PWM
  • Añadir entradas analógicas

No hace falta hacerlo todo con el mismo chip.

He visto que para hacer estos se usan multiplexores/demultiplexores, pero no entiendo muy bien su funcionamiento:

  • Cuando se escribe una salida digital, el valor permanece escrito mientras se realizan otras operaciones??? (Es decir es bi-estable?)
    A mi me interesa que sea bi-estable.

Que chip me recomendarias?
Algún tutorial?

Para que necesitas mas I/O? opciones fáciles hay como usar un Arduino Mega o simplemente comprar otro atmega368 (por 2 usd ya tienes duplicadas todas las patas del arduino, sólo lo energizas, conectas rx/tx y usas el oscilador interno de 8 mhz)

Gracias por responder eried.

Primero lo quería porque nunca había hecho multiplexación, y como quiero aprender lo mejor es practicarlo.
La idea no obstante es montar mi propio arduino partiendo de un chip Atmega 1284p, pues tiene mucha más RAM y flash que el 368.

Lo que me dices de conectar otro Atmega, como se hace? He hecho alguna práctica de comunicación entre dos Mega con los puertos RX/TX, pero era un poco lento y había que configurar el puerto de modo que pasaba a esperar recibir datos.
Yo lo que necesito es conectar un panel de control que tiene 26 botones (26 inputs), 4 outputs a motores paso a paso, y 31 outputs más generales (luces de los botones, etc.). Aparte de 4 entradas analógicas.
Aparte de una pantalla LCD en paralelo para la que necesito 8 outputs digitales.

Por lo tanto lo único que me "cabe" es un mega, pero soldar el chip del mega "a pulso" es muy difícil, no me veo capaz. A parte después de armar toda la placa, es mucho más fácil sustituir el chip del 1284p puesto en zócalo por si algo se estropea.

¿Para que necesitas tanta memoria? no será mejor optimizar el código?

O quizas migrar a otra plataforma, como algo que corra linux embedded, netduino o algo así?

Estos links te ayudaran.

http://www.arduino.cc/es/Tutorial/ShiftOut
http://www.arduino.cc/playground/Code/I2CPortExpander8574
http://code.google.com/p/i2c-adc-ads7828/
http://www.arduino.cc/playground/learning/TLC5940

podes usar el pca9555 que te da 16 entras o salidas como las combines, y por bus podes tener hasta 4 de estos y se maneja por i2c.
Podes pedir muestra a Texas Instrument.
Tiene una linea de interrupcion que te avisa de cambios en las entradas para atenerlo antes que otro

flico:
Estos links te ayudaran.

http://www.arduino.cc/es/Tutorial/ShiftOut
Arduino Playground - I2CPortExpander8574
Google Code Archive - Long-term storage for Google Code Project Hosting.
Arduino Playground - HomePage

Gracias, el lunes me pongo a ello.

maxid:
podes usar el pca9555 que te da 16 entras o salidas como las combines, y por bus podes tener hasta 4 de estos y se maneja por i2c.
Podes pedir muestra a Texas Instrument.
Tiene una linea de interrupcion que te avisa de cambios en las entradas para atenerlo antes que otro

Generalmente compro todo el material a RS, y veo que la ref. que me indicas no está en stock, puedo usar http://es.rs-online.com/web/p/expansores-e-s/6811143/ en sustitución???

si se puede, hacen los mismo, pero lei aca en el foro que es mas facil de manejar los pca o pcf de texas o nxp.
Tambien podes usar el pcf8575.

Puedes usar un MCP23016 sin problemas.

Puedes usar Multiplexores para multiplicar las entradas tanto analógicas como las digitales pero eso sí , se ha de tener en cuenta el implementar un reloj externo que este en sincronismo con el ciclo del Programa, para que sincronice ambos. Es decir, si el ciclo de lectura de una entrada por programa es de 20 Ms por ejemplo, debemos samplear varias entradas en este ciclo , digamos que el multiplexor nos envía un barrido de 8 entradas hacia un solo `pin de entrada del Atmega, por decirlo de una manera más grafica seria como enviar 8 bits en serie hacia una sola entrada del Atmega, y por programa, debemos de samplear cada bit en sincronismo con el reloj externo. Así se leen estas 8 entradas en una tabla de tiempos
En el caso de multiplexar las salidas el tema se complica bastante ya que se utilizan laths que “memorizan “ durante un tiempo las tensiones de salida, por lo tanto, la sincronización con el reloj externo depende del ciclo de latencia de cada laths

Espero que te pueda ser de utilidad. Un saludo cordial.

Estamos experimentano con:

Multiplexores:
Salidas: SN74HC595N y TPIC6B595N, aunque supongo que necesitaremos si o si un IC de transistor darlington para alimentar a 24Vdc las bobinas o reles.
Entradas: Analógicas: CD74HC4067EE4, Digitales: ¿?

Bus I2C:

  • Para salida a LCD alfanumerico 40x4: PCF8574AP
  • Para entradas/Salidas: MCP23016 (Creo que este IC tiene latch para las salidas y Interrupiones para las entradas, así que nos valdría tanto para Entradas como para salidas, ¿me equivoco?)

Bus SPI:

  • Para entradas/Salidas: MCP23018 (Creo que este IC tiene latch para las salidas y Interrupiones para las entradas, así que nos valdría tanto para Entradas como para salidas, ¿me equivoco?)

Con el sistema de buses utilizaremos las interrupciones que generaran la lectura de las entradas. Las salidas las escribiremos según nos convenga o una vez por cada loop, habrá que ver... Quizá exista algún método más óptimo... no he trabajado nunca con buses diferentes al RS485 y CAN.

Como Multiplexor de entradas Analogicas podrias utilizar el modelo LF11508 ( 8 entradas analogicas controladas por 3 bits de datos )
Como MUltiplexoor de salidas Digitales puedes usar o bien el
74150
o bien el 4051 ( CMOS en este caso ) este ultimo consta de 16 entradas digitales multiplexadas
Tiene una única salida invertida w (pin 10).
Posee cuatro entradas selectoras de datos de A a D (pin 15 al 11).
Tiene una entrada de habilitación denominada STROBE que se considera como un conmutador ON-OFF.

Como Drivers de salida para el control de Potencia podrias utilizar el integrado ULN2804 Driver de salia de 500 mA por salida, 8 salidas con transistor Darlington integrado en el chip.
eso si un consejo, si en el Proyecto se ha de mantener las 8 salidas a nivel alto durante periodos largos, tenemos que implementar un buen disipador sobre el chip ya que el consumo es de 500 mA por 8 salidas = 4 Amperios en DC
Pero por lo general la carga asociada a la salida no suele consumir a lo sumo 50 mA en la exitacion.

Gracias manumoli.

He estado mirando las pilas de litio de 5Vdc para la FA en RS, y las que he encontrado son muy caras. Sabes donde puedo encontrar alguna para PCB?
OJO: Tiene que tener potencia suficiente para alimentar a todos los IC de 5Vdc, calculo unos 10 o 15, que supongo no es problema pues no consumen mucho y los transistores van conectados ya a 24Vdc.

Puedes consultar en DIOTRONIK hay un modelo mas economico sale por 6 euros pero es de solo 4,8 V
Mira el catalogo de DIOTRONIK
4/60DK BATERIA 4.8V 60MAH de Baterias de Ion-Litio en Diotronik
Por lo que veo proporciona 60 mAH es mas que suficiente dado el consumo de los CMOS que en reposo es de tan solo 40 microamperios