Hola compañeros!
estoy haciendo un ejercicio del libro micro controladores pic basic de Carlos A Reyes, concretamente 5.9.11. COMUNICACIÓN SERIAL SICRÓNICA I²C.
trata sobre las memorias eeprom. pues bien, en el ejercicio se utiliza una eeprom 24LC04B que simulada en proteus, funciona de maravilla, pero ahora viene mi problema.....
estoy montando el ciercuito en un protoboard y la memoria que tengo es una 24C256LI
montando el circuito en proteus (fm24c256) no funciona, cuando imprime en pantalla los datos leidos, salen cuadraditos negros, y montada en el protoboard salen dos lineas paralelas verticales.
He leido la eeprom en el winpic y no hay nada grabado.
luego he grabado unos datos en la eeprom con winpic y tampoco los lee en el proteus, asi, que no se que es lo que estoy haciendo mal.
este es el codigo que estoy utilizando:
ojala puedan ayudarme,
un saludo
por cierto, estoy utilizando el reloj interno del 16f628a a 4Mhz
estoy haciendo un ejercicio del libro micro controladores pic basic de Carlos A Reyes, concretamente 5.9.11. COMUNICACIÓN SERIAL SICRÓNICA I²C.
trata sobre las memorias eeprom. pues bien, en el ejercicio se utiliza una eeprom 24LC04B que simulada en proteus, funciona de maravilla, pero ahora viene mi problema.....
estoy montando el ciercuito en un protoboard y la memoria que tengo es una 24C256LI
montando el circuito en proteus (fm24c256) no funciona, cuando imprime en pantalla los datos leidos, salen cuadraditos negros, y montada en el protoboard salen dos lineas paralelas verticales.
He leido la eeprom en el winpic y no hay nada grabado.
luego he grabado unos datos en la eeprom con winpic y tampoco los lee en el proteus, asi, que no se que es lo que estoy haciendo mal.
este es el codigo que estoy utilizando:
Código:
Define osc 4
Define LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS
Define LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7
Define LCD_RSREG PORTB 'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO B
Define LCD_RSBIT 1 'EN EL BIT B.1
Define LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
Define LCD_EBIT 0 'EN EL BIT B.2
Define LCD_RWREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
Define LCD_RWBIT 2 'EN EL BIT B.2
Define LCD_BITS 4 ; tamaño del bus del lcd(4 bits)
Define LCD_LINES 2 ; número de líneas del lcd(2)
Define LCD_COMMANDUS 2000 ; retardo del comando en us.
Define LCD_DATAUS 50 ; retardo del tiempo de datos en us.
DEFINE I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL
contro CON %10100000 ;contro contiene valor constante %10100000
PinSCL VAR Porta.1 ;pin señal de reloj I2C
PinSDA VAR Porta.0 ;pin de datos I2C
dato VAR BYTE ;variable para almacenar dato leído
Inicio:
LCDOUT $fe,1," Grabando..." ;limpiar y sacar el texto en LCD
PAUSE 1000
I2CWRITE PinSDA,PinSCL,contro,0,["H"] ;guarda la H en posición 0
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,1,["0"] ;guarda la O en posición 1
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,2,["L"] ;guarda la L en posición 2
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,3,["A"] ;guarda la A en posición 3
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,4,["A"] ;guarda la A en posición 4
PAUSE 10 ;pause para la grabación
LCDOUT $fe,1,"Leer memoria" ;limpiar y sacar el texto en LCD
PAUSE 1000
LCDOUT $FE,1 ;limpiar pantalla del LCD
leer: ;programa para leer la memoria serial.
I2CREAD PinSDA,PinSCL,contro,0,[dato] ;leer la mem. 0 y guardar en dato
LCDOUT, dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,1,[dato] ;leer la mem. 1 y guardar en dato
LCDOUT, dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,2,[dato] ;leer la mem. 2 y guardar en dato
LCDOUT, dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,3,[dato] ;leer la mem. 3 y guardar en dato
LCDOUT, dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,4,[dato] ;leer la mem. 4 y guardar en dato
LCDOUT, dato ;mostrar dato en el LCD
END
ojala puedan ayudarme,
un saludo
por cierto, estoy utilizando el reloj interno del 16f628a a 4Mhz
Última edición por un moderador: