Autor Tema: Dudas con eeprom..y codigo de alarma.  (Leído 5142 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Dudas con eeprom..y codigo de alarma.
« en: 28 de Junio de 2008, 02:03:32 »
Hola piclisteros, mi duda es con la eeprom de datos del pic16f877. Primero la pregunta que hago, para qué sirve exactamente y cuales son sus ventajas sobre la flash. La siguiente es que el único uso que le veo es el de guardar un código en una memoria no volatil para una alarma o pase de entrada. Me encontré esta rutina para escribirla en un libro, se las pongo:
Código: [Seleccionar]
bsf sTATUS,RP1
bcf status,rp0
movf ADDR_L,w
movwf EEDATA
bsf STATUS,rp0
bcf EECON1, EEPGD
bsf EECON1,wren
bcf intcon,gie
movlw 0x55
movwf eecon2
movlw 0xAA
movwf EECON2
bsf eecon1,wr
bsf intcon,gie
sleep
bcf eecon1,eeif
bcf eecon1,wren
Me ahorré los comentarios porque supongo que están familiarizados con la rutina. Mi pregunta es, si quiero escribir el valor 10101010 en la eeprom, en que registro lo guardo? Según lo que he entendido es en DATA_L, pero es un registro SFR o declarado por el usuario? osea yo...o si no es en ese registro que supongo, por favor alguien que me de algo de luz en mi pasadizo de oscuridad?

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #1 en: 28 de Junio de 2008, 03:00:01 »
Hola tavisho.

Para grabar en la eeprom, tienes que realizar unos pasos sencillo que en el datasheet están. Para grabar en la eeprom, se utiliza punteros ya que no se puede hacer en forma directa.

Para grabar un dato, se debe cargar al registro W, el valor deseado, y luego pasárselo al registro indirecto EEDATA. Para indicarle en que pocición de memoria se desea grabar, se debe cargar el valor de la dirección al registro W, y luego pasárselo al registro indirecto EEADR.

A este pic, se les puede grabar en la propia memoria de programa, más datos, que pueden ser instrucciones que deberá hacer  el CP. La otra eeprom, es la memoria del usuario, y está preparada para se grabado y borrado, muchas mas veces que la flash.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #2 en: 28 de Junio de 2008, 12:25:20 »
Tavisho, tal como te ha mencionado Leon, en la datasheet está el código completico!  :P
En una oportunidad estaba trabajando en ASM y tuve que usar la EEPROM y lo que hice fue copiar las rutinas que allí se mencionan. Y funcionó de lujo!  :lol:
Revisa la DS y seguro te va a funcionar.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #3 en: 28 de Junio de 2008, 17:47:48 »
muchas gracias, vere la hoja de datos para salir de dudas.....gracias

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #4 en: 28 de Junio de 2008, 18:16:04 »
hola, ya he leído la rutina 4-2 de la hoja de datos sobre la escritura de la memoria eeprom, y la encuentro un poco más accesible. Ahora solo pregunto esto, antes de la rutina dice que antes de entrar a la rutina se debe escribir la dirección adecuada  de la memoria eeprom donde se posicionará el dato, y después que debo incluir el valor a escribir en los registros EEADR y EEADATA, ¿Alguien sabe como hacerlo, accesar los valores en EEADR y EEDATA?
Supongo que los valores v'alidos para eeadata van desde 0x00 hasta 0xFF, pero para eeadr? Ojalá alguien pudiera responderme y si tienen algún ejemplo con el acceso a los registros en cuestión lo agradecería bastante. :g)

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #5 en: 28 de Junio de 2008, 18:57:46 »
Esto es lo que dice la datasheet:



Ahí puedes ver los código para lectura y escritura. Están comentados para que lo entiendas mejor. Esta es de la datasheet del micro que tú estás usando.
En lugar de "ADDR" vas a colocar la dirección de la eeprom donde quieres leer o escribir. Aunque si vas a escribir varios valores, sería recomendable que esta siga siendo una variable y la vayas incrementando... así como una especie de puntero.
Y en la escritura, en lugar de "VALUE" colocas el valor que vas a guardar, el dato. También puede ser una variable, tal como está allí.
Si te fijas no tiene nada del otro mundo, simplemente movimientos a W y luego a los registros de la EEPROM.
O sea que para "accesar" a los registros... bueno, igual que siempre.
Como te dije, a mí me funcionó perfecto haciéndo las rutinas tal cual como aparecen allí.  :P

Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #6 en: 28 de Junio de 2008, 19:06:45 »
Como tu lo has dicho, para el dato, los valores pueden ir desde 0x00 hasta 0xff. En cambio para la dirección, pues va desde 0x00 hasta 0xff. En este caso, el pic 16f877, tiene 256 pociciones de memoria para la eeprom.

Para volcar los valores deseados a los registros pues, debes utilizar estas intrucciones:

Supongamos que quieres guardar el valor 0x37, en la pocición de la eeprom 0x21

Código: ASM
  1. movlw     0x37      ;cargo a w el valor h'37'
  2.        movwf     eedata    ;vuelvo el valor a eedata, que será el valor a guadar en la eemprom
  3.        movlw     0x21      ;cargo a w el valor h'21'
  4.        movwf     eeadr     ;vuelco el valor a eeadr para apuntar a la pocición de memoria a grabar el valo 0x37
  5. .....                            
  6. .....
  7. .....

Ten encuanta, de que esto es un ejemplo. Debes hacerle caso al datasheet.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #7 en: 28 de Junio de 2008, 19:13:13 »
Como tu lo has dicho, para el dato, los valores pueden ir desde 0x00 hasta 0xff. En cambio para la dirección, pues va desde 0x00 hasta 0xff.
:D  :D  :D
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado tavisho

  • PIC12
  • **
  • Mensajes: 94
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #8 en: 28 de Junio de 2008, 20:12:11 »
muhas gracias, me ha quedado claro; les aviso como sale el primer programa. Pienso, para comenzar, un interruptor que se desactive al leer el código de puerto b através de un dip switch, ese código se compará con el escrito en la eeprom del pic, si es el mismo abre el interruptor y pasas; si no, el lcd amablemente te pedirá que te vallas¡¡.
ok les comento como me quedo cuando escriba el programa. gracias por su atención

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Dudas con eeprom..y codigo de alarma.
« Respuesta #9 en: 29 de Junio de 2008, 10:31:58 »
Como tu lo has dicho, para el dato, los valores pueden ir desde 0x00 hasta 0xff. En cambio para la dirección, pues va desde 0x00 hasta 0xff.
:D  :D  :D

 :D Lo que pasó fue que cuando estaba escribiendo la dirección de la eeprom, me entró la duda, me fijé en el datasheet y puse el valor, pero no leí la oración   :mrgreen: :mrgreen:




Tavisho, suerte con el programa y estamos a la espera de como te fué.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything