Anda di halaman 1dari 6

ESPE-L

ESCUELA POLITCNICA DEL EJRCITO INGENIERIA ELECTRNICA MICROCONTROLADORES


UTILIZACION DE LA MEMORIA EEPROM Leonardo Flores leoespel2010@hotmail.com Resumen: Esta memoria tiene la capacidad para ser programada y reprogramada por la

CPU del PIC, para asegurar que en caso de una falla o desconexin de la energa los valores o variables crticas se puedan mantener en una memoria no voltil. La EEPROM es muy til en procesos que deben continuar a partir del ltimo dato obtenido cuando se ha producido una interrupcin en la energa. mikroC incluye una librera con funciones que facilitan enormemente el trabajo con la EEPROM.

PALABRA CLAVE Memoria eeprom EEPROM 16F877A

1. OBJETIVOS Configurar adecuadamente los registros de control y bits para la utilizacin de la memoria eeprom. Conocer los bit de configuracin de la memoria eeprom Aprender cuales son los comandos para trabajar con esta memoria. 2. INTRODUCCION El otro tipo de memoria es una memoria auxiliar no voltil llamada EEPROM, con capacidad de 128 posiciones de 8 bits cada una. Esta memoria puede ser accedida por el usuario mediante
LEONARDO FLORES

programacin, es muy til para almacenar datos que el usuario necesita que se conserven an sin alimentacin, tal es el caso de la clave de una alarma, esta puede ser modificada, pero no debe perderse por un corte de energa, el fabricante asegura que la seriePIC16F6XXA, tiene una retencin de datos en esta memoria mayor a 100 aos. Como este microcontrolador es fabricado con tecnologa CMOS , su consumo de potencia es muy bajo (2 mA a 4 Mhz) y adems es completamente esttico, lo que significa que si el reloj se detiene los datos de la memoria RAM no se pierden, esto mientras el micro sigue alimentado. La memoria de datos RAM, tiene 512 lneas de 8 bits cada una y est
Pgina 1

ESPE-L
particionada por 4 bancos; el banco 0, banco 1, banco 2 y banco 3, cada uno con 128 bytes, el acceso a cada banco de memoria lo realiza los bits RP1 y RP0 del registro STATUS, la mayora de los bytes son ocupados por los Registros de Funciones Especiales (SFR) o no estn implementadas. Para el caso del PIC16F628A slo 224 posiciones de memoria RAM estn disponibles para los Registros de Propsito General (GPR), la distribucin de memoria se muestra en la tabla de la figura 2.4.1.

3. DESARROLLO La Memoria de Datos EEPROM La memoria EEPROM de datos resulta muy importante cuando necesitamos almacenar informacin que no queremos que se pierda al desconectar la energa de nuestros proyectos. La capacidad de esta memoria vara segn el modelo de microcontrolador que escojamos, y no todos cuentan con esta caracterstica. Por ejemplo, el PIC16F84 cuenta con una memoria de datos de 64 bytes y el PIC16F877 cuenta con una memoria de datos de 256 bytes. Esta informacin puede ser verificada directamente en la hoja de caractersticas tcnicas de cada microcontrolador. Sin embargo, haremos un mapa de memoria de datos para estos dos microcontroladores PIC: La memoria EEPROM memoria de Programa. Fig. 1 MEMORIA EEPROM El espacio marcado como User memory Space es el espacio de memoria donde ira nuestro programa, desde 0000h hasta la 1FFFh. "Reset Vector" es la primera direccin a la que se dirige el pic al encenderlo o al Resetearlo. "PC" y los "Stack Level" son empleado por el pic y nosotros no tenemos acceso a ellos.

Para trabajar con las memorias EEPROM, algunas de ellas son:

value = read_eeprom (address): funcin bsica para leer el valor de la EEPROM interna del PIC. Devuelve un valor entero (int8) de un byte. "address" puede ser un entero de 8 16 bit. Dependiendo del PIC que utilicemos dispondremos de mas menos memoria EEPROM, por ejemplo el PIC 16f84A dispone de 64 bytes y

LEONARDO FLORES

Pgina 2

ESPE-L
los pic16F87X tienen 256 bytes que se direccionan del 0 a 255.

write_eeprom (address, value): esta funcin escribe un dato (entero de 8 bit) en la direccin especificada en address en la memoria interna del PIC. Al igual que read_eeprom address puede ser un entero de 8 16 bit.

