You are on page 1of 7

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC

Pgina 1

Inicio

Actualidad / Noticias

Foros

Contactar

Acerca de ..

Men Principal
Inicio Actualidad / Noticias Por qu donar? Registrarse Enlaces Web Foros

Siguenos en ...

ltimos Tutoriales
ndice Programacin PIC en C ndice prcticas PIC C Comandar un PIC a travs de la voz Contador de 0 a 10 Bluetooth HC-05 Acceso a datos en tiempo real sin parar MCU Test GLCD (KS0108)

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC


Expansor de E/S PCF8574 Secuencia de luces Decodificador Binario/Decimal Uso del TMR0 como temporizador Uso del TMR0 como contador Interrupcin externa por RB0 Control motor CC con la terminal Control motor CC con el Hyperterminal Interrupcin cambio de estado RB4-RB7 Comuicacin serie asncrona entre dos PICs con la USART Control teclado 4X4 con el MM74C922 Memoria EEPROM interna del PIC Comunicacin serie I2C entre PIC y EEPROM 24LC256A Uso del TMR1 como temporizador Controlador Domstico Kit de desarrollo PIC16F877A de CCS Controlador LCD Serie Comunicacin USB PIC18F4550 utilizando la clase CDC BootLoader USB Multiplataforma Comandar un PIC a travs de Internet Gobernar un Microcontrolador desde la BeagleBoard-Xm Empezando con las libreras grficas de Microchip Implementacin de una Mquina de

Pgina 2

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC


Estados Finita en un PIC Conexin inalmbrica entre dos Microcontroladores Comunicacin USBPIC con HID Entrenadora para PIC. Fenix V2.0 Control de Mensajes SMS a travs de un PIC ndice Sistemas Embebidos Curso PIC32 SDCC (Small Device C Compiler) en Windows Actualizar a Ubuntu 9.10 (Karmic Koala) Programacin de Microcontroladores PIC en C con Ubuntu utilizando el ICD2 Particiones y sistemas de archivos en Linux Algunas razones para probar Ubuntu Instalacin de Ubuntu 9.04 paso a paso Compilador PCW CCS Compiladores C para PIC Programacin PIC en C X - 10 Comandos Unix/Linux Autmatas Secuenciales Finitos CAD Electrnico Arduino y el controlador LCD serie

Pgina 3

Chat

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC


26 ago 13, 10:58

Pgina 4

Biblioman: ThomasK. No more spam. please


6 ago 13, 22:33

gary: y los demas temas cuando?


30 jul 13, 22:04

papel12300 : y >> para asgnar un determinado nmero a alguna variable?


30 jul 13, 22:03

papel12300 : alguien puede proporcionar algunos ejemplos de como utilizar el desplazamiento de bits utilizando <<
29 jul 13, 05:44

anders:
29 jul 13, 05:41

anders: hay alguna chica por aqu?


29 jul 13, 05:40

anders : hola amigos [Get a Cbox]


24 jul 13, 18:42

Juan : Igual espero ese tutorail del raspberry pi..Salu2


22 jul 13, 10:14

ayuda

Imagen turorial QT y Raspberry pi


17 jul 13, 05:53

miki41: Ansioso por el

Hola amigos : Hola amigos


17 jul 13, 05:53

Hola amigos : Hola amigos


13 jul 13, 05:56

brian: como leo mi sensor?

Licencia

13 jul 13, 05:56

brian: necesito ayuda para utilizar un sensor ds18b20!!


13 jul 13, 05:28

Paulo: Excelente pagina, justo encontr lo que de Todo el contenido necesitaba. Sigue adelante.

este sitio est bajo una 12 jul 13, 02:32 licencia de Creative Juan : Ya lo hice, muchas Commons gracias por tu ayuda! SAlu2
10 jul 13, 08:32

Biblioman: Pregunta en el hilo del foro. Y te pongo otro enlace. Salu2


10 jul 13, 02:57

Inicio

ndice prcticas PIC C

Memoria EEPROM interna del PIC

Juan : DEsde la pagina oficial, pueden subirlo a algun servidor, les agradezco de antemano
10 jul 13, 02:57

Recursos del PIC. Uso de la memoria EEPROM interna


Detalles
ltima actualizacin el Mircoles, 05 Septiembre 2012 18:01 Escrito por biblioman

Juan : Hola amigos,Ncsito de su ayuda, ya q no puedo bajar el LCD Assitant est daado el archivo
9 jul 13, 13:47

