Autor Tema: PROBLEMA DE ESCRITURA EEPROM PIC18F452  (Leído 2002 veces)

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

Desconectado dekike

  • PIC10
  • *
  • Mensajes: 20
PROBLEMA DE ESCRITURA EEPROM PIC18F452
« en: 16 de Diciembre de 2008, 19:21:23 »
Hola mis amigos programadores. Tengo un problema de escritura de EEPROM del PIC18F452. No puedo hacer que se guarden los datos en la eeprom utilizando la funcion EEPROM_WRITE(). Por el contrario la funcion EEPROM_READ() si funciona. Esto lo he comprobado porque al inicializar la memoria con __EEPROM_DATA() se guardan los datos que le paso como argumentos, pero cuando trato de cambiarlos con EEPROM_WRITE() no lo logro y permanencen iguales.

Estas funcionnes las he utilizado con exito programando el PIC16F877 con HI-TECH PICC LITE v.9.5.
Lo que pasa es que estoy pasando dicho programa al PIC18F452 porque tiene mas memoria y necesito incluir mas funcionalidades a un proyecto que estoy desarrollando.

La simulacion con proteus funciona bien. Pero al programar el micro, no funciona como debe ser. Estoy programando con WinPic800 y JDM.

Ya he confugurado los fuses de diferentes maneras, pero nada.

Agradezco que me ayuden a solucionar este detalle porque hace parte de un proyecto. 

Les dejo un programa de prueba y el archivo de simulacion.


/*
PROGRAMA PARA PROBAR LAS FUNCIONES DE ESCRITURA Y LECTURA DE LA EEPROM DEL
MICROCONTROLADOR PIC18F452

EDITADO CON:
MPLAB IDE v7.01,
COMPILADOR HI-TECH PICC18 PRO 9.63
*/

#include <htc.h>
#include "delay.h"


//Fuses Configuration
__CONFIG(1, XT);                //
__CONFIG(2,BORDIS & WDTDIS);       //BORDIS=brown out reset disabled, WDTDIS=watch dog timer disabled
//__CONFIG(3,CCP2RC1);            //--------------   
__CONFIG(4,DEBUGDIS & LVPDIS & STVRDIS); //DEBUGDIS=debug disabled, LVPDIS=low voltage programmin disabled
__CONFIG(5,UNPROTECT);          //unprotected
__CONFIG(6,WRTEN);             //
__CONFIG(7,TRU);                //all unprotected including boot block


#define bit_set(var,bitno) ((var) |= 1 << (bitno))   //para escanear bits
#define bit_clr(var,bitno) ((var) &= ~(1 << (bitno)))
#define testbit(data,bitno) ((data>>bitno)&0x01)   //testear bit


unsigned char DATO=0;

__EEPROM_DATA(0, 0, 0, 0, 0, 0, 0, 0);  //INICIALIZAR LA EEPROM

void
main(void)
{   
   int i=0;

   TRISD    = 0;   //PUERTO D COMO SALIDA
    PORTD    =0;

   PORTD = 0x02;      //ENCENDER EL LED EN RD0

   for(i=0; i<10 ; i++)      //RETARDO DE UN SEGUNDO APROX.
      DelayMs(100);

   PORTD    = 0x00;    //APAGAR EL LED EN RD0

   EEPROM_WRITE(0,0x11);
   EEPROM_WRITE(1,0x22);
   EEPROM_WRITE(2,0x33);
   EEPROM_WRITE(3,0x44);

   DelayMs(10);
   
   DATO = EEPROM_READ(0);   //LEER LA DIRECCION O DE LA EEPROM


   while(1){
      if(DATO == 0x11)  //SI LA VARIABLE LEIDA CORRESPONDE AL VALOR , SE ENCIENDE EL FLASHEA
      {   
            PORTD    = 0x02;
            DelayMs(100);
            PORTD    = 0x00;
            DelayMs(100);
      }
      else
         PORTD    = 0x02;
   }
}



Desconectado ElVale

  • PIC10
  • *
  • Mensajes: 31
Re: PROBLEMA DE ESCRITURA EEPROM PIC18F452
« Respuesta #1 en: 18 de Diciembre de 2008, 07:40:00 »
Bueno si funciona bien en proteus el problema no es el código. No uso Winpic pero a lo mejor tiene algún clase de Write Protection activada cuando programas.

Desconectado dekike

  • PIC10
  • *
  • Mensajes: 20
Re: PROBLEMA DE ESCRITURA EEPROM PIC18F452
« Respuesta #2 en: 27 de Diciembre de 2008, 17:17:02 »
Gracias por tu opinion ElVale. Segui probando codigo pero sin resultados positivos con esta version de Hi-Tech para 18F. Lo de los fuses los configure de distintas formas pero nada. Probe con C18 y si pude grabar y leer la eeprom de datos. Finalmente retome un codigo para Pic16f877 con Hi-tech Picc Lite, depure todo el codigo posible para meter otra funcion y finalmente pude obtener el programa deseado con una ocupacion de 98.5 % de la memoria de programa.

Seguire trabajando con los 18F probando distintos compiladores, pero el Hi-Tech para 16F me gusta.

Hasta pronto. 


 

anything