Autor Tema: leer epprom en cascada???  (Leído 3395 veces)

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

Desconectado dookie_ast

  • PIC10
  • *
  • Mensajes: 9
leer epprom en cascada???
« en: 04 de Octubre de 2004, 11:28:00 »
hola!!!
me gustaria saber si alguien a conseguido leer los bytes de una epprom en casada en picbasic
usando:

for ac = 0 to 4
    i2cread portb.5, portb.6, cont,ac,[a[ac]]
next ac

no consigo hacer que carge nada ni lo meta en el array de a..
alguein tiene alguna solucion????

ahh
y alguien sabe usar el select case??? xq yo aun copiando el ejemplo del manual el compilador me da error......

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: leer epprom en cascada???
« Respuesta #1 en: 04 de Octubre de 2004, 15:14:00 »
sobre el tema de la lectura secuencial de la ic2... no te puedo ayudar... mas que nada por no meter la pata....

sobre el tema del select case....

poca cosa que comentar....

select case varable
case 1
 codigo
case 2
 codigo
case else
 codigo
end select

en caso de que la variable sea texto
case "1"

y poco mas....
así a mi siempre me ha funcionado....

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: leer epprom en cascada???
« Respuesta #2 en: 04 de Octubre de 2004, 15:46:00 »
Has inicializado correctamente el I2C? Recuerda que debes de meterle una palabra de configuracion primero, en la cual va entre otras cosas, el chip select (que por coincidencia, habilita o deshabilita un chip para R/W).

Recuerda que en modo I2C , no puedes poner mas de 4 chips en cascada, aunque yo me invente un modo mas rudimentario para ponerle tantos como quieras.

Yo he trabajado con eeproms I2C , pero en picbasic plus, aun asi no dudes en preguntar.

salu2

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: leer epprom en cascada???
« Respuesta #3 en: 04 de Octubre de 2004, 16:41:00 »
CIKA_TU, REVIZA LA CONDICION ACKNOWLEDGE   DE TU MEMORIA EN EL DS(NORMALMENTE 1010000) .SI NO ES ESE TU PROBLEMA RECUERDA PONER LAS PULLUPS DEN LA LINEA DE DATOS Y DEL CLK.
Un sencillo ejemplo para PROTON+

     DEVICE=16F628
     CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
     
     DECLARE LCD_DTPIN PORTA.0
     DECLARE LCD_ENPIN PORTB.3
     DECLARE LCD_RSPIN PORTA.4
     DECLARE SDA_PIN PORTB.5
      DECLARE SCL_PIN PORTB.1
     ALL_DIGITAL=TRUE  
     PORTB_PULLUPS=ON  
     dim var1 as BYTE            
     dim var2 as byte
     dim direccion as WORD         
   
   inicio:
   var1 = "a"
   for direccion=0 to 9   
   BUSOUT %10100000 , direccion , [ var1 ]      
   var1=var1+1   
   DELAYMS 10      
   next
   for direccion=0 to 9         
   BUSIN %10100001 , direccion, [ var2 ]   
   print var2
   next
   delayms 1000
   cls
   goto inicio
salu2 panas

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: leer epprom en cascada???
« Respuesta #4 en: 05 de Octubre de 2004, 02:47:00 »
Puedes leer lo que quieras:

 FOR contador=0 to posinter step 8
        i2cread SDA,SCK,control,contador,[dato0,dato1,dato2,dato3,dato4,dato5,dato6,dato7]
NEXT contador

Lo que tienes que tener en cuenta es la palabra de control y luego la dirección. Dependiendo de la eeprom que uses cambia la variable control.

Saludos
Ricky
Madrid-España

     

Desconectado dookie_ast

  • PIC10
  • *
  • Mensajes: 9
RE: leer epprom en cascada???
« Respuesta #5 en: 06 de Octubre de 2004, 08:23:00 »
errrr.... negativo...
kiza no me explique bien pero el k mas se aproxima es Abago....pero sigue sin funcionar...
haber... programo en picbasic pro y con la funcion i2cread portb.5, portb.6, cont,addr,[a[0]] consigo guardar la informacion en a[0] de la direcion addr ok?
bien hasta ahi bien,eso funciona a la perfeccion
pero por desgracia tngo que leer las 25 primeras direcciones e ir almacenandolas en a[0], a[1], a[2] y asi sucesivamente. Vale..ahora mismo tngo puesto 25 veces esa instruccion y m lo lee bien...peo necesito resumirlo xq me ocupa la mitad del pic...ke por cierto es un 16f84a y la memoria es una 24c08....asi k nose haber si me podeis ayudar
Gracias x todo

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: leer epprom en cascada???
« Respuesta #6 en: 06 de Octubre de 2004, 12:10:00 »
Veinticinco veces la misma instrucción no es una buena técnica, si pones un for.... next te ahorras mucha memoria. Tienes que tener en cuenta la paginación de la memoria, si traspasas de página de memoria al leer o al escribir falla la instrucción (además tienes que direccionar bien qué memoria quieres leer y qué dirección dentro de la memoria).

