Electr�nica - Memoria EEPROM interna del PIC.pdf

7

Click here to load reader

Transcript of Electr�nica - Memoria EEPROM interna del PIC.pdf

Page 1: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 1Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

Menú Principal

Inicio

Actualidad / Noticias

¿Por qué donar?

Registrarse

Enlaces Web

Foros

Siguenos en ...

Últimos Tutoriales

Índice ProgramaciónPIC en C

Índice prácticas PICC

Comandar un PICa través de la voz

Contador de 0 a 10

Bluetooth HC-05

Acceso a datos entiempo real sinparar MCU

Test GLCD(KS0108)

Inicio Actualidad / Noticias Foros Contactar Acerca de ..

Page 2: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 2Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

Expansor de E/SPCF8574

Secuencia de luces

DecodificadorBinario/Decimal

Uso del TMR0como temporizador

Uso del TMR0como contador

Interrupciónexterna por RB0

Control motor CCcon la terminal

Control motor CCcon elHyperterminal

Interrupcióncambio de estadoRB4-RB7

Comuicación serieasíncrona entredos PICs con laUSART

Control teclado4X4 con elMM74C922

Memoria EEPROMinterna del PIC

Comunicación serieI2C entre PIC yEEPROM 24LC256A

Uso del TMR1como temporizador

ControladorDoméstico

Kit de desarrolloPIC16F877A deCCS

Controlador LCDSerie

Comunicación USBPIC18F4550utilizando la claseCDC

BootLoader USBMultiplataforma

Comandar un PICa través deInternet

Gobernar unMicrocontroladordesde laBeagleBoard-Xm

Empezando con laslibrerías gráficasde Microchip

Implementación deuna Máquina de

Page 3: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 3Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

Estados Finita enun PIC

Conexióninalámbrica entredosMicrocontroladores

Comunicación USB-PIC con HID

Entrenadora paraPIC. Fenix V2.0

Control deMensajes SMS através de un PIC

Índice SistemasEmbebidos

Curso PIC32

SDCC (Small DeviceC Compiler) enWindows

Actualizar a Ubuntu9.10 (Karmic Koala)

Programación deMicrocontroladoresPIC en C con Ubuntuutilizando el ICD2

Particiones ysistemas de archivosen Linux

Algunas razones paraprobar Ubuntu

Instalación deUbuntu 9.04 paso apaso

Compilador PCW CCS

Compiladores C paraPIC

Programación PIC enC

X - 10

Comandos Unix/Linux

AutómatasSecuenciales Finitos

CAD Electrónico

Arduino y elcontrolador LCD serie

Chat

Page 4: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 4Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26 ago 13, 10:58Biblioman: ThomasK. Nomore spam. please

6 ago 13, 22:33gary: y los demas temascuando?

30 jul 13, 22:04papel12300: y >> paraasgnar un determinadonúmero a alguna variable?

30 jul 13, 22:03papel12300: alguien puedeproporcionar algunosejemplos de como utilizar eldesplazamiento de bitsutilizando <<

29 jul 13, 05:44

anders:29 jul 13, 05:41

anders: hay alguna chicapor aquí?

29 jul 13, 05:40anders: hola amigos

24 jul 13, 18:42Juan: Igual espero esetutorail del raspberrypi..Salu2

22 jul 13, 10:14miki41: Ansioso por elturorial QT y Raspberry pi

17 jul 13, 05:53Hola amigos: Hola amigos

17 jul 13, 05:53Hola amigos: Hola amigos

13 jul 13, 05:56brian: como leo mi sensor?

13 jul 13, 05:56brian: necesito ayuda parautilizar un sensor ds18b20!!

13 jul 13, 05:28Paulo: Excelente pagina,justo encontré lo quenecesitaba. Sigue adelante.

12 jul 13, 02:32Juan: Ya lo hice, muchasgracias por tu ayuda! SAlu2

10 jul 13, 08:32Biblioman: Pregunta en elhilo del foro. Y te pongo otroenlace. Salu2

10 jul 13, 02:57Juan: DEsde la paginaoficial, pueden subirlo aalgun servidor, lesagradezco de antemano

