Autor Tema: aYuda para el f877 eeprom ext, con I2C  (Leído 2007 veces)

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

Desconectado maxluis

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
aYuda para el f877 eeprom ext, con I2C
« en: 13 de Agosto de 2003, 22:45:00 »
Estoy muy complicado tengo una eeprom 24 LC 256 la cual conecté a un pic 16f877 de acuerdo a lo que dice el manual de pic basic pro, i2c write y i2cread, he usado todos los programas tipo, que encuentro en la web y no pasa nada, alguien que me de una mano por favor.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: aYuda para el f877 eeprom ext, con I2C
« Respuesta #1 en: 14 de Agosto de 2003, 19:14:00 »
hOLA MAXLUIS,

He trabajado con un 16F628 y dos 24LC512 (que son similares a la tuya).

Tienes que tener una precaución con estas memorias: funcionan en modo página y cuando direccionas para escribir y leer no puedes traspasar la página. Me explico. Yo en mi diseño, tenía que escribir 7 bytes de golpe y qué me pasaba que al llegar a 128 bytes que tiene la página tenía que traspasarla y se me producía un error. El problema lo arreglé usando 8 bytes (uno lo ponía a cero y lo perdía), pero de este modo al ser múltiplo entero de 128 siempre terminaba en una página y comenzaba en otra. De este modo ya no hay problema de escritura ni de lectura. Si tu utilizas unidades lógicas de un byte no tendrás este problema.

Aclarado esto paso a detallarte algunos puntos importantes.

1.- Mira en el DS de la memoria si funciona a 400 KHZ, entonces tendrás accesos más rápidos. Hay un define que ajusta el bus a 100 KHz
DEFINE I2C_SLOW 1 "Use for >8MHz OSC with standard speed devices .

2.- En tu hardware tienes que poner el pin clock y el data una R de 2K a +Vcc para 400KHz y de 4K7 para un reloj de 100KHz.

3.- El comando para escritura es:
   I2CWrite SDA,SCK,control,contador,[A,B,C,.....],

Donde:
SDA,SCK son los pines de datos y clock (los que quieras).

control es la direccion del dispositivo que se compone de dos cosas 1010-0000, los primeros 4 bit es un código fijo de dispositivo y los siguientes la dirección de los pines A0,A1 y A2 que tu hayas puesto en la memoria. Me explico si tu pones los pines A0,A1 y A2  a cero pues mandas 0000, si pones el pin A0=1, entonces mandas 0010 y asi sucesivamente. Esta palabra de control identifica la memoria que estés usando (puedes tener varias en el mismo bus).

Contador es la dirección de 16 bit en mi caso y vas avanzando por las posiciones de memoria.

A,B,C.... son las variables tipo byte que vas a grabar en la memoria. Tienes que tener en cuenta lo que te he dicho antes de un número entero par para que no te parta la página (en tu caso creo que es más pequeña la página, seguramente será de 64 bytes, pero es lo mismo)

Para leer la estructura es lo mismo.

Espero haber aclarado algo las ideas. Ya no podrés ayudarte hasta después de vacaciones (finales de Agosto).

Saludos
Ricky