Autor Tema: Eeprom interna no graba bien  (Leído 2440 veces)

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

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Eeprom interna no graba bien
« en: 30 de Septiembre de 2007, 17:38:20 »
Hola amigos estoy intentando meter unos valores para una variables en una eeprom interna en un 16f876A pero no hay manera se que  llegan bien los datos al pic por que los veo por el puerto serie pero cuando apago y vuelvo a encender... nada hay unos valores rarisimos que no corresponden, esta es la rutina de grabado
Código: [Seleccionar]
Cte_Propor=((cbuff[2]-48)*10)+cbuff[3]-48;
         Cte_Propor_dec=((cbuff[5]-48)*10)+((cbuff[6]-48));
         Cte_Int=((cbuff[8]-48)*10)+cbuff[9]-48;
         Cte_Int_dec=((cbuff[11]-48)*10)+((cbuff[12]-48));
         Cte_Der=((cbuff[14]-48)*10)+cbuff[15]-48;
         Cte_Der_dec=((cbuff[17]-48)*10)+((cbuff[18]-48));
         
         ref=((cbuff[20]-48)*10)+cbuff[21]-48;
         ref_dec=((cbuff[23]-48)*10)+((cbuff[24]-48));
         
         write_eeprom(0x2100,Cte_Propor);
         delay_ms ( 200 ) ;
         write_eeprom(0x2101,Cte_Propor_dec);
         delay_ms ( 200 ) ;
         write_eeprom(0x2102,Cte_Int);
         delay_ms ( 200 ) ;
         write_eeprom(0x2103,Cte_Int_dec);
         delay_ms ( 200 ) ;
         write_eeprom(0x2104,Cte_Der);
         delay_ms ( 200 ) ;
         write_eeprom(0x2105,Cte_Der_dec);
         delay_ms ( 200 ) ;
         write_eeprom(0x2106,ref);
         delay_ms ( 200 ) ;
         write_eeprom(0x2107,ref_dec);
         delay_ms ( 200 ) ;
         
         Cte_Propor=Cte_Propor+(Cte_Propor_dec/100);
         Cte_Int=Cte_Int+(Cte_Int_dec/100);
         Cte_Der=Cte_Der+(Cte_Der_dec/100);
         ref=ref+(ref_dec/100);

y este para leerlo

Código: [Seleccionar]
   Cte_Propor=read_EEPROM (0x2100);
   Cte_Propor_dec=read_EEPROM (0x2101);
   Cte_Int=read_EEPROM (0x2102);
   Cte_Int_dec=read_EEPROM (0x2103);
   Cte_Der=read_EEPROM (0x2104);
   Cte_Der_dec=read_EEPROM (0x2105);
   ref=read_EEPROM (0x2106);
   ref_dec=read_EEPROM (0x2107);
   
   Cte_Propor=Cte_Propor+(Cte_Propor_dec/100);
   Cte_Int=Cte_Int+(Cte_Int_dec/100);
   Cte_Der=Cte_Der+(Cte_Der_dec/100);
   ref=ref+(ref_dec/100);

muchas gracias un saludo
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Eeprom interna no graba bien
« Respuesta #1 en: 30 de Septiembre de 2007, 23:39:42 »
Estas seguro que es 0x2100 el inicio de la EEPROM en es PIC?? :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Eeprom interna no graba bien
« Respuesta #2 en: 01 de Octubre de 2007, 04:34:07 »
Efectivamente como anuncia Marcos, el problema lo tienes en la dirección que has usado. Aunque la dirección de la eeprom sea la 0x2100, el comando write_eeprom ya lo da por hecho y empieza a contarlas a partir de la 0.
Por tanto, si pones write_eeprom (0,Cte_Propor) verás como funciona.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Eeprom interna no graba bien
« Respuesta #3 en: 02 de Octubre de 2007, 17:38:29 »
hola muchas gracias por las respuestas, ya lo habia probado asi y tampoco funcionaba hasta que me di cuenta que estaba buardando en una posicion de la eeprom una variable float con lo que guardaba lo que queria.... en fin visto el problema y solucionado ya lo solucioné... que tiempo de accesoa  la eprom soleis usar?? unos 20 ms?? muchas gracias
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Eeprom interna no graba bien
« Respuesta #4 en: 03 de Octubre de 2007, 08:35:15 »
Yo antes esperaba 5 ms y me iba perfecto.  :P

Pero ahora uso la interrupción de fin de escritura y me va mejor aún, porque tarda lo que tiene que tardar, ni mas ni menos de lo necesario ...  :mrgreen:

Código: C++
  1. #int_eeprom
  2. /** \brief Interrupción por : Fin escritura EEPROM interna.
  3.   */
  4. void interrupt_service_rutine_eeprom(void) {
  5.    flag_Writing_INTERNAL_EEPROM=0;
  6. }
  7.  
  8. /** \brief Función para la escritura de un byte dando su valor y su dirección absoluta.
  9.   *
  10.   * Esta función utiliza la interrupción INTEEPROM en main.c que indica cuando ha finalizado la escritura de la EEPROM.
  11.   *
  12.   * \param memAddress Dirección absoluta de 8 bits a escribir (rango de 00h a FFh).
  13.   * \param data Valor del byte a escribir (rango de 00h a ffh).
  14.   *
  15.   * \return int1 0 Write Ok, 1 Write Error
  16.   */
  17. int1 writeByteINTEEPROM(int8 memAddress, int8 data){
  18.  
  19.    int1 ret;
  20.    int8 datatest;
  21.  
  22.    ret=0;
  23.    flag_Writing_INTERNAL_EEPROM=1;
  24.    enable_interrupts(int_eeprom);
  25.    write_eeprom (memAddress, data);
  26.    while(flag_Writing_INTERNAL_EEPROM==1){/*Do nothing, Only wait for write finish*/}
  27.    disable_interrupts(int_eeprom);
  28.    datatest = readByteINTEEPROM(memAddress);
  29.    if(datatest != data) ret = 1;
  30.    return ret;
  31. }

Y por supuesto compruebo que efectivamente lo que he enviado a escribir es lo que he escrito.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: Eeprom interna no graba bien
« Respuesta #5 en: 17 de Enero de 2009, 18:44:50 »
Si quiero escribir en la eeprom con la directiva #ROM tengo que poner las direcciones a partir de 0x2100, pero si lo hago con write_eeprom empiezo desde el 0.
Esto me genero algunos problemas, e intente encontrar en el datasheet donde ponia que la eeprom esta en la dir 0x2100 y no encontre nada  :?
Sabeis donde lo dice?

Por cierto, en el ejemplo de CCS hace algo asi:
#rom  0x2100={1,2,3,4,5,6,7,8}

pero podria hacer asi?
#rom 0x2104={1,2,3,4,5,6,7,8,9,10,11,12,13,14}

Es decir, podria empezar en cualquier direccion, y escribir mas de 8 valores?
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Eeprom interna no graba bien
« Respuesta #6 en: 17 de Enero de 2009, 20:41:10 »
La cantidad de valores que puedes escribir en la EEPROM dependera del tamaño de tu EEPROM y si pones #rom 0x2104 comenzaras a escribir en la posicion 0x04 , la 0x00, 0x01, 0x02, 0x03, 0x04, quedarian en blanco


Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: Eeprom interna no graba bien
« Respuesta #7 en: 18 de Enero de 2009, 14:45:03 »
Genial! Gracias Sander!
Solo me queda saber donde viene especificado que la memoria EEPROM comienza en la direccion 0x2100. Pero es solo por curiosidad  :mrgreen:
Salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Eeprom interna no graba bien
« Respuesta #8 en: 18 de Enero de 2009, 19:59:34 »
Si no me equivoco esa informacion esta en la especificaciones de programacion de los PICs, es la informacion que se utiliza para hacer los programadores de PIC


Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube