jueves, 24 de mayo de 2012

Proyecto Arduino

Proyecto Arduino - Casa Inteligente (Iluminación)





Como ya la mayoría sabe, mi proyecto de Arduino trata sobre un módulo de la casa inteligente, en específico, la iluminación.

A principio de semestre yo tenía la idea de controlar la iluminación por medio de distintos medios, por ejemplo, se me había ocurrido controlar las luces por medio de aplausos, o también por medio de la voz. Pero al final, para combinar el proyecto de Cómputo Integrado con el de Dispositivos Móviles decidí en controlar la iluminación desde un móvil con Android, además esa idea ya la tenía junto con mis compañeros de equipo del semestre pasado, de hecho el trabajo de móviles (la aplicación), es decir, la parte del control de este proyecto la realizamos entre todos los elementos del equipo del semestre pasado.


Bueno, como ya había comentado en posts anteriores, mi proyecto básicamente se compone de 2 circuitos fundamentales, el circuito de control (Arduino) y el circuito de potencia (el que controla las altas tensiones de 110v).



Herramientas utilizadas



  • Simulador de Android
  • Eclipse
  • IDE de Arduino
  • CIRCAD (Software para diseño de PCB's)
  • Java (Comunicación por medio de sockets con la aplicación móvil)
  • Arduino UNO
  • Tablet con Android para las pruebas en dispositivo


Simulador de Android 




Antes de pasar la aplicación y probarla en un dispositivo móvil, iba realizando las pruebas en el simulador.


 
IDE de Arduino UNO


Esta es la primera parte del código que está almacenado en el microcontrolador de Arduino, lo que hicé fue declarar los pines 12 y 13 como salidas, para simular focos en el 1er 2do piso de una casa, aunque los ffocos los puse uno seguido de otro :p. Pero esa es la idea.

También establezco la velocidad de transferencia de los datos a 9600 baudios





En la siguiente imagen lo que hago es leer los datos que envía la PC (a la PC le llegan del móvil), luego comparar para obtener la salida deseada






CIRCAD

El siguiente es el diseño que realicé del circuito de potencia, en el extremo izquierdo se encuentran las entradas del circuito (donde se conectan los pines de salida de Arduino). En el extremo derecho se encuentran pads para meter un molex, en el molex podremos conectar las salidas para los focos (voltaje de 110), es por eso que puse esas líneas más gruesas, ya que por ahí cruzará alta tensión





Java

Utilicé una sola función para envíar mensajes. Toda esta comunicación entre Arduino y Java (PC) la pude realizar gracias a la librería Rxtx de Java, la instalación un código los he explicado en un post pasado que trata sobre la librería Rxtx.





Después ya cuando llegan los Strings desde la aplicación móvil, los comparo en java y dependiendo de lo recibido yo decido que parametro pasarle a Arduino mediante mi función sendMessage, como pueden ver en las imágenes de arriba, programé el arduino para que cuando reciba un "1" la luz se encienda, haciendo lo contrario para el parámetro "2" (ver la imagen siguiente).
  








Arduino UNO



 



Arduino UNO facilitó mucho la comunicación entre el microcontrolador y Java (PC), ya que si no lo hubiera usado, la programación se extendería demasiado, también hubiera sido más complejo aunque importara librerías.
 
 
A continuación les dejo con unas imágenes que tomé del proyecto finalizado:

















En un futuro subiré los códigos realizados, el archivo de PCB creado en CIRCAD y un video del proyecto en acción :)



Saludos!



miércoles, 23 de mayo de 2012

Módulos de Arduino

Shields de Arduino



Los shields son placas que se colocan encima de la placa Arduino y que amplían una nueva función para que sea controlada desde Arduino, para controlar diferentes aparatos, adquirir datos para después procesarlos por la PC, etc.

Algunos compañeros de clase usaron algunos shields, la mayoría usaron el shield de Xbee. 

En esta entrada haré mención de algunos shields que se pueden montar a una placa Arduino.
.


Xbee Shield

 

Introducción

 

