TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: jhoser en 26 de Mayo de 2016, 22:13:13

Título: Guardar variable int en Eeprom Interna pic16f877a
Publicado por: jhoser en 26 de Mayo de 2016, 22:13:13
Buenas a todos :),

Gracias al foro estoy avanzando, de apoco pero avanzando con el manejo de los micros. Tengo una idea y es hacer un contador de vueltas para un motor. Inicialmente tengo el LCD, un pic16F877a y 3 botones. El tema que me trae aquí es que he encontrado que al guardar la variable NroVueltas en la eeprom interna del pic (aparentemente la graba porque lo veo en la simulación cuando cargo el .cof) y darle stop a la simulación cuando nuevamente enciendo la misma no se muestra el valor almacenado en la variable "NroVueltas".
Para grabar la variable en la eeprom estoy usando una función de RedPic que usa la #int_eeprom.  Les agradeceria mucho si me pudieran explicar que es lo que no estoy tomando en cuenta para grabar de modo correcto la eeprom interna en la posicion 0. La idea a futuro es guardar mas variables segun vaya necesitando, de antemano muchas gracias por la ayuda, saludos!! (adjunto programa y simulación).
Título: Re:Guardar variable int en Eeprom Interna pic16f877a
Publicado por: jhoser en 29 de Mayo de 2016, 23:17:01
Buuenas a todos :),
Me puse a averiguar y al parecer es un tema con el simulador Proteus, acabo de añadir una rutina para leer la variable "NroVueltas" y cuando apago la simulación, la enciendo y entro directamente a EEPROM (en mi menú) lee el valor previamente almacenado. Considero que era lo que estaba buscando, cualquier observación o sugerencia será bienvenida de antemano muchas gracias por la ayuda, saludos!! (adjunto código modificado)
Título: Re:Guardar variable int en Eeprom Interna pic16f877a
Publicado por: DominusDRR en 01 de Junio de 2016, 10:43:59
Saludos.

Según recuerdo tu puedes grabar un byte en cada celda de la memoria EEPROM, en tu caso me imagino que tu variable int es de 16 bits, por lo que tendrías que dividirla en 2 bytes para guardarlas.

Yo lo haría algo asi:


Código: C
  1. void writeByteINTEEPROM(int MiVariableInt)
  2. {
  3.    char ValorBajo;
  4.    char ValorAlto;
  5.  
  6.    ValorBajo = (char)(MiVariableInt & 0xFF); //obtengo la parte baja la variable int
  7.    ValorAlto = (char)((MiVariableInt>>8) & 0xFF); //obtengo la parte alta de la variable int
  8.    flag_Writing_INTERNAL_EEPROM=1;
  9.    enable_interrupts(int_eeprom);
  10.    write_eeprom (PunteroEEPROM, ValorBajo);//guardo la parte baja
  11.  
  12.    while(flag_Writing_INTERNAL_EEPROM);
  13.    PunteroEEPROM++;
  14.    write_eeprom (PunteroEEPROM, ValorAlto); //guardo la parte alta
  15.    while(flag_Writing_INTERNAL_EEPROM);
  16.  
  17.    PunteroEEPROM++;
  18.    disable_interrupts(int_eeprom);  
  19. }

En el inicio de tu código debes iniciarlizar la variable global PunteroEEPROM a cero.
Título: Re:Guardar variable int en Eeprom Interna pic16f877a
Publicado por: alexin en 09 de Junio de 2016, 15:51:36
yo me canse de usar proteus para simular porque da muchos errores y diferencias con lo real. Opte por montar prototipos físicos y trabajar sobre ellos porque voy a la fija.