Autor Tema: duda con EEPROM 24LC256  (Leído 3592 veces)

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

Desconectado manu2097

  • PIC10
  • *
  • Mensajes: 17
duda con EEPROM 24LC256
« en: 06 de Octubre de 2004, 12:10:00 »
Hola a todos. He comprado una eeprom 24LC256 para ver si consigo que funcione con el pic16f876 por I2C, pero no he podido hacer que funcione bien, mi programa es este:

" I2CREAD and I2WRITE Commands
"
" Write to the first 16 locations of an external serial EEPROM
" Read first 16 locations back and send to serial out repeatedly
" Note: for EEPROMS with byte-sized address

        Include "modedefs.bas"          " Include serial modes
       
define OSC 4
"include "bs2defs.bas"
DEFINE LOADER_USED 1
Define  I2C_INTERNAL  1
"DEFINE I2C_SLOW 1

ADCON1=7

cont CON %10100000
SO      con     0                       " Define serial output pin
DPIN    var     PORTA.5                 " I2C data pin
CPIN    var     PORTA.4                 " I2C clock pin

B_0      var     byte
B_1      var     byte
B_2      var     byte

B_2=100: B_0=10:B_1=0

I2CWRITE DPIN,CPIN,cont,B_0,[B_2]  " Write each location"s address to itself
Pause 30                " Delay 10ms after each write

serout2 portc.6,188,[dec B_1,"-"]

I2CREAD DPIN,CPIN,cont,B_0,[B_1]        " Read 2 locations in a row
Pause 30

Serout2 portc.6,188,[dec B_1]       " Print 2 locations

end

Cuando termina el programa y veo que ha tirado por el serie me muestra: 0-32 en vez de mostrarme 0-100.
La verdad es que no entiendo el funcionamiento de la eeprom y el I2C, por eso no entiendo los defines que hay que poner y tal.

La eeprom la he coectado com en el manual que hay colgado en todopic.com.ar

La eeprom es: 256k I2C cmos serial eeprom
Esta eempron es perfectamente soportada por el picbasicpro?

Gracias de antemano

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: duda con EEPROM 24LC256
« Respuesta #1 en: 06 de Octubre de 2004, 12:24:00 »
Si está soportada, yo he funcionado con una de 512 y funciona bien.

Como tienes los pines de identificación de la eeprom en tu PCB, me refier a  los pines A0,A1, A2 Tienen que coincidir con tu dirección.

El oscilador  de 4 MHz soporta frecuencia de transmisión de 100KHz, así que te recomiendo define I2c_slow.

Nada más.

Comprueba la palabra de control.

Saludos
Ricky
Madrid-España

Desconectado manu2097

  • PIC10
  • *
  • Mensajes: 17
RE: duda con EEPROM 24LC256
« Respuesta #2 en: 06 de Octubre de 2004, 12:29:00 »
Mi palabra de control creo que es: cont CON %10100000 y en mi boar A0,A1,A2 están las tres pata a tierra. ¿Eso significa que esta bien porque corresponde a la palabra de control?

Creo que es eso lo que me preguntabas

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: duda con EEPROM 24LC256
« Respuesta #3 en: 06 de Octubre de 2004, 12:39:00 »
He estado mirando en Todopic, pero no encuentro de donde sacastes como conectar la memoria.
Donde está?.

Tienes la pull-up en el bus I2C?

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: duda con EEPROM 24LC256
« Respuesta #4 en: 06 de Octubre de 2004, 12:40:00 »
Si a eso me refería.

Yo no utilizo modedefs ni bs2...No me gusta el modo de definir que tienen, pero nbo se si eso influye o no. Yo defino las entradas y salidas con TRiS. Supongo que las resistencias de Pull up las has puesto en PORTA.5    y PORTA.4 (por cierto este puerto es open collector).

Saludos
Ricky
Madrid-España

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: duda con EEPROM 24LC256
« Respuesta #5 en: 06 de Octubre de 2004, 12:41:00 »
Yo uso el 24LC515 , que es una eeprom I2C de 512k , y segun su data, A2 debe de ir obligatoriamente a VCC, si no la eeprom no funciona. Y A0 y A1 se conectan segun el "ID" que se desee dar al dispositivo, que luego invocaremos en la palabra de configuracion.

Si con el 24LC256 es tambien como en el mio, en lo que erras es en poner A2 a tierra, ponlo a VCC. Aparte, no olvides pullups para SCK y SDA. Y recuerda, la palabra de configuracion debe ser cambiada para leer y para escribir, por lo que yo no la pondria como constante.