La Xbee shield permite a una placa Arduino comunicarse de forma inalámbrica usando Zigbee. Está basada en el módulo Xbee de MaxStream. El módulo puede comunicarse hasta 100ft (30 metros) en interior o 300ft (90 metros) al aire libre (en visión directa). Puede ser usado como reemplazo del puerto serie/usb o puedes ponerlo en modo de comandos y configurarlo para una variedad de opciones de redes broadcast o malladas. La shield tiene pistas desde cada pin del Xbee hasta un orificio de soldar. También provee conectores hembra para usar los pines digitales desde 2 hasta 7 y las entradas analógicas, las cuales están cubiertas por la shield (los pines digitales de 8 a 13 no están cubiertos por la placa, así que puedes usar los conectores de la placa directamente).
La Xbee shiel fue creada en colaboración con Libelium, quienes la desarrollaron para usarlo en sus SquidBee motes (usados para crear redes de sensores).

 

Configuración de los jumpers



La Xbee shield tiene dos jumpers (las pequeñas fundas de plásticos que están sobre los tres pines etiquetados como Xbee/USB). Estos determinan como se conecta la comunicación serie del Xbee entre el microcontrolador (Atmega8 o ATmega168) y el chip serie FTDI de la placa Arduino.
Con los jumpers en la posición Xbee (e.g. en los dos pines más cercanos al interior de la placa), el pin DOUT de el módulo Xbee está conectado al pin RX del microcontrolador; y el pin DIN está conectado a TX. Notar que los pines RX y TX del microcontrolador están todavía conectados a los pines TX y RX (respectivamente) del chip FTDI - los datos enviados desde el microcontrolador serán transmitidos al ordenador vía USB y a la vez enviados de forma inalámbrica por el módulo Xbee. El microcontrolador, sin embargo, solo será capaz de recibir datos desde el módulo Xbee, no desde el USB del ordenador.
Con los jumpers en la posición USB (e.g. en los dos pines más cercanos al borde de la placa), el pin DOUT del módulo Xbee está conectado al pin RX del pin del chip FTDI, y el DIN del módulo Xbee está conectado al pin TX del el chip FTDI. Esto significa que el módulo Xbee puede comunicarse directamente con el ordenador - sin embargo, esto solo funciona si el microcontrolador ha sido quitado de la placa Arduino. Si el microcontrolador se deja en la placa Arduino, solo será capaz de comunicarse con el ordenador vía USB, pero ni el ordenador ni el microcontrolador podrán comunicarse con el módulo Xbee.



Redes



La Arduino XBee shield puede ser usada con diferentes módulos XBee. Las instrucciones a continuación son para los módulos XBee 802.15.4.



Direccionamiento



Hay múltiples parámetros que necesitan ser configurados correctamente para que dos módulos puedan comunicarse entre ellos (de todos modos con la configuración por defecto, todos los módulos deberían ser capaces de hablar unos con otros). Necesitan estar en la misma red, definida por el parámetro ID (ver "Configuración" a continuación para más detalles sobre los parámetros). Los módulos necesitan estar en el mismo canal, definido por el parámetro CH. Finalmente, la dirección de destino de un módulo (parámetros DH y DL) determina que módulo en esa red y canal recibirá los datos transmitidos. Esto puede suceder de las siguientes formas:
  • Si el DH de un módulo es 0 y su DL es menor de 0xFFF (e.g. 16 bits), los datos transmitidos por ese módulo serán recibidos por cualquier módulo cuyos 16 bits de dirección del parámetro MY sea igual al DL.
  • Si el DH es 0 y el DL es igual a 0xFFFF, las transmisiones del módulo serán recibidas por todos los módulos.
  • Si el DH no es cero o el DL es mayor de 0xFFFF, la transmisión solo será recibida por el módulo cuyo número de serie sea igual a la dirección de destino del módulo transmisor (e.g. cuyos SH es igual al DH del módulo transmisor y cuyo SL sea igual a su DL).
De nuevo, esta correspondencia de direcciones solo sucederá entre módulos en la misma red y canal. Si dos módulos están en diferentes redes o canales, no podrán comunicarse sea cual sea sus direcciones. 


Estos son unos cuantos comandos útiles para configurar el módulo Xbee (necesitarás anteponer AT). 


Comando       Descripción
RE      Restaura los valores por defecto (notar      que como el parámetro cambia, esto no es permanente a no ser que esté seguido por el comando WR).
WR Escribe un nuevo valor para un parámetro configurado a la memoria no volátil (larga-duración). De otro modo, solo durarían hasta que el módulo sea desconectado de la corriente.
CN Sale del modo de comandos. (Si no mandas ningún comando a él módulo durante unos pocos segundos, el modo de comandos saldrá tras un tiempo incluso sin el comando CN).