10 jul 13, 02:57Juan: Hola amigos,Ncsitode su ayuda, ya q no puedobajar el LCD Assitant estádañado el archivo

9 jul 13, 13:47richizer: hola me puedenayudar con c# usb y pic

9 jul 13, 13:47richizer: hola me puedenayudar con interfaz c# ypic????

[mensajes antiguos]

[Get a Cbox]

ayuda ·

Imagen

Licencia

Todo el contenido deeste sitio está bajo unalicencia de CreativeCommons

Inicio Índice prácticas PIC C Memoria EEPROM interna del PIC

Recursos del PIC. Uso de la memoria EEPROM interna

DetallesÚltima actualización el Miércoles, 05 Septiembre2012 18:01Escrito por biblioman

CCS implementa muchas funciones para trabajar con las memorias EEPROM, algunas de ellas son:

value = read_eeprom (address): función básica para leer el valor de la EEPROM interna delPIC. 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, porejemplo el PIC 16f84A dispone de 64 bytes y los pic16F87X tienen 256 bytes que se direccionandel 0 a 255.

write_eeprom (address, value): esta función escribe un dato (entero de 8 bit) en la direcciónespecificada en address en la memoria interna del PIC. Al igual que read_eeprom address puedeser un entero de 8 ó 16 bit.

Algunos dispositivos permiten leer y escribir datos en la memoria de programa en tiempo de ejecución,para los dispositivos que soportan esta funcionalidad CCS, nos proporciona las siguientes funciones:

value = read_program_eeprom (address): esta función lee un dato de la memoria deprograma del PIC y devuelve el valor leído como un entero de 16 bits. Adrress es un entero de 16ó 32 bits que depende del dispositivo empleado.write_program_eeprom (address, data): función homologa a la anterior pero que nos permiteescribir datos en la memoria de programa. data tiene que ser un entero de 16 bits.

CCS también incorpora funciones para leer y escribir en memorias EEPROM externas:

read_external_memory(address, dataptr, count )

Page 5: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 5Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

Algunas consideraciones a tener en cuenta sobre las memorias EEPROM es que son rápidas en elproceso de lectura, pero pueden tardar varios ms en realizar un proceso de escritura. Otro factor atener en cuenta es que se pueden hacer operaciones de lectura sobre el valor de sus registros elnumero de veces que se quiera, pero soportan un número limitado de ciclos de escritura / borrado. Esenúmero según Microchip es de aproximadamente un millón, el que quiera que lo compruebe.

La memoria EEPROM de datos no está mapeada en la zona de la memoria de datos donde se ubican losregistros SFR y GPR, si programáramos en Ensamblador deberíamos realizar una serie de pasos para sulectura y escritura que aunque no difíciles resultan al menos laboriosos, CCS nos permite abstraernospor completo del proceso de lectura y escritura, lo único que tenemos que saber es las funciones quetenemos que aplicar y los parámetros y valores que devuelven dichas funciones.

Como 1º ejemplo del uso de este tipo de memorias vamos a utilizar las funciones básicas para leer yescribir datos en la memoria interna del PIC: read_eeprom (address) y write_eeprom (address, value).

El ejemplo es un contador del tipo "su turno" que solemos encontrar en algunos establecimientos comocarnicerías y pescaderías. Como funcionalidades mínimas he puesto que sea capaz de contar del 0 al 99.Y por supuesto que si se va la corriente guarde en memoria el último valor.

El esquema del circuito será el siguiente:

Cuando queremos utilizar mas de un display y minimizar el número de patillas en el PIC para su controlhay varias formas de hacerlo, una de ellas (la que he utilizado en este ejemplo) es utilizar undecodificador BCD a 7 segmentos como el 7447, el datasseht lo tenéis aquí. Donde se puede ver eldiagrama lógico y su tabla de verdad.Otra forma es multiplexar las líneas de datos, es decir en cada instante solo habrá un display activopero el cambio de uno a otro será tan rápido que para el ojo humano parecerá que los dos están activosa la vez, este sistema es bueno porque nos ahorramos los decodificadores, pero si utilizamos mas decuatro display, notaremos un parpadeo molesto.