salu2


Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: duda con EEPROM 24LC256
« Respuesta #6 en: 06 de Octubre de 2004, 12:48:00 »
Tengo entendido que la palabra de configuracion de la eeprom es:

AAAABCCD

AAAA:
1010
(Especifico de la eeprom)

B:
0 o 1
(En el data pone que asi eliges entre 32k superiores o inferiores, mi eeprom es de 64k, en inferiores pienso que un 0 basta)

CC:
00,01,10,11
(A1 y A0, segun como tengas cableados, elegiras uno u otro chip)

D:
0 o 1
(0=escribir , 1=leer)


salu2


Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: duda con EEPROM 24LC256
« Respuesta #7 en: 06 de Octubre de 2004, 12:48:00 »
Lo de que A2 no es configurable, es sólo para las 515,  al menos para las 256 y las 512 si que lo son. Estaría correcto eso en la 256.

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado manu2097

  • PIC10
  • *
  • Mensajes: 17
RE: duda con EEPROM 24LC256
« Respuesta #8 en: 07 de Octubre de 2004, 10:58:00 »
Hola de nuevo, como en el datasheet no he visto nada de activar las resistencias de pull-up en el porta he decidido conectar la eeprom al portb y activar las resistencias de pull-up y tambien SDA Y SDL de la eeprom los he puesto en el pic como entradas por que sino no puedo activar las resistencias de pull-up. Me sigue sin funcionar no se que estoy haciendo mal, no se si lo que he hecho para ctivar las resistencias de pull-up está vien, este es el programa con unas pequeñas modificaciones:


" I2CREAD and I2WRITE Commands
"
" Write to the first 16 locations of an external serial EEPROM
" Read first 16 locations back and send to serial out repeatedly
" Note: for EEPROMS with byte-sized address

        "Include "modedefs.bas"          " Include serial modes
       
define OSC 4
include "bs2defs.bas"
DEFINE LOADER_USED 1
Define  I2C_INTERNAL  1
DEFINE I2C_SLOW 1

ADCON1=7

cont CON %10100000
TRISB.5=1:TRISB.4=1 "pongo SDA y SCL com entradas para poder activar las resistencias pull-up
OPTION_REG.7=0  "pull-up are enable by individual port latch values

DPIN    var     PORTB.5                 " I2C data pin
CPIN    var     PORTB.4                 " I2C clock pin

B_0      var     byte
B_1      var     byte
B_2      var     byte

B_2=150: B_0=10:B_1=0

I2CWRITE DPIN,CPIN,cont,B_0,[B_2]  " Write each location"s address to itself
Pause 30                " Delay 10ms after each write

serout2 portc.6,188,[dec B_1,"-"]

I2CREAD DPIN,CPIN,cont,B_0,[B_1]        " Read 2 locations in a row
Pause 30

Serout2 portc.6,188,[dec B_1,"-",dec B_2]       " Print 2 locations

end

no se si está bien lo que estoy haciendo?

si que sacandome por el serie 0-32-150 y en teoria tendría que sacarme 0-150-150 que raro y si desactivo el define : Define  I2C_INTERNAL  1, por el serie me tira 0-255-150.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: duda con EEPROM 24LC256
« Respuesta #9 en: 07 de Octubre de 2004, 12:23:00 »
No, mira, las pull-up las pones fuera. Osea, resistencias de 10k de cada línea (SDA y SCL) a 5v. Mejor así...

En cuanto al programa no te puedo ayudar... de basic nada de nada...

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: duda con EEPROM 24LC256
« Respuesta #10 en: 07 de Octubre de 2004, 12:26:00 »
Las resistencias de pull up las tienes que poner entre la linea CLOCK y +5V y entre la linea DATA y +5V. Su valor es de 4K7, para una velocidad de reloj de 100KHZ. Esto es así en todo bus I2C.

Saludos
Ricky
Madrid-España

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: duda con EEPROM 24LC256
« Respuesta #11 en: 07 de Octubre de 2004, 12:37:00 »
Yo también pondría esto:
TRISB.4=0 ya que lo usas como salida para generar la señal de reloj. La señal de data es entrada/salida y ya se encarga el comando de ponerla como debe ser.

Yo desactivaría los pull up internos y pondría 4K7 externos en estas dos lineas. Tambien tienes que tener en cuenta lo que has heccho con la línea Write Protec. Para dejar escribir al dispositivo.

Saludos
Ricky
Madrid-España


 

anything