Programación Específica > Programación en C

 Memoria I2c

(1/1)

vane_ccs:
Hola que tal? Estoy empezando a trabajar con una memoria externa 24AA256 I2c y un pic 18F4620..

Estoy utilizando el proteus para simular el circuito y el debbuger I2c de este para observar los datos que pasan de pic a memoria y de memoria a pic.

Estoy escribiendo un byte (en este caso una a) en la memoria y luego se supone que leo el byte y lo imprimo en un lcd.

Este es mi codigo


--- Código: Text --- #include <p18F4620.h>#include <xlcd.h>#include <delays.h>#include <i2c.h> unsigned char data_w = 'a';unsigned char data_r; void config_I2C(void){    OpenI2C(MASTER, SLEW_ON);// Initialize I2C module  SSPADD = 12; //400kHz Baud clock(9) @8MHz  }  unsigned char LeerBI2C(char Address) // Escribe un byte a un esclavo en I2C{    char DATA_I2C;  IdleI2C();                      // ensure module is idle  StartI2C();                     // initiate START condition  while ( SSPCON2bits.SEN );      // wait until start condition is over  WriteI2C( Address );      // Selecciona el dispositivo esclavo  IdleI2C();                      // Asegura que el modulo este desocupado  if ( !SSPCON2bits.ACKSTAT )     // Prueba por la condicion de ACK, si es recibida  {    DATA_I2C = ReadI2C();    IdleI2C();                   // ensure module is idle    StopI2C();                   // send STOP condition    while ( SSPCON2bits.PEN );   // wait until stop condition is over  }  return DATA_I2C;}  void delayms(int tiempo)      // delays en ms a 20MHz{  int cuenta_ = 0;  while ( cuenta_ < tiempo )  {    Delay1KTCYx(2);    cuenta_++;  }} void main(void){    TRISAbits.TRISA6 = 0;  TRISAbits.TRISA7 = 0;    config_I2C();      OpenXLCD(FOUR_BIT & LINES_5X7);   EEByteWrite(0xA0,0x70, data_w);      delayms(1000);   data_r = LeerBI2C(0x70);  SetDDRamAddr(0x00);        putcXLCD(data_r); }   
La funcion EEByteWrite es de la libreria I2c del compilador C18. Y este es el codigo:


--- Código: Text --- unsigned char EEByteWrite( unsigned char control, unsigned char address, unsigned char data ){  IdleI2C();                      // ensure module is idle  StartI2C();                     // initiate START condition  while ( SSPCON2bits.SEN );      // wait until start condition is over   if ( PIR2bits.BCLIF )           // test for bus collision  {    return ( -1 );                // return with Bus Collision error   }  else                            // start condition successful  {    if ( WriteI2C( control ) )    // write byte - R/W bit should be 0    {      return ( -3 );              // set error for write collision    }     IdleI2C();                    // ensure module is idle    if ( !SSPCON2bits.ACKSTAT )   // test for ACK condition received    {       if ( WriteI2C( address ) )  // write word address for EEPROM      {        return ( -3 );            // set error for write collision      }       IdleI2C();                  // ensure module is idle      if ( !SSPCON2bits.ACKSTAT ) // test for ACK condition received      {         if ( WriteI2C( data ) )   // data byte for EEPROM        {          return ( -3 );          // set error for write collision        }      }      else      {        return ( -2 );            // return with Not Ack error condition         }    }    else    {      return ( -2 );              // return with Not Ack error condition       }  }   IdleI2C();                      // ensure module is idle    StopI2C();                      // send STOP condition  while ( SSPCON2bits.PEN );      // wait until stop condition is over   if ( PIR2bits.BCLIF )           // test for bus collision  {    return ( -1 );                // return with Bus Collision error   }  return ( 0 );                   // return with no error}  
Cuando corro la simulacion lo que recibo es:

en la escritura esto:  S 41 A E1 A C3 A P  
que creo que esta bien..  

y en la lectura esto:  S E1 N Sr 41 A E1 A C3 A P
que no se si este bien por el N

Y el resultado en el lcd es nada, no escribe cuando le digo que me escriba el mensaje leido...

Realmente no se lo que pasa....  :huh:

Por favor, si alguien tiene alguna idea, le agradeceria que me diera luz  ;)

Gracias...  ;)

© Jonathan ©:
En otro post cuentas que ya has logrado leer y escribir la memoria sin problemas :) .. serias tan amable de compartir esa rutina que utilizas.. ponla en el foro de Soluciones Hard y Soft http://foros.solocodigo.com/index.php?showforum=156 .. desde ya muchas gracias  :smartass:  :comp:

Navegación

[0] Índice de Mensajes

Ir a la versión completa