Autor Tema: force_hw 24512.h problema  (Leído 1695 veces)

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

Desconectado radioelf

  • PIC10
  • *
  • Mensajes: 42
    • Radioelf
force_hw 24512.h problema
« en: 01 de Septiembre de 2007, 11:00:08 »
 Hola, estoy teniendo problemas con la escritura de una EEPROM 24LC512 si utilizo el hardware del micro, (16F876a) y la verdad es que no se la razón,
si después de escribir leo la EEPROM si que me funciona utilizando el hardware...

#use i2c(master, Fast, sda=EEPROM_SDA, scl=EEPROM_SCL)  // funciona correctamente

#use i2c(master, Fast, sda=EEPROM_SDA, scl=EEPROM_SCL,force_hw) // solo escribe una sola vez


    do{                                           
                arg=buffer_RX;                         
                write_ext_eeprom (i,buffer_RX ;         
             // valor = read_ext_eeprom(i);                  si leo si que funciona utilizando "force_hw"
              }while(buffer_RX[++i]!=0x00);   

supongo que la librería de CCS (24512.h )  funciona  utilizando el harware del mico como gestionándolo por  software. Gracias

Desconectado radioelf

  • PIC10
  • *
  • Mensajes: 42
    • Radioelf
Re: force_hw 24512.h problema
« Respuesta #1 en: 07 de Septiembre de 2007, 09:44:58 »
 Solucionado, dejé de utilizar la librería de CCS (24512.h )  y basándome en información encontrada en la red realicé esta:

////////////////////////////////////////////////////////////////////////////
////   Libreria para 24LC512 serial EEPROM         I2C por hardware             ////
////                                                                                                      ////
////                                                                                                      ////
////   escribir_24LC512(direccion, dato);  Escribimos un byte                       ////
////                                                                                                      ////
////   data_read = leer_24LC512 (direccion); Leemos un byte                        ////
////                                                                                                      ////
////////////////////////////////////////////////////////////////////////////

#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,force_hw)

#define direccion_24LC512 0xA0                             // direccion de la memoria

void escribir_24LC512(int16 memAddress, int8 data);
int8 leer_(int16 memAddress);

void escribir_24LC512(int16 memAddress, int8 data)
{
   i2c_start();
   i2c_write(direccion_24LC512);
   i2c_write(memAddress>>8);
   i2c_write(memAddress);
   i2c_write(data);
   i2c_stop();
   delay_ms(5);
}

int8 leer_24LC512(int16 memAddress)
{
   int8 data_read=0;
 
   i2c_start();
   i2c_write(direccion_24LC512);
   i2c_write(memAddress>>8);
   i2c_write(memAddress);
   i2c_start();
   i2c_write((direccion_24LC512 |1));    // realizamos OR
   data_read = i2c_read(0);
   i2c_stop();
   return data_read;
}


 

anything