El código del programa será el siguiente:

01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.17.18.19.20.21.

/*-----------------------------------------------------------*\| Uso de la memoria EEPROM del PIC || autor: biblioman || www.aquihayapuntes.com |\*-----------------------------------------------------------*/

#include <16F877.h>//Configuración de los fusibles.#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG#use delay(clock=4000000) //Frecuencia de reloj 4MHz#byte puerto_D = 0x08 // Identificador para el puerto C.

#int_EXT

void EXT_isr( void ){

if ((read_eeprom(0)==0x99)||(read_eeprom(0)==0xFF)){write_eeprom(0,0);puerto_D=read_eeprom(0);

Page 6: Electr�nica - Memoria EEPROM interna del PIC.pdf

Página 6Apuntes Informática / Electrónica - Memoria EEPROM interna del PIC

26/09/2013 12:17:27 p.m.http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

Comentario del programa:

El ejemplo básicamente es un contador ascendente de 0 a 99 que incrementa su valor cada vez quepulsamos el pulsador "su turno" para evitar que el contador se reinicie y empiece a contar desde cerocada vez que se vaya la corriente, el valor actual del contador se almacenará en la memoria EEPROM delPIC en vez de en la memoria RAM. Como solo queremos guardar un valor que estará comprendidoentre 0 y 99, solo utilizaremos el primer byte de la memoria EEPROM. Para detectar cuando se pulsa elpulsador, se utiliza la interrupción externa en la patilla RB0/INT.

Dentro de la función de interrupción nos encontramos con tres sentencias condicionales:

if ((read_eeprom(0)==0x99)||(read_eeprom(0)==0xFF)){write_eeprom(0,0);//escribo el valor 0 en la dirección 0 de la memoria EEPROMpuerto_D=read_eeprom(0);//asigno al puerto D el valor devuelto por la función de lectura dela EEPROM}

La primera vez que se ejecute el programa el valor de la EEPROM es 0xFF (viene así de fabrica) por loque tendremos que sobreescribir su valor a 0 para iniciar el contaje, después de esto esta condición solose cumplirá cuando el contador llegue a 99.

else if ((read_eeprom(0) & 0x0F)<0x09){write_eeprom(0,(read_eeprom(0))+1);puerto_D=read_eeprom(0);}

Cada "nibble" del puerto D está conectado a un decodificador por lo que tenemos RD0-RD3 aldecodificador U2 y su salida conectado al display de las unidades a través del bus de datos (hay quehacer un zoom sobre el esquema en Proteus para ver las conexiones) y RD4-RD7 al decodificador U3,que está conectado al display de las decenas.

Pues bien, si tenemos 4 bits por "nibble" tendremos 16 combinaciones posibles, incrementamos con 1 elvalor de la EEPROM mientras el valor del "nibble" de menor peso sea < 9. Fijaros como la función deescritura en la EEPROM nos permite poner como parámetro la función de lectura por lo que no esnecesario declarar una variable local para hacer de intercambio.

Una vez incrementado el valor de la EEPROM, hacemos una nueva lectura y asignamos su valor alpuerto D.

else if ((read_eeprom(0) & 0x0F)>=0x09){write_eeprom(0,(read_eeprom(0))+7);puerto_D=read_eeprom(0);}

22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.

}else if ((read_eeprom(0) & 0x0F)<0x09){write_eeprom(0,(read_eeprom(0))+1);puerto_D=read_eeprom(0);}else if ((read_eeprom(0) & 0x0F)>=0x09){write_eeprom(0,(read_eeprom(0))+7);puerto_D=read_eeprom(0);}

}

void main(){set_tris_b(0xFF); //Puerto B como entradaset_tris_d(0x00);//Puerto D como salidaenable_interrupts(GLOBAL); // Se habilita la interrupción globalenable_interrupts(INT_EXT); // Se habilita la interrupción externapuerto_D =0xFF; //inicializo puerto D//write_eeprom(0,0xFF);Resetear EEPROMwhile(true){//Resto del programa

}}

Page 7: Electr�nica - Memoria EEPROM interna del PIC.pdf