MCLR o un WDT durante el proceso) 0 = Se ha producido el proceso de escritura con xito bit 2: WREN: bit de habilitacin de escritura 1 = Permite inicializar el ciclo de escritura 0 = Inhibe la escritura bit 1: WR: bit de inicio de escritura 1 = Cuando se le pone a 1 comienza el ciclo de escritura de la memoria no voltil. (El bit se pone de nuevo a cero por hardware cuando la escritura se completa). 0 = Toma este valor cuando completa el ciclo de escritura de la memoria no voltil. bit 0: RD: bit de inicio de lectura 1 = Cuando se le pone a 1 se inicia un ciclo de lectura. El bit RD se pone a cero por hardware. 0 = no ha comenzado el ciclo de lectura de la memoria no voltil. El registro EECON2, no est implementado fsicamente y slo se utiliza para la operacin de escritura, de igual forma que se hace con el PIC 16F84, es decir, antes de iniciar la escritura de un dato en la memoria, se

REGISTROS EECON1 (Direccin 18Ch) y EECON2 Seguidamente se describen los bits de control de registro EECON1

Fig. 2 REGISTRI EECON1 bit 7: EEPGD: Programa / bit de seleccin de datos EEPROM 1= Acceso a la memoria de programa FASH 0= Acceso a la memoria de datos EEPROM (No se puede cambiar mientras la lectura o escritura est en proceso) bit 6:4:No implementados: Se leen como 0 bit 3: WRERR: Flag de error de escritura en la EEPROM 1 = El proceso de lectura se ha producido prematuramente(se ha producido un Reset por

LEONARDO FLORES

Pgina 3

ESPE-L
debe escribir en el registro EECON2 primero el dato 55h y posteriormente el dato AAh. LA DECLARACIN READ Y WRITE EEPROM, WRITE 7, pepe ; en este caso la variable pepe estaba cargada con el nmero 3, por consiguientela direccin 7 de la memoria EEPROM se borra y se carga con el nmero 3. Sintaxis: WRITE direccin, variable Estas declaraciones las explicaremos con un ejercicio: EEPROM 5,[3,K,9,12] ; quiere decir colocar en la memoria EEPROM, direccin 5 elnmero 3, en la direccin 6 el caracter ASCII de K, es decir el nmero 75, aunque en el programaICprog lo veremos como 4B, esto es porque est en sistema hexadecimal, continuando en ladireccin 7 se guardar el nmero 9 y as sucesivamente, recuerden que el PIC16F628A tiene 128espacios de memoria EEPROM de 1 BYTE cada una lo que quiere decir que el nmero ms altoque podemos guardar es el 255. READ 5, pepe ; quiere decir leer la direccin 5 de la memoria EEPROM y guardar en la variablepepe, por consiguiente pepe se carga con el nmero 3. Sintaxis: READ direccin, variable La instruccin WRITE almacena datos en la memoria EEPROM de un microcontrolador en una direccin especfica. WRITE 8, 137 ; quiere decir guardar en la direccin 8 de la memoria EEPROM el nmero 137,el dato anterior en este caso el 12 automticamente se borra y se reescribe el nmero 137. La instruccin READ permite leer datos desde la memoria EEPROM de datos de un microcontrolador almacenndolos en una variable previamente definida. 4. ANALISIS EJEMPLO En el siguiente ejemplo vamos a utilizar la rutina para el control de un teclado matricial, ya que con ella podremos insertar valores que sern almacenados en la memoria de datos. Analice el siguiente programa, el cual ha sido desarrollado en base al diagrama de la figura
' Programa en Pic Basic Pro Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. ' Configuracin de Puertos: TRISA = %00000000 TRISB = %00000000 TRISD = %01111000 I VAR Byte ' Declaramos la Variable I VAR1 VAR Byte ' Declaramos la Variable VAR1 DIRECCION VAR Byte ' Declaramos la Variable DIRECCION DATO VAR Byte ' Declaramos la Variable DATO Pause 200 ' Pausa de 200 milisegundos Lcdout $fe, 1 ' Limpia la pantalla Lcdout $fe, 2 ' Posiciona el cursor en el inicio Lcdout "Memoria de Datos" Lcdout $fe,$C0, "****************" Pause 3000 ' Pausa de 3 segundos DIRECCION = $00 ' Asignamos una direccin inicial Inicio: Lcdout $fe, 1 ' Limpia la pantalla Lcdout $fe, 2 ' Posiciona el cursor en el inicio Lcdout "Direccion: ",#DIRECCION," " Lcdout $fe,$C0, "Dato?: "

LEONARDO FLORES

Pgina 4

ESPE-L
espera1: Call Teclado If VAR1 = 0 Then espera1 ' Si ninguna tecla fue pulsada salta a espera1 If VAR1 = 10 Then espera1 ' Si pulsamos la tecla asterisco salta a espera1 If VAR1 = 11 Then VAR1 = 0 ' Si pulsamos la tecla 0, entonces VAR1 = 0 If VAR1 = 12 Then espera1 ' Si pulsamos la tecla numeral salta a espera1 Lcdout $fe,$C0, "Dato?: ",#VAR1," " Write DIRECCION,VAR1 ' Escribe el valor en la memoria de datos DIRECCION = DIRECCION + 1 ' Aumentamos la posicin en una unidad Pause 1000 ' Espera 1 segundo para simular un tiempo de grabacin Lcdout $fe,$C0, "Dato Almacenado" Pause 1000 ' Espera 1 segundo para visualizar el mensaje If DIRECCION = $0F Then Aviso ' Revisa si llegamos al lmite asignado por ' el programador en la memoria de datos GoTo inicio Aviso: Lcdout $fe, 1 ' Limpia la pantalla Lcdout $fe, 2 ' Posiciona el cursor en el inicio Lcdout " Memoria llena! " Lcdout $fe,$C0, "****************" Parada: GoTo Parada Teclado: VAR1 = 0 PORTD.0 = 0 ' Columna 1 = 0 PORTD.1 = 1 ' Columna 2 = 1 PORTD.2 = 1 ' Columna 3 = 1 If PORTD.3 = 0 Then VAR1 = 1 ' tecla "1" If PORTD.4 = 0 Then VAR1 = 4 ' tecla "4" If PORTD.5 = 0 Then VAR1 = 7 ' tecla "7" If PORTD.6 = 0 Then VAR1 = 10 ' tecla "*" PORTD.0 = 1 ' Columna 1 = 1 PORTD.1 = 0 ' Columna 2 = 0 PORTD.2 = 1 ' Columna 3 = 1 If PORTD.3 = 0 Then VAR1 = 2 ' tecla "2" If PORTD.4 = 0 Then VAR1 = 5 ' tecla "5" If PORTD.5 = 0 Then VAR1 = 8 ' tecla "8" If PORTD.6 = 0 Then VAR1 = 11 ' tecla "0" PORTD.0 = 1 ' Columna 1 = 1 PORTD.1 = 1 ' Columna 2 = 1 PORTD.2 = 0 ' Columna 3 = 0 If PORTD.3 = 0 Then VAR1 = 3 ' tecla "3" If PORTD.4 = 0 Then VAR1 = 6 ' tecla "6" If PORTD.5 = 0 Then VAR1 = 9 ' tecla "9" If PORTD.6 = 0 Then VAR1 = 12 ' tecla "#" Return ' Retorna una lnea despus del llamado "Call" End

LCD1
LM016L

C2
22p

X1
VSS VDD VEE RS RW E
CRYSTAL

1 2 3

4 5 6

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

C1
22p

U4
13 14 2 3 4 5 6 7 8 9 10 1 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30

D1
LED-BLUE

RV2
1k

D2
LED-GREEN

R5
10k R5(1) LED-RED

D3

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877A

50%

1 4 7

2 5 8 0

3 6 9 #

R6
(1) 10K

R1
330 R1(2)

R2
1K

R3
1K

R4
1K

LCD1
LM016L

VSS VDD VEE

RS RW E

1 2 3

4 5 6

50%

RV2
1k

Una vez compilado y puesto a prueba el programa, los valores podrn ser introducidos a la memoria de datos a travs del teclado matricial, y el lmite de datos a ser grabados ser de 16 registros, ya que hemos fijado como lmite la direccin $0F en la memoria de datos, para luego mostrar un mensaje en la pantalla LCD que nos indicar que hemos llenado cada uno de los 16 registros disponibles. Recuerde que un microcontrolador PIC16F877 tiene una capacidad de memoria de datos de 256 bytes, por lo tanto el lmite que hemos fijado en el programa anterior puede ser llevado a su capacidad mxima de ser necesario.

LEONARDO FLORES

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

Pgina 5

ESPE-L

5. CONCLUSIONES Determinamos las configuraciones para ocupar la memoria eeprom tanto como para escribir datos y leer datos de la misma. Aplicamos en un ejemplo la utilizacin de la memoria eeprom (cerradura electrnica) detallados en este documento. Para ultizar la memoria eeprom se utiliza el comando write para escribir y read para poder leer los datos tambin se pueden asignar a una variable. 6. RECOMENDACIONES Debemos asegurarnos de activar los bits correctos para poder utilizar correctamente la memoria eeprom. Debemos saber bien saber bien en que parte de la memoria estamos guardando los datos. 7. BIBLIOGRAFIA

Programacin del PIC16F84. por Carlos Daz www.electron.es.vg Club Saber electrnica curso de pics para estudiantes y aficionados N0 20. http://es.scribd.com/doc/63742141/Mi cro-Control-Adores-Pic-Basic-Carlosa-Reyes

LEONARDO FLORES

Pgina 6

Anda mungkin juga menyukai