Arduino Ethernet Shield

 

 
 
 



Este shield también fue usado por algunos compañeros de clase de Cómputo Integrado y Dispositivos Móviles.

La Arduino Ethernet Shield permite a una placa Arduino conectarse a internet. Está basada en el chip ethernet Wiznet W5100. El Wiznet W5100 provee de una pila de red IP capaz de TCP y UDP. Soporta hasta cuatro conexiones de sockets simultáneas. Usa la librería Ethernet para escribir programas que se conecten a internet usando la shield.



La ethernet shield dispone de unos conectores que permiten conectar a su vez otras placas encima y apilarlas sobre la placa Arduino.
Arduino usa los pines digitales 10, 11, 12, y 13 (SPI) para comunicarse con el W5100 en la ethernet shield. Estos pines no pueden ser usados para e/s genéricas.
La shield provee un conectore ethernet estándar RJ45
El botón de reset en la shield resetea ambos, el W5100 y la placa Arduino.
La shield contiene un número de LEDs para información: 

  • PWR: indica que la placa y la shield están alimentadas

  • LINK: indica la presencia de un enlace de red y parpadea cuando la shield envía o recibe datos

  • FULLD: indica que la conexión de red es full duplex

  • 100M: indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una de 10Mb/s)

  • RX: parpadea cuando la shield recibe datos

  • TX: parpadea cuando la shield envía datos

  • COLL: parpadea cuando se detectan colisiones en la red

El jumper soldado marcado como "INT" puede ser conectado para permitir a la placa Arduino recibir notificaciones de eventos por interrupción desde el W5100, pero esto no está soportado por la librería Ethernet. El jumper conecta el pin INT del W5100 al pin digital 2 de Arduino.


Bueno, como ya algunos saben, yo estuve trabajando en mi proyecto de la casa inteligente (módulo de ilumincación), así que intenté hacer mi propio módulo para Arduino :p.

Puse a mi tarjeta electrónica pines para poder ensamblarla sobre el Arduino, pero debido a las características de mi tarjeta no quise montarla para evitar cortos circuitos o que la alta tensión de mi tarjeta (110v) pase al Arduino y se dañe.


Les adjunto algunas imágenes de mi módulo, contiene el circuito de potencia para activar los focos que son alimentados con un voltaje de 110v (127v en realidad).

 





El espació donde están conectados los cables que salen del plástico gris es un puente de conexiones similar al de Arduino, terminé poniendo ese puente debido a las características de mi proyecto que comenté anteriormente, si ponía una hilera de pines para ensamblarlo al Arduino corría el riesgo de unir la parte del circuito de potencia con el circuito de control y el alto voltaje dañaría la placa Arduino.







En esta última foto se puede ver la modificación que hice en mi tarjeta para poder comunicarme con Arduino, esos cables verdes (con blanco) y naranjas llevan los estados de switcheo de los focos y también la polarización del circuito de potencia (respectivamente).

Me hubiera gustado ensamblar mi tarjeta sobre Arduino pero corría mucho riesgo debido a las características de mi proyecto antes mencionadas.


 





Saludos!




 

jueves, 17 de mayo de 2012

Comunicación PIC - DB9

Comunicación PIC - DB9 (RS232)


Existen un montón de aplicaciones de los microcontroladores donde es necesario comunicarse con una PC, por nombrar alguna aplicación, podemos decir que existen sistemas de monitoreo donde el microcontrolador está "escuchando" lo que pasa a su alrededor mediante sensores conectados a sus entradas, por ejemplo podría estar tomando como entradas sonidos del exterior o temperaturas, etc, datos que luego se desea que sean procesados por una PC, luego que la PC tome alguna decisión dependiendo de lo que haya reportando el microcontrolados.




Puerto Serie RS232 



 


La forma más común y sencilla de comunicar cualquier dispositivo con un ordenador es a través de su puerto serie que es compatible con el denominado estándar RS232. En una computadora hay puertos serie (en la mayoría de las actuales ya no viene, pero bien se podría usar un USB-Serie) que comúmente se denominan COM1, COM2, COM3, etc.

Los puertos serie son accesibles mediante conectores. La norma RS232 establece 2 tipos de conectores llamados DB25 (25 pines) y DB9 (9 pines) machos y hembras. La norma RS232 se estableció para conectar una PC con um módem, por lo que aparecen muchos pines en los conectores DB25 que en otro tipo de aplicaciones no se utilizan  y en las que es más común utilizar el conector DB9.


