|
Ariel
|
 |
« : Junio 06, 2011, 03:23:35 » |
|
Hola! Estoy intentando usar esta memoria en un proyecto con JALv2, y no estoy logrando guardar/recuperar un triste byte  La memoria está conectada con A0 y A1 a GND, por lo que su dirección (creo) es 0XA0. Mi código es el siguiente:Intento guardar 256 bytes de la siguiente manera: for 255 using i loop ee_24lc256_write(0xA0, 1,datos [i]) end loop y recuperarlos asi: for 255 using i loop ee_24lc256_read(0xA0, 1,datos [i]) end loop Las rutinas que llamo para leer y escribir son las de JAL, que pongo aqui: -------------------------------------------------------------------------------- -- Read data from 24LC256 at input address -------------------------------------------------------------------------------- procedure ee_24lc256_read(byte in ic_address, word in mem_address, byte out data) is var byte ack_ok var byte address_low var byte address_high -- split the memory address into 2 bytes var byte address_bytes[2] at mem_address address_high = address_bytes[1] address_low = address_bytes[0] i2c_start() -- send start bit ack_ok = i2c_transmit_byte(ic_address) -- transmit data & wait for ack ack_ok = i2c_transmit_byte(address_high) -- transmit data & wait for ack ack_ok = i2c_transmit_byte(address_low) -- transmit data & wait for ack i2c_start() -- send start bit ack_ok = i2c_transmit_byte(ic_address + 1) -- transmit data & wait for ack data = i2c_receive_byte(0) -- nack (no ack) i2c_stop() -- send stop bit end procedure
-------------------------------------------------------------------------------- -- Write data to 24LC256 at input address -------------------------------------------------------------------------------- procedure ee_24lc256_write(byte in ic_address, word in mem_address, byte in data) is var byte ack_ok var byte address_low var byte address_high -- split the memory address into 2 bytes var byte address_bytes[2] at mem_address address_high = address_bytes[1] address_low = address_bytes[0] i2c_start() -- send start bit ack_ok = i2c_transmit_byte(ic_address) -- transmit data & wait for ack ack_ok = i2c_transmit_byte(address_high) -- transmit data & wait for ack ack_ok = i2c_transmit_byte(address_low) -- transmit data & wait for ack ack_ok = i2c_transmit_byte(data) -- transmit data & wait for ack i2c_stop() -- send stop bit _usec_delay(5_000) -- datasheet says writes take 5ms end procedure ¿Que corno estoy haciendo mal?  EDITO: Asi defino los pines y demas....Uso un PIC18F4550  -- Pines i2c (EEPROM) alias i2c_scl is pin_b1 alias i2c_sda is pin_b0 alias i2c_scl_direction is pin_b1_direction alias i2c_sda_direction is pin_b0_direction const word _i2c_bus_speed = 1 -- 100 kHz var byte i2c_tx_buffer [10] var byte i2c_rx_buffer [10]
include i2c_software i2c_initialize() - include i2c_level1
|
|
|
|
« Última modificación: Junio 06, 2011, 03:29:42 por Ariel »
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
|
|
E_Blue
|
 |
« Respuesta #1 : Junio 06, 2011, 04:23:30 » |
|
¿El pin A2 también lo tenes conectado a masa? ¿Pusiste las R de pull up en SDA y SCL?  Yo mucho de Jal no entiendo pero parece estar bien el código.
|
|
|
|
|
En línea
|
Procesando... Si escribes para la (censurado) solo ella va a leerte.Si quieres ayuda con tu proyecto recuerda agregar información del mismo, y no seas haragán y esperes tener todo servido, esto es un foro, no una bolsa de trabajo.
|
|
|
|
HJ
|
 |
« Respuesta #2 : Junio 06, 2011, 04:38:53 » |
|
¿El pin A2 también lo tenes conectado a masa?
Las 24C256 , no tienen el pin A2. Que nivel le estas poniendo al pin de protección de escritura, ojo que para poderla escribir tiene que estar a cero, si está a 1 no se puede escribir. Por lo menos así son las Atmel. ¿Pusiste las R de pull up en SDA y SCL?  Este detalle es importante. Saludos HJ
|
|
|
|
|
En línea
|
|
|
|
|
E_Blue
|
 |
« Respuesta #3 : Junio 06, 2011, 04:45:45 » |
|
Estoy mirando el datasheet de Fairchild y dice que si tiene pin A2 y el de Atmel dice que NC, ¿En que quedamos? 
|
|
|
|
|
En línea
|
Procesando... Si escribes para la (censurado) solo ella va a leerte.Si quieres ayuda con tu proyecto recuerda agregar información del mismo, y no seas haragán y esperes tener todo servido, esto es un foro, no una bolsa de trabajo.
|
|
|
|
HJ
|
 |
