Autor Tema: como escribir en la eeprom? hay una interrupcion? apagado abrupto  (Leído 4324 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
como escribir en la eeprom? hay una interrupcion? apagado abrupto
« en: 25 de Noviembre de 2010, 17:22:15 »
Hola, estoy escribiendo en la eeprom con al funcion write_eeprom que viene en el ejemplo EX_INTEE.C.
De este foro obtune una version para 16 bits y hago lo siguiente:
if ((minutos5 - t ) == 5){ /// este if debe estar dentro del rango de refresco de el while superior. debido a que tiene que coincidir con el minuto x (ver diferencia minutos5-m) [graba cada 5 minutos]
      write_eeprom16(5,6,minutos5);
      delay_ms(1000);
      if (read_eeprom16(5,6) != minutos5){
         iniciar_eeprom(1);
         write_eeprom16(5,6,minutos5);
      }
      t = minutos5;

minutos5 es una variable que proviente del timer 2, en este momento se incrementa cada un segundo.
En este caso esta escribiendo en la eeprom cada cinco segundos.
Sin embargo, la primer grabacion funciona, pero una vez que apago el micro abruptamente ya no graba mas, nisiquiera borra.
No tengo un debuger para ver bien que es lo que esta pasando asi que pense en el foro.
Hay alguna interrupcion para escribir en la eeprom? porque tengo un monton de otras interrupciones laburando y no se si haran cosa rara al momento de escribir. La funcion iniciar_eeprom con el argumento 1 me limpia la eeprom.

cualquier consejo sera bienvenido, jej
gracias  :g)

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #1 en: 06 de Diciembre de 2010, 15:51:25 »
 :(

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #2 en: 06 de Diciembre de 2010, 17:48:45 »
  No se como implementa CCS la función write_eeprom();

  En todo caso veo que en tu ejemplo hacés un delay en luego de la primer escritura, pero en la segunda escritura no ponés ningún delay.

  Yo utilizo el compilador HiTech y en una prueba para un decodificador PPM para radiocontrol hacía grabaciones en la EEPROM y funcionaba bien.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #3 en: 06 de Diciembre de 2010, 18:28:38 »
Sin embargo, la primer grabacion funciona, pero una vez que apago el micro abruptamente ya no graba mas, nisiquiera borra.

Hola lopb, no entiendo bien de que se trata el problema (por la afirmación que cito). Por otra parte, que función cumple iniciar_eeprom(1);?

Saludos!

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #4 en: 07 de Diciembre de 2010, 15:14:38 »
Sin embargo, la primer grabacion funciona, pero una vez que apago el micro abruptamente ya no graba mas, nisiquiera borra.

Hola lopb, no entiendo bien de que se trata el problema (por la afirmación que cito). Por otra parte, que función cumple iniciar_eeprom(1);?

Saludos!
quiere decir que la primer grabacion si funciona, pero luego no anda mas, esto sucede si apago el micro abruptamente, igual no tengo otra forma de apagarlo, simplemente le corto la alimentacion. Luego al encenderlo nuevamente no graba mas en esa direccion de eeprom.
Estoy grabando horas de uso que ahora esta como segundos, y grabo cada 5 segundos. Lo apago en 25 por ejemplo, y al reiniciarlo sigue desde 25 pero no graba mas.
yo no se si hay una rutina de escritura o reescritura en la eeprom. Lo raro es que reescribir reescribe bien, en el primer encendido. Luego no.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #5 en: 07 de Diciembre de 2010, 20:47:46 »
Hola lopb, veo que no estás usando las librerías que trae el CCS para guardar en la eeprom números diferentes a 8 bits.  Como no se como está escrita la librería que usas me queda muy dificil ayudarte; tal vez alguien más que si la conozca.

Saludos!
« Última modificación: 07 de Diciembre de 2010, 22:04:13 por bmb »

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #6 en: 13 de Diciembre de 2010, 12:29:52 »
Hola lopb, veo que no estás usando las librerías que trae el CCS para guardar en la eeprom números diferentes a 8 bits.  Como no se como está escrita la librería que usas me queda muy dificil ayudarte; tal vez alguien más que si la conozca.

Saludos!
cuales son esas librerias? asi las pruebo a ver si andan.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #7 en: 13 de Diciembre de 2010, 12:31:49 »
cuales son esas librerias? asi las pruebo a ver si andan.

C:\Program Files (x86)\PICC\Drivers\internal_eeprom.c

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #8 en: 13 de Diciembre de 2010, 16:33:38 »
cuales son esas librerias? asi las pruebo a ver si andan.

C:\Program Files (x86)\PICC\Drivers\internal_eeprom.c
ok, lo voy a probar, sin embargo veo que usa las mismas funciones que use yo, read_eeprom y write_eeprom.
La pudiste usar vos esta libreria?
porque yo tengo muchas interrupciones dando vueltas y no se si traeran problemas al escribir en la eeprom.
Igual no creo que sea eso, pera que pongo en practica esta lib para estar seguros.
salu2 y gracias

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #9 en: 13 de Diciembre de 2010, 18:34:20 »
Hola lopb, yo he utilizado esas librerías sin ningún problema.  En lo único que si debes poner atención es al asignar las direcciones de tal manera que no sobreescribas datos de una variable sobre otra (en las mayores o menores a 8 bits).

Saludos!

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #10 en: 13 de Diciembre de 2010, 18:43:17 »
cuales son esas librerias? asi las pruebo a ver si andan.

C:\Program Files (x86)\PICC\Drivers\internal_eeprom.c
Hola, estoy usando la libreria que me recomendaste y aparentemente es lo mismo que usaba yo, son funciones que vienen con el compilador, write_eeprom y read_eeprom
YO estaba usando esas funciones pero no siempre me hacia bien la reescritura.
DEjo el programa basico que estoy usando, las mismas funciones en un programa mucho mas grande, no anda bien.
Yo no se si sera que justo que estoy escribiendo hay una interrupcion y corta el grabado o ke?
#include <18F452.h>
//////// Fuses: LP,XT,HS,RC,EC,EC_IO,H4,RC_IO,PROTECT,NOPROTECT,OSCSEN
//////// Fuses: NOOSCSEN,NOBROWNOUT,BROWNOUT,WDT1,WDT2,WDT4,WDT8,WDT16,WDT32
//////// Fuses: WDT64,WDT128,WDT,NOWDT,BORV20,BORV27,BORV42,BORV45,PUT,NOPUT
//////// Fuses: CCP2C1,CCP2B3,NOSTVREN,STVREN,NODEBUG,DEBUG,NOLVP,LVP,WRT
//////// Fuses: NOWRT,NOWRTD,WRTD,NOWRTB,WRTB,WRTC,NOWRTC,CPD,NOCPD,CPB
//////// Fuses: NOCPB,EBTR,NOEBTR,EBTRB,NOEBTRB
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOOSCSEN
#FUSES NOPUT
#FUSES CCP2C1
#FUSES NOSTVREN
#FUSES NODEBUG
#FUSES NOWRTD
#FUSES NOWRTB
#FUSES NOWRTC
#FUSES NOCPB
#FUSES NOEBTR
#FUSES NOEBTRB

#use delay(clock=20000000)
#use rs232 (baud=9600,xmit=PIN_C6,rcv=PIN_C7)

//#include "stdlib.h"
#include <input.c>
#include "limits.h"
#include "internal_eeprom.c"

// The following initializes the first 4 locations of the data EERPOM
//  using the #ROM directive
/* #IF defined (__PCM__)
#rom 0x2100={1,2,3,4}
#elif defined(__PCH__)
#rom int 0xf00000={1,2,3,4}
#elif defined(__PCD__)
#rom 0x007FFC00={1,2,3,4}
#endif
*/

 typedef int8 INTEE;
char c;
int16 data;
void main() {

   unsigned int8 i, j, address;
   INTEE value,value1, value2;
   do {
      printf("\r\n\nEEPROM:\r\n");              // Display contents of the first 64
      for(i=0; i<=3; ++i) {                     // bytes of the data EEPROM in hex
         for(j=0; j<=15; ++j) {
            printf( "%2x ", read_eeprom( i*16+j ) );
         }
         printf("\n\r");
      }
   printf("Escoja tipo 8 o 16 bits, 1, 2");
   c= getc();
   if (c == '1'){
      printf("\r\nOpcion 1 (8bit) Location to change: ");
      address = gethex();
      printf("\r\nNew value: ");
      value = gethex();
      write_eeprom( address, value );
   }
   if (c == '2') {
      printf("\r\nOpcion 2 (16bit) Location to change: ");
      address = gethex();
      printf("\r\nNew values (1): ");
      value1 = gethex();
      printf("\r\nNew values (2): ");
      value2 = gethex();
   data = make16(value1,value2);
   write_int16_eeprom(address,data);
   }
   } while (TRUE);
}

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #11 en: 13 de Diciembre de 2010, 18:44:35 »
Hola lopb, yo he utilizado esas librerías sin ningún problema.  En lo único que si debes poner atención es al asignar las direcciones de tal manera que no sobreescribas datos de una variable sobre otra (en las mayores o menores a 8 bits).

Saludos!
hola, si me di cuenta que no tienen doble direccion para 16 bits. NO hay problema con eso.
Ahora, tenes idea de si apago abruptamente traiga problemaS?
como apago el pic normalmente? hay alguna funcion shutdown? no se ni como implementarla.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #12 en: 13 de Diciembre de 2010, 19:25:08 »
Hola lopb, para eso he visto que se debe usar la interrupción de un pin extra del PIC y un circuito adicional parecido al que encuentras en  este hilo.  Cuando el pin detecta el corte,  el capacitor sostiene encendido al PIC mientras hace la grabación(no he ensayado este método aún).
También te recomiendo que leas todo este hilo del foro de CCS.

Saludos!

Desconectado lopb

  • PIC12
  • **
  • Mensajes: 77
    • contactos lopb
Re: como escribir en la eeprom? hay una interrupcion? apagado abrupto
« Respuesta #13 en: 16 de Diciembre de 2010, 14:54:58 »
Hola lopb, para eso he visto que se debe usar la interrupción de un pin extra del PIC y un circuito adicional parecido al que encuentras en  este hilo.  Cuando el pin detecta el corte,  el capacitor sostiene encendido al PIC mientras hace la grabación(no he ensayado este método aún).
También te recomiendo que leas todo este hilo del foro de CCS.

Saludos!
ok, lo voy a ver, muchas gracias bmp


 

anything