Cada uno de los pines del conector RS232 tiene una función específica por la norma. Hay unos terminales por los que se transmiten y reciben datos y otros que controlan el establecimiento, flujo y cierre de la comunicación.



La siguiente imagen muestra el pinout del conector DB9, vean las funciones de cada PIN (clickear sobre la imagen para ampliarla)


 






 
Se puede observar en la pasada imagen que cada pin desempeña una función pero para la comunicación con un microcontrolador es suficiente con 3 líneas. 


  • Linea de transmisión (TxD), pin 3, transmisión de datos

  • Línea de recepción (RxD), pin 2, recepción de datos

  • Pin de masa (SG), pin 5, pin a tierra

Las especificaciones del puerto serie están contenidas en la norma RS232, entre las que se pueden destacar están las siguientes:




El baudio



Un dato importante a tener en cuenta en cualquier comuniación es la velocidad de transmisión, que es la cantidad de información enviada por la línea de transmisión en la unidad de tiempo.


Hay distintas unidades para expresar esta medida, la más utilizada es el Baudio, que es proporcional a los Bits/segundo (bps), definidos como el número de bits de información enviados por un segundo.

La velocidad a la que pueden trabajar los puertos COM de una PC está normalizada a 75, 150, 300, 600, 1200, 2400, 4800, 9600 Baudios. Estos valores son demasiado pequeños para los estándares de hoy en día, pero suficientemente rápidos para bastantes aplicaciones.



Niveles lógicos RS232




Existen requisitos en cuanto a niveles lógicos que debe cumplir una transmisión serie según la norma RS232, en la siguiente imagen se ilustran estos requisitos (gráfica roja):






Lo destacable o más importante en cuanto a requisitos que debe cumplir una transmisión serie según la norma RS232 es:  


  • Los datos se transmiten con lógica negativa, es decir, un voltaje positivo en la conexión representa un 0, mientras que un voltaje negativo representa un 1.

  • Para garantizar un 0 lógico una línea debe mantener un voltaje entre +3 y +15 volts.

  • Del mismo modo para un 1 lógico garantizado debe estar entre los -3 y -15 volts.

  • Los voltajes más usados son +12 volts para el 0 y -12 volts para el 1.

  • Es importante resaltar que cuando un puerto serie no está transmitiendo, mantiene el terminal de transmisión a 1 lógico, a -12 volts normalmente.

  • La banda muerta entre los +3 y -3 volts se conoce como la región de transición donde los niveles lógicos no están definidos. Esto significa que cualquier valor entre los +3 y -3 volts puede interpretarse ambiguamente como 0 ó 1


Si se aumenta la velocidad de transmisión  las señales de datos se vuelven susceptibles a pérdidas de voltaje causadas por la capacidad, resistencia e inductancia del cable. Estas pérdidas son conocidas como efectos de alta frecuencia y aumentan con la longitud del cable.


Estos valores de tensión proporcionan un amplio margen de seguridad que es de gran utilidad  cuando los cables deben pasar por zonas cercanas a elementos que generan interferencia eléctrias: motores, transformadores, equipos de comunicación, etc. Estos elementos unidos a la longitud del cable pueden hacer disminuir la señal hasta en varios voltios, sin que afecte al nivell lógico de la entrada.


 
 
MAX232




Bueno, como ya mencioné anteriormente los niveles lógicos de la transmisión por la norma RS232 son muy distintos a los niveles lógicos del PIC (señal digital convencional).


Aquí surge la pregunta: ¿Cómo vamos a establecer la comunicación entre el PIC y la PC si las salidas de nuestro PIC no cumplen con los niveles lógicos de transmisión de la norma RS232?

Pues la respuesta está en el chip MAX232, este integrado nos permitirá convertir de las señales digitales convencionales del PIC a señales que puedan cumplir con la norma RS232 para una correcta comunicación.







El MAX232 (Maxim) es un circuito integrado utilizado para adaptar los niveles requeridos en una conexión donde interviene un dispositivo que maneja niveles de tensión TTL (nuestro microcontrolador, por ejemplo) y otro capaz de trabajar bajo los parámetros de la norma EIA/TIA 232-E y las V.28/V.24. Expresado en lenguaje de tensiones, los niveles TTL operan entre los 0 y 5Volts y la otra norma, conocida en el mundo técnico como RS-232 (Recommended Standard 232), utiliza tensiones que van desde los -12Volts a los +12Volts. Este circuito integrado el MAX232) está especialmente diseñado para trabajar en equipos que utilicen bajos niveles de tensión (5Volts) y requiere de muy pocos componentes externos para lograr un funcionamiento óptimo.