« Respuesta #4 : Junio 06, 2011, 04:47:02 » |
|
Estoy mirando el datasheet de Fairchild y dice que si tiene pin A2 y el de Atmel dice que NC, ¿En que quedamos?  Que yo sepa no tienen, ya que "A2" es parte de la selección interna de los bancos de memoria. Saludos.
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #5 : Junio 06, 2011, 04:49:18 » |
|
Hola! A2 esta a GND internamente, o sea, no problem con eso: la dir sigue siendo 1010 0000, o 0xA0. WP lo tengo a GND, por que la hoja de datos coincide con vos HJ.... Y las dos pullups son de 4.7KB. Tiene que haber alguna "sutileza" en la configuracion del puerto B, me parece. Electricamente esta todo ok, estuve midiendo con el tester entre los pines de los chips y esta todo ok....o sea que ni siquiera me queda la esperanza de que sea una mala soldadura  Gracias!
|
|
|
|
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
HJ
|
 |
« Respuesta #6 : Junio 06, 2011, 04:55:27 » |
|
El puerto RB tiene la famosas resistencias de pull-up.
¿Estas tratando de escribir por byte o por página? ojo que las páginas son de 64 bytes.
Si se me ocurre otra cosa la agrego.
Saludos
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #7 : Junio 06, 2011, 04:57:53 » |
|
Estoy mandando de a un byte....será eso?  Es para la super Altair 8800....intento guardar el contenido de la memoria en la EEPROM (tengo espacio para 128 "programas" guardados) y luego recuperalos. Pero siempre recupero 256 ceros  Ahi voy a ver el tema de las pullups....
|
|
|
|
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
E_Blue
|
 |
« Respuesta #8 : Junio 06, 2011, 05:00:45 » |
|
Acordate de configurar las entradas, B0 y B1, como digitales desde ANSEL, creo que se hace, no se si hay algún otro bit en algún ADCON Estoy mirando el datasheet de Fairchild y dice que si tiene pin A2 y el de Atmel dice que NC, ¿En que quedamos?  Que yo sepa no tienen, ya que "A2" es parte de la selección interna de los bancos de memoria.Saludos. Eso no tiene sentido, con 16bit de dirección podes direccionar hasta 64K(0xFFFF)x8=512Kbit, es decir, recién en la memoria de 1Mbit ocurre eso, yo uso la 512Kbit y tengo apareadas 8 y ninguna se interfiere con la otra.
|
|
|
|
|
En línea
|
Procesando... Si escribes para la (censurado) solo ella va a leerte.Si quieres ayuda con tu proyecto recuerda agregar información del mismo, y no seas haragán y esperes tener todo servido, esto es un foro, no una bolsa de trabajo.
|
|
|
|
Ariel
|
 |
« Respuesta #9 : Junio 06, 2011, 05:03:12 » |
|
Es lo que dice la hoja de datos.....es una 24LC256. Son 32KB. Usando A0 y A1 podes tener 4x32KB = 128KB en total....
|
|
|
|
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
E_Blue
|
 |
« Respuesta #10 : Junio 06, 2011, 05:07:28 » |
|
Es lo que dice la hoja de datos.....es una 24LC256. Son 32KB. Usando A0 y A1 podes tener 4x32KB = 128KB en total....
Ok, yo no discuto lo del pin A2, ya vi que en la hoja de Fairchild dice una cosa y en la de Atmel otra, de hecho así lo aclare en un post anterior; lo que le estoy comentando es sobre el hecho de usar el bit A2 para direccionar los bancos internos, eso esta claro que se maneja igual, tanto en Farchild como en Atmel.
|
|
|
|
|
En línea
|
Procesando... Si escribes para la (censurado) solo ella va a leerte.Si quieres ayuda con tu proyecto recuerda agregar información del mismo, y no seas haragán y esperes tener todo servido, esto es un foro, no una bolsa de trabajo.
|
|
|
|
HJ
|
 |
« Respuesta #11 : Junio 06, 2011, 05:10:01 » |
|
Eso no tiene sentido, con 16bit de dirección podes direccionar hasta 64K(0xFFFF)x8=512Kbit, es decir, recién en la memoria de 1Mbit ocurre eso, yo uso la 512Kbit y tengo apareadas 8 y ninguna se interfiere con la otra.
La verdad no se como. Pero bueno, puedo estar equivocado ya que en el movil no puedo leer pdf y consultar la hoja de datos. Estoy escribiendo de memoria. Saludos
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #12 : Junio 06, 2011, 05:17:06 » |
|
Si, puede que los dos fabricantes difieran en eso. Pero.....si no me equivoco, mi código debería escribir y leer de la misma página, aunque no tenga mucha idea de cual es...por que en ambas operaciones pongo la misma dirección.
|
|
|
|
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
HJ
|
 |
« Respuesta #13 : Junio 06, 2011, 05:21:18 » |
|
Ariel, un par de dudillas... ¿has probado esas rutinas en otro circuito? ¿estás seguro de que andan? ¿A que velocidad de estás tratando leer y escribir?¿esa velocidad es soportada por la memoria?
saludos
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #14 : Junio 06, 2011, 05:28:28 » |
|
Hola HJ! No, es mi primera vez con JAL y I2C.....y encima no tengo otro circuito a mano que sepa que anda para probar. Es mas..............es el unico maldito chip EEPROM que tengo en toda la casa  El tema de la velocidad es un buen dato....voy a ver como hacer para bajarla al 10% de eso o asi. 
|
|
|
|
|
En línea
|
“ Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia: La única habilidad competitiva a largo plazo es la habilidad para aprender“. Seymour Papert
|
|
|
|
|
|