Saludos
Ricky
Madrid-España

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: leer epprom en cascada???
« Respuesta #7 en: 06 de Octubre de 2004, 12:12:00 »
Pon un bucle

FOR X=1 TO 25
addr=X
I2CREAD {... ...} a

  • NEXT X

    asi, cada vez iria incrementando addr, y tambien el numero de variable del array a
  • . Al final tendrias las posiciones 1-25 de la eeprom entre las variables a[1] y a[25] .

    no se si te aclare algo, pero bueno...

    salu2

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: leer epprom en cascada???
« Respuesta #8 en: 06 de Octubre de 2004, 13:09:00 »
Va de nuez pana:

----------------------------------------------------------------------------------------------------------------
     DEVICE=16F628
     CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
     
     DECLARE LCD_DTPIN PORTA.0
     DECLARE LCD_ENPIN PORTB.3
     DECLARE LCD_RSPIN PORTA.4
     DECLARE SDA_PIN PORTB.5
                  DECLARE SCL_PIN PORTB.1
     ALL_DIGITAL=TRUE  
     PORTB_PULLUPS=ON  
     dim varx[3] as BYTE      
     dim vary[3] as byte   
     dim direccion as WORD   
                 direccion=0
    varx[0] ="a"
    varx[1]="b"
    varx[2]="c"
----------------------------------------------------------------------------------------------------------------      
   inicio:
   cls
   BUSOUT %10100000 , direccion , [ str varx3 ] "Solo direcciones consecutivas
   delayms 10      
   BUSIN %10100001 , direccion, [ str vary3 ]   "y lo mejor, solo una línea    
   print str vary
   delayms 500
   cls
   goto inicio
---------------------------------------------------------------------------------------------------------------
Mas facil USA ARRAYS Y STRINGS PANA!!!!!!
Tu solo necesitas la de lectura:

BUSIN %10100001 , direccion, [ str vary3 ]

No uses for, eso te quita tiempo, solo usalo cuando leas de direcciones aleatorias seccionadas, en lugar de 3 pones 40 50 los strings quq quieras leer
En tu caso pon un margen de 25 en lugar de 3<---- me refiero a las strings
p.d.- esta es la ultima modificacion par que veas que realmente esta leyendo de la eeprom, en la anterior se podria uno engañar creyendo que al igualar(mov) las variables ya no lee de la eeprom
Salu2



Desconectado dookie_ast

  • PIC10
  • *
  • Mensajes: 9
RE: leer epprom en cascada???
« Respuesta #9 en: 07 de Octubre de 2004, 16:51:00 »
lager: la verda esk no he podido comprobar tu codigo xq programo en picbasic pro pero m estoy bajando una version del proton(picbasic plus) asi k haber si convierto el codigo del pro al lenguaje del plus y compruebo si funciona ok?...venga un saludo, gracias

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: leer epprom en cascada???
« Respuesta #10 en: 08 de Octubre de 2004, 12:58:00 »
Seguro cyka_tu , veras las ganancias,Aun asi, cualquier duda no dudes en postearla y te trataremos de ayudar todos los panas del Foro.
Salu2 pana

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: leer epprom en cascada???
« Respuesta #11 en: 09 de Octubre de 2004, 05:20:00 »
Hola

Yo ando con pbplus, y las eeprom no las manejo de ese modo.

Codigo:

DIM X[10] AS BYTE
DIM Y[10] AS BYTE
DIM Z AS BYTE
STR X="1234567890"
OUTPUT PORTD
                                                 "**ESCRITURA**
HBSTART                                    "Pongo en marcha el modulo
HBUSOUT %10100000              "Meto palabra de configuracion
HBUSOUT 0                               "Adress alto = 0
HBUSOUT 0                               "Adress bajo= 0
FOR Z=0 TO 9                        
HBUSOUT X[Z]                          "Envio los datos uno por uno  
next z
HBSTOP                                    "Envio STOP, la eeprom graba
delayms 10
                                                "**LECTURA**
HBSTART                                  "Inicio el modulo
HBUSOUT %10100000            "Lo pongo en modo escritura
HBUSOUT 0                             "Adress H =0
HBUSOUT 0                             "Adress L = 0
HBRESTART                             "Reinicio el modulo
HBUSOUT %10100001           "Lo pongo en modo lectura
for Z=0 TO 9                
Y[Z]=HBUSIN                          "Leemos datos y ponemos en array
IF Z=9 THEN HBSTOP : ELSE HBUSACK  "Si acaba, STOP, sino, mas
next z
PRINT STR Y                           "A la LCD todo
END




Asi, coge los datos del array X, y los guarda consecutivamente. Luego los vuelve a leer, guardandolos en el array Y, y los pone en la LCD. Para mi fue un buen modo de comprobar que la eeprom funcionaba, osea, escribiendo y volviendolo a leer.