Conexión Puerto RS232 y PIC





Como ya mencioné con anterioridad para realizar la comunicación con un microcontrolador tan solo se necesitan 3 pines del conector DB9, estas son:


  • Pin de transmisión (TxD)
  • Pin de recepción (RxD)
  • Pin de masa (SG)

La siguiente imagen es un esquema de la conexión para la comunicación entre la PC y el microcontrolador, como mencione anteriormente, las señales digitales del PIC  primero deben ir al MAX232 para convertirlas en señales que cumplan con la norma RS232 luego ya saliendo del MAX232 pueden ir hacia la PC, de igual manera la PC no se comunica directamente con el PIC porque no se "entenderían", es por eso que debe pasar primero la señal por el MAX232, luego de ahí al microcontrolador.







Se pueden encontrar bastantes librerías en la web sobre la comunicación serial PIC-PC para programar el PIC y realizar las pruebas. Es difícil realizar un programa relacionado a este tema desde 0 ya que se trata con temas complejos y de estándares de comunicación, es por eso que estas librerías de comunicación facilitan mucho el trabajo y solo es cuestion de llamar a las subrutinas de esas librerías para que se encargen de todo ese trabajo "sucio", obviamente es necesario incluir esas librerias de comunicación dentro del programa que estamos desarrollando.


Luego de construir el software y el circuito se puede probar la comunicación mediante un programa que levante sesiones seriales. Yo he usado programas como Hyperterminal (en Windows XP) o Secure CRT (en Windows 7) pero si estas trabajando en Ubuntu puedes instalar el programa PuTTY SSH Client, es muy sencillo de manejar y si me ha servido.



Para levantar una sesión serial en Putty SSH Client tan solo tienes que seleccionar la opción Serial de la pantalla de inicio del programa, y elegir las demás opciones como velocidad de transmisión de los datos (9600 baudios). Esta es una captura de pantalla que saqué de mi PC.







Es muy importante que tengas conectado el puerto DB9 a la PC y al MAX232, osea todo listo y conectado a la hora de abrir la sesión serial en Putty SSH Client para evitar problemas de que no encuentra el puerto.


Para los que usan Hyperterminal o Secure CRT el procedimiento es muy similar.
 

Esto es todo!

Saludos!





miércoles, 16 de mayo de 2012

Arquitecturas

Arquitecturas de Microcontroladores



Existen 2 tipos de arquitecturas con las cuales trabajan algunos microcontroladores, es obvio que no se puede manipular, editar o escoger con cual tipo de arquitectura queremos contar en nuestro microcontrolador, este tipo de cosas viene de fábrica y no es posible cambiarla.


Arquitectura Von Neumann





 

Dispone de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control). 






Arquitectura Harvard 





Dispone de dos memorias independientes, una que contiene sólo instrucciones, y otra que contiene sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias, ésta es la estructura para los PIC's.


 
Tradicionalmente los microprocesadores se basan en la estructura de Von Neumann, como la de la figura siguiente, que se caracteriza por disponer de una única memoria principal en la que se almacenan los datos y las instrucciones. A esta memoria se accede a través de un sistema de buses único:

  • Bus de datos
  • Bus de direcciones
  • Bus de control 

 
 
 
 
 
 
 
El modelo Harvard , representado en la figura siguiente, dispone de dos memorias:

  • Memoria de datos
  • Memoria de Programa


Además cada memoria dispone de su respectivo bus, lo que permite, que la CPU pueda acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes éstos pueden tener distintos contenidos en la misma dirección.




 
 
 
 
 
 
 
Saludos!
 
 
 
 

Memoria del programa

Memoria de programa (PIC)
 
El microcontrolador está diseñado para que en su memoria de programa se almacenen todas las instrucciones del programa de control. Ya que el contenido del programa siempre es el mismo, pues este debe estar grabado en forma "permanente".

Existen algunos tipos de memoria adecuados para soportar estas funciones, de las cuales se citan las siguientes:


- ROM con máscara: se graba mediante el uso de máscaras. Sólo es recomendable para series muy grandes debido a su elevado coste.