CCS implementa muchas funciones 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 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. Algunos dispositivos permiten leer y escribir datos en la memoria de programa en tiempo de ejecucin, para los dispositivos que soportan esta funcionalidad CCS, nos proporciona las siguientes funciones: value = read_program_eeprom (address): esta funcin lee un dato de la memoria de programa del PIC y devuelve el valor ledo como un entero de 16 bits. Adrress es un entero de 16 32 bits que depende del dispositivo empleado. write_program_eeprom (address, data): funcin homologa a la anterior pero que nos permite escribir datos en la memoria de programa. data tiene que ser un entero de 16 bits. CCS tambin incorpora funciones para leer y escribir en memorias EEPROM externas: read_external_memory(address, dataptr, count )

richizer: hola me pueden ayudar con c# usb y pic


9 jul 13, 13:47

richizer: hola me pueden ayudar con interfaz c# y pic???? [mensajes antiguos]

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC

Pgina 5

Algunas consideraciones a tener en cuenta sobre las memorias EEPROM es que son rpidas en el proceso de lectura, pero pueden tardar varios ms en realizar un proceso de escritura. Otro factor a tener en cuenta es que se pueden hacer operaciones de lectura sobre el valor de sus registros el numero de veces que se quiera, pero soportan un nmero limitado de ciclos de escritura / borrado. Ese nmero segn Microchip es de aproximadamente un milln, 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 los registros SFR y GPR, si programramos en Ensamblador deberamos realizar una serie de pasos para su lectura y escritura que aunque no difciles resultan al menos laboriosos, CCS nos permite abstraernos por completo del proceso de lectura y escritura, lo nico que tenemos que saber es las funciones que tenemos que aplicar y los parmetros y valores que devuelven dichas funciones. Como 1 ejemplo del uso de este tipo de memorias vamos a utilizar las funciones bsicas para leer y escribir 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 como carniceras y pescaderas. Como funcionalidades mnimas 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 nmero de patillas en el PIC para su control hay varias formas de hacerlo, una de ellas (la que he utilizado en este ejemplo) es utilizar un decodificador BCD a 7 segmentos como el 7447, el datasseht lo tenis aqu. Donde se puede ver el diagrama lgico y su tabla de verdad. Otra forma es multiplexar las lneas de datos, es decir en cada instante solo habr un display activo pero el cambio de uno a otro ser tan rpido que para el ojo humano parecer que los dos estn activos a la vez, este sistema es bueno porque nos ahorramos los decodificadores, pero si utilizamos mas de cuatro display, notaremos un parpadeo molesto. El cdigo 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> //Configuracin 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);

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

Apuntes Informtica / Electrnica - Memoria EEPROM interna del PIC


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 entrada set_tris_d(0x00);//Puerto D como salida enable_interrupts(GLOBAL); // Se habilita la interrupcin global enable_interrupts(INT_EXT); // Se habilita la interrupcin externa puerto_D =0xFF; //inicializo puerto D //write_eeprom(0,0xFF);Resetear EEPROM while(true ) { //Resto del programa } }

Pgina 6

Comentario del programa:


El ejemplo bsicamente es un contador ascendente de 0 a 99 que incrementa su valor cada vez que pulsamos el pulsador "su turno" para evitar que el contador se reinicie y empiece a contar desde cero cada vez que se vaya la corriente, el valor actual del contador se almacenar en la memoria EEPROM del PIC en vez de en la memoria RAM. Como solo queremos guardar un valor que estar comprendido entre 0 y 99, solo utilizaremos el primer byte de la memoria EEPROM. Para detectar cuando se pulsa el pulsador, se utiliza la interrupcin externa en la patilla RB0/INT. Dentro de la funcin de interrupcin 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 direccin 0 de la memoria EEPROM puerto_D=read_eeprom(0);//asigno al puerto D el valor devuelto por la funcin de lectura de la EEPROM } La primera vez que se ejecute el programa el valor de la EEPROM es 0xFF (viene as de fabrica) por lo que tendremos que sobreescribir su valor a 0 para iniciar el contaje, despus de esto esta condicin solo se 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 al decodificador U2 y su salida conectado al display de las unidades a travs del bus de datos (hay que hacer 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 el valor de la EEPROM mientras el valor del "nibble" de menor peso sea < 9. Fijaros como la funcin de escritura en la EEPROM nos permite poner como parmetro la funcin de lectura por lo que no es necesario declarar una variable local para hacer de intercambio. Una vez incrementado el valor de la EEPROM, hacemos una nueva lectura y asignamos su valor al puerto D. else if ((read_eeprom(0) & 0x0F)>=0x09) { write_eeprom(0,(read_eeprom(0))+7); puerto_D=read_eeprom(0); }

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/memoria-eeprom-interna-del-pic.html

26/09/2013 12:17:27 p.m.

You might also like