|
HJ
|
 |
« Respuesta #15 : Junio 06, 2011, 05:34:16 » |
|
Fijate la frecuencia de reloj máxima que te permite la memoria en la hoja de datos. (como dije antes acá no puedo abrir pdf). Puede ser que esté allí el problema.
saludos
|
|
|
|
|
En línea
|
|
|
|
|
|
|
Ariel
|
 |
« Respuesta #16 : Junio 06, 2011, 05:38:09 » |
|
Para para para.....encontre una SALVAJADA: no estoy incrementando la posicion en la que escribo/leo!!!!!!!!!!!
Aguanta dos min, que estoy mirando siempre la ultima posicion de la memoria de la Altair, que "casualmente" es CERO....
|
|
|
|
|
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 #17 : Junio 06, 2011, 05:38:54 » |
|
|
|
|
|
|
En línea
|
|
|
|
|
E_Blue
|
 |
« Respuesta #18 : Junio 06, 2011, 05:39:56 » |
|
¿Pusiste B0 y B1 en modo digital desde ANSEL? Tendrías que colgarle un osciloscopio para ver si genera el clock y los datos. 
|
|
|
|
|
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.
|
|
|
Suky
**----- ^^ ------**
Moderador
dsPIC
   
Desconectado
Sexo: 
Mensajes: 5345
Con Qt...
|
 |
« Respuesta #19 : Junio 06, 2011, 05:40:44 » |
|
Estas utilizando el Módulo MSSP o es por software la comunicación? Yo utilizo una exactamente igual 24LC256 a 100 kHz por hardware y ningún problema... Dale una miradita con el analizador lógico para ver que señales tienes 
|
|
|
|
« Última modificación: Junio 06, 2011, 05:42:35 por Suky »
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #20 : Junio 06, 2011, 05:41:50 » |
|
SIIIIIIIIIIIIIIIIIIII!!!!!!!!!!!!!! Es eso!!!!!  Mira: Hacia asi: for 255 using i loop ee_24lc256_read(0xA0, 1,datos ) end loopEse "1" es la dirección..............................que NABO!!!!  Ya anda perfecto. Guardo en pagina * 256 + i y a otra cosa....tengo 128 "páginas", cada una es un "programa". Con las llaves selecciona la página, y le doy "guardar" o "recuperar" y listo. Ufffffff....como pude ser tan pavote de no ver eso!!!!!!!! Gracias, y disculpen la burrada  PD: a 100 KHZ se la rebanca.
|
|
|
|
|
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
|
|
|
Suky
**----- ^^ ------**
Moderador
dsPIC
   
Desconectado
Sexo: 
Mensajes: 5345
Con Qt...
|
 |
« Respuesta #21 : Junio 06, 2011, 05:45:59 » |
|
No se que tan estricto son los tiempos, pero podes aprovechar de guardar por paginas que demora lo mismo que guardar un byte  Otra, si es un código multitarea podes evitar esos 5ms desperdiciados esperando que termine de escribir, realizando una rutina que entregue el estado de la memoria, como para preguntar si esta disponible y sino haces otra cosa  Saludos!
|
|
|
|
|
En línea
|
|
|
|
|
Ariel
|
 |
« Respuesta #22 : Junio 06, 2011, 05:48:51 » |
|
Si, es una buena idea optimizarlo como decis, guardando una página. No por este proyecto, pero si para otros.... Aca demoro en guardar....5ms x 256 = 1 segundo y cuarto maomeno. Sep.....es mucho. Bueno, ya tengo para entretenerme!!! PD: Mientras lee o guarda no hace otra cosa, por que seria "peligroso" permitir modificar la memoria o ejecutar un programa (que eventualmente puede cambiar su contenido) durante la escritura o lectura en el "disco rígido" que es la EEPROM 
|
|
|
|
|
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 #23 : Junio 06, 2011, 05:49:25 » |
|
Me alegro mucho que ya esté andando. Primer Altair 8800 con disco duro de estado sólido  Saludos
|
|
|
|
|
En línea
|
|
|
|
|
HJ
|
 |