- EPROM: se graba eléctricamente con un programador controlador por un PC. Disponen de una ventana en la parte superior para someterla a luz ultravioleta, lo que permite su borrado. Puede usarse en fase de diseño, aunque su coste unitario es elevado.


- OTP: su proceso de grabación es similiar al anterior, pero éstas no pueden borrarse. Su bajo coste las hacen idóneas para productos finales.


- EEPROM: también se graba eléctricamente, pero su borrado es mucho más sencillo, ya que también es eléctrico. No se pueden conseguir grandes capacidades y su tiempo de de escritura y su consumo es elevado.

- FLASH: se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar en circuito al igual que las EEPROM, pero que suelen disponer de mayor capacidad que estas últimas.

Son recomendables aplicaciones en las que es necesario modificar el programa a lo largo de la vida del producto. Por sus mejores prestaciones, está sustituyendo a la memoria EEPROM para contener instrucciones.

De esta forma Microchip comercializa dos microcontroladores prácticamente iguales que sólo se diferencian en que la memoria de programa de uno de ellos es tipo EEPROM y la del otro tipo Flash. Se trata del PIC16C84 y el PIC16F84, respectivamente.


En la figura siguiente se observan los tres bloques en los que esta dividido el Mapa de Memoria de programa del PIC, los 8 niveles de stack, los vectores de memoria como el Reset, o el de interrupcion,ademas de cada una de las paginas de la memoria, los vectores El que lleva el control de el uso de la memoria es el PC (Program Counter) de 13 bit capaz de accesar una memoria de 8Kx14 bit.









El Vector de interrupcion es el 0004H, ahi es la parte del programa a donde el micro ira despues de cualquier interrupcion.



Memoria de programa externa


 
En clase comentabamos sobre si había posibilidad de expandir la memoria de programa de los microcontroladores, investigando encontré que se puede conectar una memoria externa para poder realizar el almacenamiento ahí.

Se trata de la memoria 24LC256A fabricada por Microchip.  

El pinout de la memoria es el siguiente:






Esta es una memoria que tiene un tamaño de 32 Kbytes, su estructura está organizada en palabras de 1 byte (8 bits) de longitud, por lo tanto dispondremos en total de 32x8=256 kbits para almacenar información.

La característica principal de esta memoria es que implementa el interfaz I2C para su comunicación serie con otros dispositivos electrónicos.



Protocolo I2C 


El protocolo I2C fue desarrollado por la empresa Philips, ahora llamada NXP, hace ya bastante tiempo impulsado por la necesidad en el mercado de establecer una interfaz que comunicara entre si varios dispositivos electrónicos y que ahorrara el máximo numero de patillas en los componentes, hay mucha información en la red sobre este protocolo por lo que solo voy ha citar a modo de resumen las características que considero mas relevantes acerca de este protocolo. Al final del artículo pondré los enlaces a varias fuentes para el que quiera profundizar en este protocolo de comunicación.



Características básicas del protocolo I2C


  • El bus de comunicación utiliza dos cables. Uno para transmitir los datos (SDA) y otro para la señal de reloj (SCL). Ambas líneas se tienen que conectar a la alimentación (Vcc) a través de resistencias Pull-UP (en el esquema del ejemplo se muestra el conexionado). Además la masa de los componentes que se interconexionan entre si debe de ser común.


  • El protocolo de comunicación es del tipo Maestro-Esclavo, aunque el protocolo permite que haya varios maestros, lo normal es que solo haya uno, el dispositivo que hace de maestro es el que gobierna la comunicación y es el que controla la señal de reloj (SCL). Los dispositivos que hacen de esclavos responden a las peticiones del maestro.



  • Cada dispositivo conectado al bus se identifica por una única dirección, el protocolo admite utilizar 7 ó 10 bits para el direccionamiento, aunque lo normal es que sean siete.


Sería muy buena practica implementar este tipo de memorias externas para almacenar código de nuestros programas (aunque no se ocupe), con fin didáctico.

Les dejo una liga en la que realizan la conexión y comunicación de un PIC con esta memoria, la comunicación la realizan en C, y con el compilador CCS:

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/comunicacion-serie-i2c-entre-pic-y-eeprom-24lc256a.html


También encontré otra página donde realizan la conexión y comunicación de una memoria de esta misma familia, pero con un Arduino, para más detalles pueden visitarla:

http://www.hispavila.com/3ds/atmega/i2c-eeprom.html


Saludos!