RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Lectura-Escritura eeprom con PIC por bus I2C

Este proyecto es un ejemplo de lectura-escritura en una memoria eeprom a través de un pic por bus I2C. En este ejemplo concreto se permite la lectura o escritura de las 10000 primeras posiciones de la eeprom. Al tratarse de un teclado numérico decimal, las direcciones se enviarán en su valor decimal y los datos introducidos serán del 0 al 9, pero podrían tratarse perfectamente de datos hexadecimales ( de 0 a F) si procediesen de otro medio.

Para que el PIC comunique con la memoria eeprom, éste debe “conocer” su dirección ( de la memoria) en el bus I2C. En concreto, para la eeprom empleada en este ejemplo, una M24512, el byte alto de su dirección está fijado por el fabricante como Ah, mientras que el byte bajo se establece por el usuario según la combinación de los niveles lógicos de tensión  en las patillas E0, E1 y E2 además del bit de lectura-escritura que es el de menor peso. Como aquí todas las patillas se han llevado a 0V, (combinación lógica: 0 : 0 : 0 : W=0/R =1) el byte bajo será 0 más el valor del bit de lectura o escritura. Es decir, la dirección I2C de la eeprom será A0h para escribir en ella y A1h para leer.


Esquema lectura escritura eeprom por bus I2C PIC

En los comentarios del programa se puede intuir su funcionamiento.

[+/-] Ver / Ocultar programa completo en C



Para verificar que el funcionamiento es correcto, tal como se muestra en esta simulación bajo proteus, primeramente se lee el valor de una posición de memoria. Después se escribe un dato diferente en dicha posición. Y finalmente se vuelve a leer para verificar que realmente leemos el dato introducido.



Todos los archivos; archivo fuente, hex para el pic, esquema para proteus y una animación de la simulación se pueden descargar en este enlace (contraseña robotypic):

Descargar lectura escritura eeprom I2C



El proyecto contenido en el artículo ha sido diseñado y probado con éxito utilizando las siguientes versiones de software:
- Windows xp y windows 7
- Proteus V7.7 SP2
- CCS PIC C COMPILER v4.084



_________________________________________________________________________________


TUTORIAL BÁSICO PIC C COMPILER
Las variables

Las variables deben declararse antes de ser usadas para que el procesador sepa que cantidad de memoria reservar para su uso.

Se declaran según el siguiente formato:

TIPO_DATO  NOMBRE_VARIABLE [=VALOR_INICIAL];

Ejemplos:

int entrada = 5;  //Declara la variable “entrada” como entero 
                    (8 bits)y valor inicial 5
float  resultado; //Declara “resultado” como flotante (32 bits)
                    y valor inicial 0

En esta tabla se pueden ver todos los tipos de variables que pueden ser empleadas


Tipo de variable
Tamaño
Rango
Descripción
int1
short
1 bit
0, 1
Entero de 1 bit
int8
int
8 bits
-128 a 127
Entero de 8 bits
int16
long int
long
16 bits
0 a 65535 bits
Entero de 16 bits
int32
32 bits
0 a 4294967295
Entero de 32 bits
float
32 bits

Coma flotante
char
8 bits
0 a 255
Carácter
signed int8
8 bits
-128 a 127
Entero con signo
signed int16
16 bits
-32768 a 32767
Entero largo con signo
signed int32
32 bits

Entero 32 bits con signo


Además de los tipos definidos por defecto por el compilador CCS, también se pueden definir tipos estandarizados mediante la directiva #Type:

#Type   short=8
#Type   int=16
#Type   long=32


Serán variables de ámbito LOCAL cuando se emplean sólo en la función en la que son declaradas. De ámbito GLOBAL cuando se emplean en cualquier función del programa, declaradas antes y fuera de cualquier función.

Ejemplo:

#include <16f876a.h>
#use delay (clock=4000000)

int inicio = 7;            //Variable GLOBAL tipo entero llamada
                             'inicio' e inicializada a 7

void funcion () {          //Función secundaria
   int temporal;           //Variable LOCAL tipo entero llamada
                             'temporal' e inicializada a 0
 }

void main() {              //Función principal
   float resultado;        //Variable tipo flotante llamada 'resultado'
                             e inicializada a 0
   char dato;              //Variable tipo carácter llamada 'dato' e
                             inicializada a 0
}




No hay comentarios:

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)