« Respuesta #24 : Junio 06, 2011, 06:21:15 » |
|
Nobleza obliga.
Ya pude ver las hojas de datos y aparentemente Fairchild permite conectar hasta 8 dispositivos, mientras que ATMEL solo permita conectar 4. Aclaro que siempre he utilizado 24C256 de ATMEL, por lo que recién ahora me entero que Fairchild permite 8. Es un tema importante ha tener en cuenta para futuros desarrollos.
Con respecto a las frecuencias máximas de trabajo dependen del modelo y del fabricante, para ATMEL es de 400KHz y en la versión industrial hasta 1 MHz,y Farchild tiene versiones de 400MHz y versiones de 100KHz.
En cuanto al uso de "A2" internamente, efectivamente es para las memorias mas grandes.
Saludos
Edito: Por lo visto la versión industrial de ATMEL también permite hasta 8 dispositivos.
|
|
|
|
« Última modificación: Junio 06, 2011, 06:25:30 por HJ »
|
En línea
|
|
|
|
|
E_Blue
|
 |
« Respuesta #25 : Junio 06, 2011, 06:47:44 » |
|
Si, es una buena idea optimizarlo como decis, guardando una página. No por este proyecto, pero si para otros.... Aca demoro en guardar....5ms x 256 = 1 segundo y cuarto maomeno. Sep.....es mucho. Bueno, ya tengo para entretenerme!!! PD: Mientras lee o guarda no hace otra cosa, por que seria "peligroso" permitir modificar la memoria o ejecutar un programa (que eventualmente puede cambiar su contenido) durante la escritura o lectura en el "disco rígido" que es la EEPROM  Yo te iba a sugerir lo mismo pero es medio rompequinotos el tema del paginado y del tamaño del buffer de la memoria. En el caso de la altair lo solucionas con 4 paquetes pero si tenes que guardar de a, digamos, 18 bytes tenes que controlar no pasarte de los 64bytes de buffer y que el dato no caiga en otra pagina. Es decir no le podes enviar 65bytes para grabar porque el byte 65 sobreescribe el byte 0 del buffer de la EEPROM y tampoco podes cruzar de pagina en una misma grabación, obligado tenes que cortar los datos y seguir en la próxima, no se para ustedes pero para mi eso es bastante molesto.  Nobleza obliga.
Ya pude ver las hojas de datos y aparentemente Fairchild permite conectar hasta 8 dispositivos, mientras que ATMEL solo permita conectar 4. Aclaro que siempre he utilizado 24C256 de ATMEL, por lo que recién ahora me entero que Fairchild permite 8. Es un tema importante ha tener en cuenta para futuros desarrollos.
Con respecto a las frecuencias máximas de trabajo dependen del modelo y del fabricante, para ATMEL es de 400KHz y en la versión industrial hasta 1 MHz,y Farchild tiene versiones de 400MHz y versiones de 100KHz.
En cuanto al uso de "A2" internamente, efectivamente es para las memorias mas grandes.
Saludos
Edito: Por lo visto la versión industrial de ATMEL también permite hasta 8 dispositivos.
Las que estoy usando creo que son Microchip, y no sabia que había memorias limitadas en el tamaño del array por no tener un PIN, que de hecho no se usa. Que raro que Atmel trabaje así.  Respecto a las velocidades yo siempre las he usado en 100KHz porque también tengo un DS1307Z, en el mismo bus I2C, que no permite mas velocidad que esa. De todos modos creo que a 400KHz y a 1MHz el bus se pone mas sensible al ruido y al tema de la velocidad en los cambios de estado en las lineas SDA y SCL.
|
|
|
|
|
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.
|
|
|
RUSO 15
PIC10F
Desconectado
Sexo: 
Mensajes: 84
|
 |
