Autor Tema: cosa rara con la eeprom  (Leído 3882 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #15 en: 15 de Febrero de 2006, 17:44:00 »
desde ya gracias por el tiempo que me brindas!

la variable que se graba va desde 0,2 a 2 con pasos de 0,0,5 por pulsada del pulsador,osea que cada pulso sube en 0,005 o baja el mismo valor de la variable

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #16 en: 15 de Febrero de 2006, 17:46:00 »
sigo... me olvide de decirte que a veces pasa por un entero,es decir que si estoy en 0,995 y pulso una vez mas para que suba voy a obtener 1.

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
RE: cosa rara con la eeprom
« Respuesta #17 en: 16 de Febrero de 2006, 19:05:00 »
¿porque no lo grabas como float?  aqui dicen como:

http://miarroba.com/foros/ver.php?foroid=6510&temaid=4382206

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #18 en: 17 de Febrero de 2006, 06:57:00 »
RE: cosa rara con la eeprom[/b]

<

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
RE: cosa rara con la eeprom
« Respuesta #19 en: 17 de Febrero de 2006, 07:11:00 »
la parte importante de ese post era esta:


Usas ccs?? Si lo usas hay una libreria que te perimte hecar esto, se llama internal_eeprom.h. Con la funcion que pones tu podras almacenar variables solo de ocho bits. Prueba con esta libreria y nos cuentas.

void write_float_eeprom(address, float data)
//// Call to write a floating point number

float read_float_eeprom(address)
//// Call to read a floating point number

Salu2


Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #20 en: 17 de Febrero de 2006, 09:03:00 »
dunede azul: donde puedo ubicar la libreria internal_eeprom.h?

desde ya gracias!!!

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
RE: cosa rara con la eeprom
« Respuesta #21 en: 17 de Febrero de 2006, 09:14:00 »
esta incluida en ccs, solo tienes que incluirla en tu programa, de todas formas la ubicas en la carpeta "Drivers" en el directorio donde tienes instalado el CCS.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #22 en: 17 de Febrero de 2006, 10:21:00 »
ok gracias . lo unico que encontre fue internal_eeprom ,pero punto c
es lo mismo?

10f206

  • Visitante
RE: cosa rara con la eeprom
« Respuesta #23 en: 17 de Febrero de 2006, 12:22:00 »
Que Casualidad, anoche me sucedio exactamente lo mismo de esctritura mala, y lectura mala, asi que era un problema compartido, lo resolvi de la siguiente forma, quedo bien y ya no tuve que preocuparme, funciono toda la noche perfectamente:

El Eeprom necesita de corriente estable para funcionar, es decir que hay que esperar un poco a que toda la vaina se estabilice, asi que puse una espera de 1 segundo al iniciar.

La escritura en el eeprom debe hacerse lentamente, es decir 1 BYTE a la vez, en este caso se guardan 2 conjuntamente, ya que se trata de un WORD, bueno, hay que esperar AL MENOS 25 milisegundos (25/1000) entre grabacion y grabacion, si se guardan 2 juntos, entonces tendremos que el segundo siempre lo guarda bien, pero le primero A VECES los hace bien, esto de las inconsistencias es de lo peor.

Para la lectura la misma historia que la escritura, segun entiendo el CCS no espera estos tiempos de ordinario y sera necesario hacerlo manualmente, por favor corroboren esto.

Hay un manual medio sencillo, pero explica estas y otras cosas de el eeprom, del adc, pwm y otras micadas de los pics en www.mikroelectronica.co.yu, es gratuito y vale la pena tenerlo.

Saludos Cordiales.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: cosa rara con la eeprom
« Respuesta #24 en: 17 de Febrero de 2006, 12:39:00 »
no puedo acceder a la web que escribiste

serias tan amable de chequearla?

gracias

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
RE: cosa rara con la eeprom
« Respuesta #25 en: 17 de Febrero de 2006, 21:22:00 »
a fastyx, esa es la libreria....

ojo yo no he probado esa libreria, las veces que he tenido que guardar o leer  datos tipo float en la eeprom lo he hecho con estas dos rutinas hechas a medida:

void leer(int32&variable,byte base){ //Lee 4 posiciones de la eeprom
byte bajo,medio,alto,M_alto;              //y las convierte en un valor de
bajo   = read_eeprom(base+0);        // 32Bits
medio  = read_eeprom(base+1);
alto   = read_eeprom(base+2);
m_alto = read_eeprom(base+3);
variable = Make32(m_alto,alto,medio,bajo);
}


void guardar(int32 variable,byte base){    //Guarda una variable de 32Bit
byte dato;                                                                            //en la memoria eeprom
dato=Make8(variable,0);
write_eeprom(base+0,dato);
dato=Make8(variable,1);
write_eeprom(base+1,dato);
dato=Make8(variable,2);
write_eeprom(base+2,dato);
dato=Make8(variable,3);
write_eeprom(base+3,dato);
}


ejemplo de uso:

guardar(valor,0);  

donde valor es una variable float  y 0 la direccion donde se comienzan a guardar los 4 bytes que conforman la variable valor ( float = 32 bits = 4 bytes)

leer(valor,0);   lee 4 bytes de la eeprom comenzando en la direccion 0 y los almacena en la variable "valor"  que es un float.


Al amigo 10f206 le comento que he usado estas dos rutinas intensamente y jamas me han grabado nada errado y como podras ver, no hay ningun tiempo de espera entre grabaciones, a menos que la instruccion Make8 se tarde los 25milisegundos que mensionas, de todas formas tambien he usado este segmento de codigo en un programa y siempre me ha funcionado perfecto...


IF (Indice==7){
                  direccion=0;
                  forma_dir(Programa,direccion);
                  write_eeprom(direccion,Dia_p);
                  write_eeprom(direccion+1,H_ini);
                  write_eeprom(direccion+2,M_ini);
                  write_eeprom(direccion+3,H_fin);
                  write_eeprom(direccion+4,M_fin);
                  write_eeprom(direccion+5,esquema_Tiempos);
                  write_eeprom(direccion+6,esquema_luces);
                  indice=1;

aqui no hay espera de ningun tipo..

Suerte chicos..