Autor Tema: Direccionar y leer 24LC512 con mikrobasic  (Leído 3626 veces)

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

Desconectado Chema200

  • PIC10
  • *
  • Mensajes: 5
Direccionar y leer 24LC512 con mikrobasic
« en: 14 de Diciembre de 2007, 12:07:23 »
Hola a todos.
Estoy haciendo pruebas con mikrobasic para leer y escribir por I2C en la 24LC512 y no hay forma.
Lo que hago es escribir Byte de Control + Byte Alto de direccion + Byte Bajo de direccion y despues leo el dato.
El caso es que me direcciona con el Byte Alto (Ejemplo $00), me escribe el Byte Bajo en esa direccion (Ejemplo $01) y luego me lee el mismo dato que he escrito (Byte Bajo = $01).
La primera pregunta es ¿Puedo direccionar mas de 255 direcciones ($0F) con microbasic o asembler?
Lo digo porque he mirado en la página de Microchip y en el ejemplo en ASM so lo direcciona hasta $0F.

Os pongo el código:

sub function I2C_Lectura(dim address as word) as byte

  dim address_H as byte
  dim address_L as byte
  dim i as byte
  'Convertimos un dato tipo word en dos bytes (Byte Alto y Byte Bajo)
  address_L = address
  address = address >> 8
  address_H = address

  I2C_Start                    ' Lanzamos la señal de arranque al bus
  I2C_Wr($A2)               ' Enviamos el byte ($A2) via I2C(comando escritura)
  I2C_Wr(address_H)      'Enviamos byte alto (direccion de la EEPROM)
  I2C_Wr(address_L)      'Enviamos byte bajo (direccion de la EEPROM)
  I2C_Repeated_Start     ' Repetimos señal de start
  I2C_Wr($A3)               ' Enviamos el byte ($A3) via I2C(comando lectura)
  result = I2C_Rd(0)       ' Leemos el dato
  I2C_Stop                     ' Detenemos el bus
end sub

Gracias a todos y un saludo
« Última modificación: 18 de Diciembre de 2007, 21:16:43 por Chema200 »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Direccionar y leer 24LC512 con mikrobasic
« Respuesta #1 en: 14 de Diciembre de 2007, 16:40:01 »
Te falta la opcion de I2C_INIT la cual es necesaria para usar la libreria y solo por comentario si usas un PIC con hardware i2c ya que esta es su libreria

Mira el ejemplo de la ayuda:

Código: FreeBasic
  1. 'Library Example
  2. 'This code demonstrates use of I2C Library procedures and functions. PIC MCU is connected (pins SCL and
  3. 'SDA) to 24c02 EEPROM. Program sends data to EEPROM (data is written at address 2). Then, we read data
  4.  'via I²C from EEPROM and send its value to PORTD, to check if the cycle was successful. The figure below
  5. 'shows how to interface 24c02 to PIC.
  6.  
  7. program Eeprom_Test
  8.  
  9. dim EE_adr, EE_data, k as byte
  10. dim jj as word
  11.  
  12. main:
  13.   I2C_Init(100000)    ' Initialize full master mode
  14.   TRISD = 0           ' PORTD is output
  15.   PORTD = $FF         ' Initialize PORTD
  16.   I2C_Start           ' Issue I2C start signal
  17.   I2C_Wr($A2)         ' Send byte via I2C(command to 24cO2)
  18.   EE_adr = 2
  19.   I2C_Wr(EE_adr)      ' Send byte(address for EEPROM)
  20.   EE_data = $AA
  21.   I2C_Wr(EE_data)     ' Send data(data that will be written)
  22.   I2C_Stop            ' Issue I2C stop signal
  23.  
  24.   ' Pause while EEPROM writes data
  25.   for jj = 0 to 65500
  26.     nop
  27.   next jj
  28.  
  29.   I2C_Start           ' Issue I2C start signal
  30.   I2C_Wr($A2)         ' Send byte via I2C
  31.   EE_adr = 2
  32.   I2C_Wr(EE_adr)      ' Send byte(address for EEPROM)
  33.   I2C_Repeated_Start  ' Issue I2C signal repeated start
  34.   I2C_Wr($A3)         ' Send byte (request data from EEPROM)
  35.   k = I2C_Rd(1)       ' Read the data
  36.   I2C_Stop            ' Issue I2C stop signal
  37.   PORTD = k           ' Show data on PORTD
  38.  
  39.   ' Endless loop
  40.   while true
  41.     nop
  42.   wend
  43.  
  44. end.
« Última modificación: 14 de Diciembre de 2007, 16:50:14 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Chema200

  • PIC10
  • *
  • Mensajes: 5
Re: Direccionar y leer 24LC512 con mikrobasic
« Respuesta #2 en: 14 de Diciembre de 2007, 18:30:41 »
La instruccion I2C_Init la tengo colocada en el programa principal.
La funcion que he colocado, funciona con la 24LC02.
Haciendo más pruebas, he llegado a la conclusion no se si erronea de que con mikrobasic no se pueden direccionar directamente mas de 255 direcciones.
Saludos.

Desconectado Chema200

  • PIC10
  • *
  • Mensajes: 5
Re: Direccionar y leer 24LC512 con mikrobasic
« Respuesta #3 en: 18 de Diciembre de 2007, 21:15:11 »
Prueba conseguida.
El caso es que la funcion de lectura ha funcionado desde el principio. el problema lo tenía con el Proteus que aunque le cambies el archivo de la memoria, no se entera. Lo que hay que hacer o por lo menos a mí me ha funcionado es quitar la memoria del circuito y volverla a poner para posteriormente, cargarle el archivo BIN que hayamos modificado.

Saludos.


 

anything