|
|
|
|
|
|
Memorias EEPROM I2C 24CXX (2) |
|
Comenzando a comunicar
La condición de START o Inicio ocurre únicamente en la transición de un
estado ALTO a un estado BAJO en la línea SDA mientras la línea SCL se
encuentre en un nivel ALTO. En cambio, la transición de un estado BAJO a
un estado ALTO en la línea SDA, mientras la línea SCL se encuentre en un
nivel ALTO, indicará una condición de STOP o Parada. Las condiciones de
START y STOP son siempre generadas por el dispositivo que asuma la
condición de Master dentro del bus.
El bus se considerará ocupado después de una situación de START y pasará
a estar nuevamente libre cierto tiempo después de la transmisión de la
condición de STOP. Este “cierto tiempo” será determinado por el Master y
vendrá especificado en la hoja de datos del mismo. |
|
|
|
|
En Proton debemos indicarle al programa y/o al microcontrolador cuáles
son los pines que cumplirán las funciones de SDA y SCL, porque pueden
existir desarrollos en que estemos trabajando con un dispositivo que no
posea un módulo SSP nativo (Synchronous Serial Port). En este caso, no
tendremos pines dedicados (por hardware) a tal fin en el
microcontrolador y debemos indicarle al sistema mediante instrucciones
de programa, que pines cumplirán la función de interconexión al Bus I2C.
Esto se realiza al comienzo del programa antes de la declaración de
variables y se formaliza mediante un comando llamado DECLARE,
quedándonos la secuencia de la siguiente forma: |
Transición de SDA (H a L) para generar
las condiciones de START y STOP |
|
Con el monitor cardíaco que te
presentamos puedes controlar, escuchar y ver tu ritmo cardíaco. Algo más
que un interesante proyecto. No te lo pierdas.
Averiguar el estado de un capacitor ya
no será privilegio de sólo algunos profesionales.
Microcontroladores - PIC
No te pierdas este nuevo espacio donde hablamos de ... más Electrónica
|
DECLARE SDA_PIN PORTB.0
DECLARE SCL_PIN PORTB.1
En el ejemplo propuesto, hemos ordenado que SDA sea el pin 0 del puerto
B, mientras que SCL sea el pin 1 del mismo puerto. Esta aplicación es
válida para cualquier puerto del microcontrolador mientras esté
configurado en modo digital y se debe tener en cuenta que si no se
incluyen estas directivas al inicio del programa, por defecto se
asignarán los pines PORTA.0 para SDA y PORTA.1 para SCL.
Otra de las cosas que debemos indicarle a nuestro sistema durante el
desarrollo es la velocidad a la que intercambiará datos el bus ya que la
mayoría de los dispositivos actuales puede realizarlo a 400Khz o a
100Khz. Si bien ya existen circuitos integrados capaces de trabajar a
1Mhz también nos encontramos en la actualidad con el contraste de
memorias EEPROM que no pueden intercambiar datos a más de 100Khz. Por lo
tanto, si optamos por utilizar la frecuencia mínima, incluiremos el
siguiente comando: DECLARE SLOW_BUS=ON
Luego de esto, ya estamos listos para “abrir” el diálogo dentro del bus
y lo haremos con el sencillo comando: BSTART
De esta forma, el bus ya habrá sido abierto por nuestro microcontrolador
asignándose éste la función de Master y pasando a estar todo
listo para la transferencia de datos hacia el Slave que el
microcontrolador decida, transmitiendo al bus la dirección pertinente.
Para leer datos, en nuestro caso alojados en una memoria, lo haremos de
la siguiente forma: BUSIN Control, Dirección, [Variable]
La sintaxis expresada nos indica que el Master (nuestro
microcontrolador) recibirá (BUSIN) un dato, el que colocará
dentro de una Variable luego de haberlo sacado de uno de los
dispositivos “colgados” del Bus I2C. El circuito a quién desea extraer
el dato le transmite a través de la palabra de Control que va a
extraer datos de él, y que dicho dato se encuentra en la Dirección
apuntada. La palabra Control posee dos informaciones importantes a
destacar que son el nombre que posee nuestro dispositivo remoto dentro
del Bus y la instrucción acerca de que vamos a leer en él. Si por el
contrario lo que desea hacer el sistema es escribir un dato en el
dispositivo Slave seleccionado, lo hará mediante la siguiente
forma: BUSOUT Control, Dirección, [Variable]
Con una sintaxis muy similar al caso anterior, el Master
transmitirá (BUSOUT) un dato, el que tomará de una Variable,
y lo grabará en uno de los dispositivos conectados al bus y seleccionado
con la palabra de Control. En esta palabra se indicará a cuál de
todos los dispositivos le hablará, indicándole que grabará en él y que a
este proceso lo hará en una Dirección definida dentro del
programa principal. Cabe agregar en este punto que Proton y la mayoría
de los fabricantes de memorias recomiendan efectuar una rutina de demora
o espera luego de haber grabado un dato a través de BUSOUT, para
asegurar la grabación del dato, la que se efectiviza mediante la
expresión: DELAYMS 10 , indicándonos con esto que efectuará un
retardo o demora (Delay) de 10 milisegundos. Luego, sólo nos queda
“cerrar” el bus y lo haremos con la instrucción: BUSTOP
Eso es todo. Ya tenemos la forma de abrir el bus, de leer o de
grabar en un dispositivo Slave y de cerrar nuevamente el bus. Es
momento de saber cómo manejar la palabra de Control y la
Dirección de lectura/escritura.
Organización Interna de las Memorias
No todas las memorias EEPROM I2C se direccionan ni controlan de la misma
forma. Por lo tanto, haremos un breve resumen de los datos más
relevantes a tener en cuenta al momento de emplear la palabra Control
dentro de los comandos BUSIN y BUSOUT.
Palabra o Byte de Control
La palabra o Byte de Control, nos indicará la dirección que posee la
memoria dentro del bus y si vamos a leer o a escribir en ella.
24C00 = 1|0|1|0|X|X|X|R/W
R/W significa Read o Write, que en español equivale a Leer o Escribir
respectivamente según lo que decidamos hacer con la memoria. Si vamos a
leer la memoria (Read) este bit adoptará el valor 1. En cambio, al
grabar un dato en la misma (Write), el valor será 0. Por su parte X,
significa que el valor que adopte en estas posiciones no tiene
relevancia, por lo que podemos adoptar para este lugar, un cero o un uno
que el resultado será el mismo. Como dato adicional podemos mencionar
que la memoria 24C00 posee una capacidad de 128 Bits, organizada en una
sola página con 16 Bytes de 8 Bits
24C01/24C02/24C04 = 1|0|1|0|A2|A1|A0|R/W
Para este grupo de memorias tenemos la misma dirección en los cuatro
bits iniciales (1010) que en el caso anterior, lo mismo para el bit
final de R/W, pero encontramos un significativo cambio en las posiciones
A0, A1 y A2 que coinciden con los pines uno, dos y tres respectivamente,
según las hojas de datos de las memorias.
|
|
|
Los pines A2, A1 y A0 se utilizan para
seleccionar el chip al que direccionaremos la transferencia de datos. |
|
Con estos tres bits, podemos direccionar hasta ocho memorias conectadas
al mismo bus, trabajo que puede realizar cómodamente el
microcontrolador. La única que se diferencia de este grupo es la
24C04 que debe tener siempre conectado A0 a GND o a VCC, pudiendo
por lo tanto, direccionarse sólo cuatro unidades de la misma a través de
A1 y A2. A0, en este caso, servirá para direccionar el “puntero” de
escritura o lectura, hacia la primer página de 256 Bytes o hacia la
segunda.
Aquí empezaremos a ver ya, cómo la estructura interna de estas memorias
está organizada en “páginas”. Por último, destacamos que en este grupo
de memorias encontramos la siguiente característica: sumarse a otras
iguales para incrementar la capacidad de almacenamiento.
Por su parte la memoria 24C02 posee una página de 256 Bytes y la 24C04
ya posee dos páginas de 256 Bytes cada una, sumando así 512 Bytes de
capacidad. Vemos entonces, que las 24C01 y 24C02 poseen una sola página,
por lo que la palabra de control para ellas será igual a 1010000X,
siendo X el bit que defina la lectura o escritura en la memoria,
mientras que la 24C04 tendrá DOS palabras de control, según la página
donde decidamos trabajar. Esto es, 1010000X para la primer página y
1010001X para la segunda.
24C08/24C16 = 1|01|0|B2|B1|B0|R/W
En el caso de estos modelos, repetimos los primeros cuatro bits
iniciales que identifican a las memorias EEPROM seriales (1010) y el
último bit R/W, mientras que nos encontramos con la terminología B2, B1
y B0 dentro de la palabra de control en estos modelos.
|
|
Aprendé a
reparar DVD, cambiar su pantalla de inicio, reparar su firmware y
a conocer más de ésta nueva unidad multimedia del hogar
El Tutorial de Televisión que ha ayudado a miles de técnicos de toda América a aprender cada
día más del oficio |
Tabla que nos muestra como
seleccionar las páginas en memorias 24C08 y 24C16
|
|
En el caso de estas dos memorias, no podremos colocar en el bus múltiple
cantidad de ellas sino que sólo tendremos posibilidad de colocar una
sola, a diferencia de las anteriores vistas hasta aquí. Esto es debido a
que a pesar de poseer la misma disposición de pines que los modelos
anteriores, A2, A1 y A0 no poseen conexión interna colocándose
generalmente estos a GND.
Por su parte, B2, B1 y B0 sirven para identificar por software la página
(o bloque) dentro de la memoria. Es decir, que para la 24C08 que posee
una disposición de cuatro páginas de 256 Bytes (4 X 256 X 8 bits = 1
KByte = 8 Kbit); mientras que la 24C16, dispondrá de 8 páginas de 256
Bytes de 8 bits lo que equivale a un total de 2KByte que es lo mismo que
16Kbit. Por lo tanto, razonando lo mencionado y analizando el cuadro
superior, vemos que tendremos 4 palabras de control para la 24C08 y 8
Palabras de control para la 24C16: una por cada página de 256 Bytes.
|
|
24C08 y 24C16 son tamaños de memoria
altamente utilizadas en los equipos de TV y DVD para almacenar
información. |
|
|
La palabra Dirección
Habiendo llegado hasta aquí, nos queda resolver solamente la forma en
que estará compuesta esta palabra, la que será usada para decidir el
casillero que ocuparemos con información dentro de la página que
habremos seleccionado con anterioridad. En el caso de la 24C00 teníamos
una página de tan sólo 16 Bytes, por lo que tendremos apenas 16 “filas”
para ubicar Bytes de información. Protón Lite acepta cualquiera de las
tres notaciones para las Palabras de Control y de Dirección,
es decir: Binaria, Decimal o Hexadecimal, por lo que
podemos escribir para facilitar el trabajo, un comando de la siguiente
forma:
BUSIN 161, 8, [Dato]
En el ejemplo mostrado tenemos la palabra de control 161, lo que
equivale a 10100001 en binario y que nos indica que accederemos a
la primer página (página cero) de cualquier memoria de las vistas y que
la citada memoria será leída.
Luego viene el valor 8, que sería 00000100 en binario, lo
que nos indica que se leerá la octava de todas las filas de Bytes que
tenga esta página. Mientras que por último, el dato extraído será
volcado en una variable de tamaño BYTE a la que hemos denominado
“Dato”
Escribir en esta misma dirección sería:
BUSOUT 160, 8, [Otro_Dato]
El último bit de la palabra de control a pasado a ser cero (antes
teníamos 161 y ahora tenemos 160), y el valor a grabar será el que
exista en ese momento dentro de la variable “Otro_Dato”, también
de tamaño BYTE y declarada al inicio del listado del programa.
|
|
|
Programa ejemplo para leer
una EEPROM I2C con Proton |
|
|
Con este sencillo programa de ejemplo podemos leer la primer página de
una memoria EEPROM I2C y colocar en un display LCD los valores leídos
durante medio segundo antes de pasar al próximo valor, hasta leerlos a
todos. Para otras páginas, variaremos la palabra de control según
nuestras necesidades de uso. El ejemplo muestra la utilización de un
PIC16F84A y la declaración de los pines que se utilizarán como SDA y SCL.
También cabe destacar que se utilizará una baja velocidad de bus y que
el LCD se conecta al puerto por defecto para tal fin, que en este caso
es el B.
De esta forma se pueden guardar una multitud de datos en una memoria
EEPROM I2C y tenerlos siempre listos para su utilización durante el
desarrollo del programa. Además, funciones extras dentro del programa
del microcontrolador nos pueden permitir detectar el corte de la tensión
de alimentación y, mediante el uso de una batería de respaldo o Back-Up,
grabar inmediatamente todas las variables dentro de la memoria para
luego proceder a apagar el sistema de forma automática hasta que se
reponga la energía. Un ejemplo de esta aplicación son los contadores de
fichas de los videojuegos de salón, los flippers y la mayoría de las
máquinas recreativas que trabajan con fichas o monedas. Mientras la
máquina funciona normalmente, la batería de respaldo se mantiene cargada
y al momento de un apagón o de la desconexión para su traslado, la
información se guarda de manera automática para su posterior control.
¿Lo sabías?
Importante: Si lo que encuentras
aquí te resulta útil, ayúdanos a mantener
este sitio. Cualquier donación es bienvenida. Tu apoyo nos
permitirá acceder a nuevos materiales y a montajes más
interesantes y útiles. Gracias por ayudarnos a hacer
Servisystem cada día mejor. Tu ayuda será muy importante
para nosotros. Gracias. |
|
|
|
|
|
|
|
Pagina anterior
// Montajes
|
|
|
|
|