electr�nica - memoria eeprom interna del pic.pdf
TRANSCRIPT
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 ..
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
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
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 )
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);
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
}}