Autor Tema: Guardar en la EEPROM  (Leído 1691 veces)

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

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Guardar en la EEPROM
« en: 11 de Marzo de 2017, 21:16:13 »
Buenas noches a todos, tengo un pequeño problemita al intentar guardar un valor en la EEPROM,  verán tengo un select case, en el primer caso tengo indicaciones y formulas, en el segundo la posibilidad de cambiar algunas variables y en el tercero una función de guardar las variables modificadas en el segundo caso,todo manejado con una interrupción para ir desde el case 0 al case 2. Al iniciar va todo bien. si yo presiono el botón de la interrupción paso al case 1 donde puedo modificar la variable (si yo la modifico todo va bien si no la modifico todo va mal), vuelvo a presionar el botón de la interrupción y paso al case 2 aquí trabaja la  función para guardar el valor de la variable luego regresa al case 0 y he aquí el problema, aparentemente guarda el valor de la variable, pero la pantalla se queda congelada y el pic no responde a ningún botón ni el de la interrupción, alguien tiene alguna idea de a q pueda deberse ¿?

observación mía:

Para la indicación en una lcd uso una función para mostrar decimales si la cambio por el LCD_Out, el problema desaparece.
Si comento la función de Guardar, el problema desaparece.
Como comente, si cambio el valor de la variable, no hay problema, pero si no la cambio el problema  se presenta despues de guaradar.
Si cambio la variable a un valor extremo inferior o superior (30 o 600) el problema se presenta igual.

Pero Necesito de esas funciones, estoy algo agotado de tanto revisar una y otra vez, si alguien tuviese una idea, se los agradecería muchísimo.
 :(  :(  :(

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Guardar en la EEPROM
« Respuesta #1 en: 11 de Marzo de 2017, 22:20:02 »
Si no provees la funcion de la cual tenes problemas es dificil poder ayudarte.

Si estas usando funciones del LCD o delays dentro de la interrupcion te sugiero que lo saques.

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Re:Guardar en la EEPROM
« Respuesta #2 en: 12 de Marzo de 2017, 00:11:32 »
Discúlpenme por dar información incompleta.
Código: [Seleccionar]
void Lcddec (const unsigned char fila, unsigned char col, const float num, const unsigned char dec){
unsigned char x=0;
unsigned char nent=0;
unsigned long ent=num;
float decimales=num;
float resultado=0;
unsigned long rdec=0;
unsigned char texto[6];

 for(x=0;ent>0;x++){
 ent/=10;
 nent++;
 }
 if(nent==0) nent=1;
 ent=num;
 resultado=decimales-ent;
 for(x=1;x<=dec;x++)
 resultado*=10;
 for(x=0;x<nent;x++){
 texto[x]=ent%10;
 ent/=10;
 }
 for(x=nent;x>0;x--)
 Lcd_Chr(fila,col++,texto[x-1]+48);
 Lcd_Chr_cp('.');
 col++;
 rdec=resultado;
 for(x=0;x<dec;x++){
 texto[x]=rdec%10;
 rdec/=10;
 }
 for(x=dec;x>0;x--)
 Lcd_Chr(fila,col++,texto[x-1]+48);
 Lcd_Chr_Cp(' ');
}

Bueno el codigo en realidad no es mio si no que es copiado, aunque agregue la ultima linea por q me dejaba caracteres, bueno eso no viene al caso. :oops:
Este codigo es para guardar en la memoeriaEEPROM, lo que hice fue separar mi variable en 2 partes para poder guardarlas, ya q esun numero grande y con decimales.
Código: [Seleccionar]
void Guardarsp (){
 sp1 = sp / 10;
 sp2 = (( sp * 10 ) - (sp1 * 100));

 EEPROM_Write(0,sp1);
 EEPROM_Write(1,sp2);
 delay_ms (100);
}

Al encender lee la memoria y los vuelvo a unir mediante una formula
« Última modificación: 12 de Marzo de 2017, 00:16:35 por D1to »


 

anything