Autor Tema: EEPROM del 16f87x  (Leído 2620 veces)

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

Desconectado FixxxerMetal

  • PIC10
  • *
  • Mensajes: 11
EEPROM del 16f87x
« en: 26 de Marzo de 2006, 21:45:00 »
Como hago una subrutina para escribir en la eeprom de pic? la que hice me escribe el primer dto, ya la segunda vez que la llamo no escribe nada, ni la tercera etc. Como le digo desde C que quiero escribir un valos espesifico en la eeprom, pues me toca cargar el programa en el grabador, luego meterle los datos para la eepron uno a uno y luego grabar el pic, quero que esos valores lo cargue con los valores del programa, los del #fuses, etc.

mis subrutinas de lectura y escritura:
 // SubRutinas
   // LECTURA de la EEPROM
   void leer(int dir)
      {
         eeadr = dir;
         bit_set(eecon1,RD);
         dato_leido = eedata;
      }
   // ESCRITURA de la EEPROM
   void escribir(int dir, int date)
      {
         eeadr = dir;
         eedata = date;
         bit_set(eecon1,2);   // 2
         eecon2 = 0x55;
         eecon2 = 0xaa;
         bit_set(eecon1,1);   // 1
         while(!bit_test(eecon1,4));
            {  // inicio WHILE final de escritura
              delay_us(1);
            }  // fin WHILE final de escritura
         bit_clear(eecon1,4); // 4
         bit_clear(eecon1,2); // 2
      }
Otra cosa, declare por bit los valores del registro y no me funcionan, a la final me toco poner el "registro,bit" en vez de "registro,variable"
#bit RD = eecon1.0        
#bit WR = eecon1.1
#bit WREN = eecon1.2
#bit WRERR = eecon1.3
#bit EEIF = eecon1.4

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: EEPROM del 16f87x
« Respuesta #1 en: 27 de Marzo de 2006, 00:11:00 »
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)

Desconectado FixxxerMetal

  • PIC10
  • *
  • Mensajes: 11
RE: EEPROM del 16f87x
« Respuesta #2 en: 28 de Marzo de 2006, 19:58:00 »
Escrito originalmente por nocturno66
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)


y si la direccion es de 16bits como hago? igual el dato. el 16f84 si es de 8 bits pero el 16f87x es de 16.

Otra cosa, en que se diferencia la memoria flash de la eeprom? el pic 16f87x t da opcion de escribir en la eeprom o en la flash, supongo que son memorias aparte de la de programa.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: EEPROM del 16f87x
« Respuesta #3 en: 28 de Marzo de 2006, 22:12:00 »
Escrito originalmente por FixxxerMetal
Escrito originalmente por nocturno66
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)


y si la direccion es de 16bits como hago? igual el dato. el 16f84 si es de 8 bits pero el 16f87x es de 16.



Creo que estas leyendo mal algo, los pic16F87x tienen 256 bytes de EEPROM , que se direccionan de 0 a 255, osea 1 byte.

Escrito originalmente por FixxxerMetal

Otra cosa, en que se diferencia la memoria flash de la eeprom? el pic 16f87x t da opcion de escribir en la eeprom o en la flash, supongo que son memorias aparte de la de programa.


La memoria FLASH es la memoria de programa, la eeprom es la de datos.  Si quieres grabar datos en una u otra es lo mismo, solo que sería mas peligroso guardarlos en la memoria de programa si cometes algun error.

Por lo general es mucha cuestion de criterio.  La memoria de programa la podrias usar por ejemplo para modificar datos de un mensaje de un display, pero para datos que varien con mayor frecuencia te sugiero lo ubiques en la eeprom.

Ambas son lentas para escribirse (tipico 4mseg) pero muy rapidas para ser leídas.

Dime que es lo que quieres guardar en que contexto y te podré sugerir qué haria yo en tu caso.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado FixxxerMetal

  • PIC10
  • *
  • Mensajes: 11
RE: EEPROM del 16f87x
« Respuesta #4 en: 29 de Marzo de 2006, 05:48:00 »
Ok gracias. Lo q quiero es ller un teclado matricial y comparar la clave que se introduce con la q esta gurdada en la eeprom, mi idea fue usar una localidad de memoria por cada digito. Si la eeprom contiene 255 en dichas localidades el programa debe pedirme que introduzca una clave nueva. Todo esto debe ser visualizado en una pabtalla LCD, preferiblemente a 4 bits. me gustaria ver como utilizar la subrutina que trae el C para LCD ya que por aca me dijeron como ahorrarme la subrutina de lectura y escritura de la eeprom. Todo esto es para automatizar el lab donde estudio, si la clave es de un profesor se debe abrir la puerta, encender energizar el laboratorio, si esta muy caliente encender el aire acondicionado y contar a las personas que entran, de modo que despues de las 5pm cuando salga la ultima persona el sistema debe apagarse. Algo de domotica

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: EEPROM del 16f87x
« Respuesta #5 en: 29 de Marzo de 2006, 15:24:00 »
Escrito originalmente por FixxxerMetal
Ok gracias. Lo q quiero es ller un teclado matricial y comparar la clave que se introduce con la q esta gurdada en la eeprom, mi idea fue usar una localidad de memoria por cada digito. Si la eeprom contiene 255 en dichas localidades el programa debe pedirme que introduzca una clave nueva. Todo esto debe ser visualizado en una pabtalla LCD, preferiblemente a 4 bits. me gustaria ver como utilizar la subrutina que trae el C para LCD ya que por aca me dijeron como ahorrarme la subrutina de lectura y escritura de la eeprom. Todo esto es para automatizar el lab donde estudio, si la clave es de un profesor se debe abrir la puerta, encender energizar el laboratorio, si esta muy caliente encender el aire acondicionado y contar a las personas que entran, de modo que despues de las 5pm cuando salga la ultima persona el sistema debe apagarse. Algo de domotica


Bien, entonces, en que te podemos echar una mano?

Las rutinas de LCD vienen con el ccs , con el hitech pic y con el C18 no debieras reprogramarlas.

Esto si usa el C, claro está.

La lecto/grabacion de EEPROM también ya está resuelta y si navegas un poquito por el foro verás que varios preguntaron lo mismo en otras ocasiones y está bastante resuelto como se hace, no te costará casi nada.

La lectura del teclado matricial te aconsejo que uses el PORTB con los weak pullups habilitados.  Eso hace que detectes la presion de las teclas a 0V.  Es algo bastante simple, si no entiendes nuevamente pregunta y te respondermos.

Saludos y suerte con tu proyecto.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)