« Respuesta #26 : Abril 06, 2012, 11:19:05 » |
|
Hola a todos, buenas. Estoy tratando de conectar un 16f648a a una 24lc256, en proteus y en la protoboard, y no logro resultados (no escribo la memoria eeprom). El código que estoy usando es una copia de lo que subió Ariel,con algunas modificaciones como los pines sda y scl. --Title: Prueba con 24c256 --
-- -- include 16f648a --PIC a utilizar -- pragma target OSC INTOSC_NOCLKOUT pragma target clock 4_000_000 -- -- -- pragma target WDT disabled pragma target LVP disabled -- -- -- -- enable_digital_io()
portb_direction=output alias i2c_scl is pin_a3 alias i2c_sda is pin_a4 alias i2c_scl_direction is pin_a3_direction alias i2c_sda_direction is pin_a4_direction const word _i2c_bus_speed = 1 -- 100 kHz var byte i2c_tx_buffer [10] var byte i2c_rx_buffer [10] include delay
include i2c_software i2c_initialize() include i2c_level1
-------------------------------------------------------------------------------- -- 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
var byte i=0 var byte datos[10] datos[0]=0b_1111_0000 datos[1]=0b_1111_0000 datos[2]=0b_1111_0000 datos[3]=0b_1111_0000 datos[4]=0b_1111_0000 datos[5]=0b_1111_0000 datos[6]=0b_1111_0000 datos[7]=0b_1111_0000 datos[8]=0b_1111_0000 datos[9]=0b_1111_0000
for 255 using i loop ee_24lc256_write(0xA0,i,datos [i]) end loop No entiendo lo que estoy haciendo mal, además leí la Guía de usuario de Jalv2, en la sección I2C, pero realmente no logro entenderla. Si alguien me puede tirar una soga, le voy a estar agradecido, porque en la web no se encuentra mucha info. Desde ya gracias. Saludos.
|
|
|
|
|
En línea
|
|
|
|
nestoriano
PIC10F
Desconectado
Mensajes: 25
|
 |
« Respuesta #27 : Abril 07, 2012, 12:40:47 » |
|
Hola me parece que el problema es (soy nuevo en Jal aclaro) for 255 using i loop ee_24lc256_write(0xA0,i,datos [i]) end loop No estas aumentando la variable "i" después de grabar. Esta grabando lo mismo en el mismo lugar 255 veces. Proba con: for 255 using i loop ee_24lc256_write(0xA0,i,datos [i]) i=i+1 end loop Y otra cosa rara que encontré es que quizá cambiar el for 255 por for 10. Después de grabar los primeros 10 datos, los siguientes 245 te va guardar cualquier dato, no se si es lo que necesitas. Espero que te haya servido. Saludos!
|
|
|
|
« Última modificación: Abril 07, 2012, 12:47:17 por nestoriano »
|
En línea
|
|
|
|
RUSO 15
PIC10F
Desconectado
Sexo: 
Mensajes: 84
|
 |
« Respuesta #28 : Abril 08, 2012, 07:55:09 » |
|
Hola me parece que el problema es (soy nuevo en Jal aclaro) for 255 using i loop ee_24lc256_write(0xA0,i,datos [i]) end loop No estas aumentando la variable "i" después de grabar. Esta grabando lo mismo en el mismo lugar 255 veces. Proba con: for 255 using i loop ee_24lc256_write(0xA0,i,datos [i]) i=i+1 end loop Y otra cosa rara que encontré es que quizá cambiar el for 255 por for 10. Después de grabar los primeros 10 datos, los siguientes 245 te va guardar cualquier dato, no se si es lo que necesitas. Espero que te haya servido. Saludos! Hola, voy a probar y comento, yo tenía pensado que el "for" con el "using i", aumentaba de a uno y lo almacenaba en la variable i. Gracias por responder. Saludos.
|
|
|
|
|
En línea
|
|
|
|
nestoriano
PIC10F
Desconectado
Mensajes: 25
|
 |
« Respuesta #29 : Abril 08, 2012, 10:10:00 » |
|
Hola yo estoy usando en mis proyecto como reemplazo del "for(i=0, i<8 ,i++)" i=0 for 8 loop ee_24lc256_write(0xA0, i, datos [i]) i=i+1 end loop Antes del for 8 loop hay que poner a cero la variable "i" y antes de llegar al final del ciclo aumentar "i" manualmente. No se si habrá otra forma pero ami así me funciona sin problemas.
|
|
|
|
|
En línea
|
|
|
|
|
|
|