Autor Tema: Enviar datos a la Eprom 24lc04 correctamente...  (Leído 3614 veces)

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

Desconectado tasher

  • PIC10
  • *
  • Mensajes: 3
Enviar datos a la Eprom 24lc04 correctamente...
« en: 31 de Octubre de 2010, 05:23:48 »
Buenas, estoy tratando de realizar un Datalogger con una Eprom 24LC04B, y me encuentro aqui atascado:
Consigo enviar datos a la eprom en modo datos, y los visualizo con Proteus de la siguiente manera:
            I2CWrite PinSDA,PinSCL,contro,0,["FECHA""]
hasta aqui todo correcto, lo leo con:
                tr=$80
      lcdout $fe, 1         
             for s =0 to 12 step 1
             I2CRead PinSDA,PinSCL,contro,S,[dato]
             pause 20
             LCDOut $FE,tr,dato
             tr=tr+1
             next s
tambien correcto a la hora de leer el texto que envie "FECHA"

pero el problema está despues de leer las variables del RTC  que es un reloj DS1307, extraigo las variables de fecha y hora, y las visualizo en el LCD correctamente de la siguiente manera:
          I2CRead  PinSDA,PinSCL, $D0, $00, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear, RTCCtrl]
     pause 20
ahora las visualizo en el LCD:         
                                           lcdout $fe, 1
                                 LCDOUT $FE,$C0,hex2 RTCHour, ":", hex2 RTCMin, ":", hex2 RTCSec
                                 return
pero cuando leo las variables para mostrarlas en el LCD, las quiero aprobechar para enviarlas a la EPROM en modo Texto, como envie anteriormente la palabra"FECHA".Para poder recetarlas posteriormente, ya ordenadas en la Eprom.
y no encuentro la manera de convertirlas, creo de Hexadecimal a decimal, como se ha hecho para mostrar en el LCD, pero no puedo convertirlas para pasrlas en modo texto a la Eprom, para posteriormente recetarlas una a una...

se agradeceria cualquier ayuda o alguna otra forma de realizar la tarea....Gracias por la ayuda.






Desconectado zeusjorg

  • PIC10
  • *
  • Mensajes: 36
Re: Enviar datos a la Eprom 24lc04 correctamente...
« Respuesta #1 en: 12 de Noviembre de 2010, 17:29:08 »
Hola

es un poco tarde pero mas vale tarde que nunca.

Yo utilizo estas lineas para leer y escrivir un reloj ds1307 y alfinal esta el conversor bcd a bin y a la inversa.

Espero que te sirva. lo estoy usando igual que tu.

un saludo

Código: [Seleccionar]
LEERRELOJ:

    I2CREAD PINSDA,PINSCL,%11010000,0, [SEGUNDOS]   ;leer los datos de mem. 0,           
    bcd_to_bin=segundos   
    gosub conv_to_bin
    segundos=bcd_to_bin
       
    I2CREAD PINSDA,PINSCL,%11010000,1,[MINUTOS]    ;1,2,..y guardarlos en sus
    bcd_to_bin=minutos   
    gosub conv_to_bin
    minutos=bcd_to_bin
   
    I2CREAD PINSDA,PINSCL,%11010000,2,[hora]       ;respectivas variables
    bcd_to_bin=hora   
    gosub conv_to_bin
    hora=bcd_to_bin   
   
    I2CREAD PINSDA,PINSCL,%11010000,4,[DIAM]             
    bcd_to_bin=diam   
    gosub conv_to_bin
    diam=bcd_to_bin   
   
    I2CREAD PINSDA,PINSCL,%11010000,5,[mes]
    bcd_to_bin=mes   
    gosub conv_to_bin
    mes=bcd_to_bin   
   
    I2CREAD PINSDA,PINSCL,%11010000,6,[ANIO]
    bcd_to_bin=anio   
    gosub conv_to_bin
    anio=bcd_to_bin   
 
 RETURN
 
GRAVARRELOJ:
    bcd_to_bin=segundos
    gosub convert_to_bcd
    segundos=bcd_to_bin
    I2CWRITE PINSDA, PINSCL,%11010000,0, [SEGUNDOS]     ;setear segundos
        Pause 10                                  ;retardo para finalizar grabación
    bcd_to_bin=MINUTOS
    gosub convert_to_bcd
    MINUTOS=bcd_to_bin   
    I2CWRITE PINSDA, PINSCL,%11010000,1, [MINUTOS]  ;setear minutos
        Pause 10 
    bcd_to_bin=HORA
    gosub convert_to_bcd
    HORA=bcd_to_bin   
    I2CWRITE PINSDA, PINSCL,%11010000,2, [HORA]     ;setear horas
        Pause 10 
    bcd_to_bin=DIAM
    gosub convert_to_bcd
    DIAM=bcd_to_bin   
    I2CWRITE PINSDA, PINSCL,%11010000,4, [DIAM]     ;setear día  mes
        Pause 10 
    bcd_to_bin=MES
    gosub convert_to_bcd
    MES=bcd_to_bin   
    I2CWRITE PINSDA, PINSCL,%11010000,5, [MES]      ;setear mes
        Pause 50 
    bcd_to_bin=ANIO
    gosub convert_to_bcd
    ANIO=bcd_to_bin   
    I2CWRITE PINSDA, PINSCL,%11010000,6, [ANIO]     ;setear año
        Pause 10                           
    I2CWRITE PINSDA, PINSCL,%11010000,7,[$10]     ;control %00010000 para
        Pause 10
                                                  ;encender el led cada 1 seg.
RETURN

conv_to_bin:
select case bcd_to_bin
case 16,17,18,19,20,21,22,23,24,25
bcd_to_bin=bcd_to_bin-6
case 32,33,34,35,36,37,38,39,40,41
bcd_to_bin=bcd_to_bin-12
case 48,49,50,51,52,53,54,55,56,57
bcd_to_bin=bcd_to_bin-18
case 64,65,66,67,68,69,70,71,72,73
bcd_to_bin=bcd_to_bin-24
case 80,81,82,83,84,85,86,87,88,89
bcd_to_bin=bcd_to_bin-30
case 96,97,98,99,100,101,102,103,104,105
bcd_to_bin=bcd_to_bin-36
case 112,113,114,115,116,117,118,119,120,121
bcd_to_bin=bcd_to_bin-42
case 128,129,130,131,132,133,134,135,136,137
bcd_to_bin=bcd_to_bin-48
case 144,145,146,147,148,149,150,151,152,153
bcd_to_bin=bcd_to_bin-54
end select

return

convert_to_bcd:
low_bits=bcd_to_bin//10 'get lsb,same for Bin and BCD
high_bits=bcd_to_bin/10 'get msb
bcd_to_bin=high_bits*16 'convert msb to BCD
bcd_to_bin=bcd_to_bin+low_bits 'add BCD msb and lsb together
return

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: Enviar datos a la Eprom 24lc04 correctamente...
« Respuesta #2 en: 13 de Noviembre de 2010, 12:27:33 »
una consulta talvez suene tonto pero porque haces esa conversion de bcd a bin,osea porque es necesaria, quiero saber porque recien que veo esto y me llama la atencion.gracias por tu respuesta

Desconectado tasher

  • PIC10
  • *
  • Mensajes: 3
Re: Enviar datos a la Eprom 24lc04 correctamente...
« Respuesta #3 en: 17 de Noviembre de 2010, 10:14:07 »
Buenas, Gracias por responder, estoy haciendo pruebas, con diferentes memorias 24Lc.... con el fin de memorizar el mayor Numero de lecturas de temperaturas por minuto  , estoy con el  Pic 16F876, y con el Reloj DS1307, la eprom ahora mismo estoy con la 24Lc32Ade pruebas, y envio la informacion en modo texto, queria preguntar, en que  formato se podria enviar los datos a la eprom , con el fin de que ocupe el menor espacio posible ascii, hex, dec,... de manera que luego se puedan extraer facilmente,
así todo el 16f876 dispone de un contador interno, que en modo Sleep, puede detectar los Impulsos del DS1307, pero no sé activarlo, sé recetar y programar el ds1307, pero no el contador interno, en modo ahorro de energia"sleep" ....se agradece cualquier ayuda....

Desconectado zeusjorg

  • PIC10
  • *
  • Mensajes: 36
Re: Enviar datos a la Eprom 24lc04 correctamente...
« Respuesta #4 en: 18 de Noviembre de 2010, 20:46:24 »
Hola

lo siento por tardar tanto en contestar.
Casi tenemos el mismo proyecto.
Yo estoy haciendo algo muy parecido.
Yo uso unos sensores los sht15 de sensiron para medir la humedad y temperatura lo mando por RF y otro micro se dedica recivir estas señales y a guardar en varias eeprom.
Lo que guardo es:
- humedad.
- Temperatura.
- estado de la bateria.
- Minutos.
- Horas.

Ademas de una multitud de variables.
Yo de momento uso el 24lc64.
Pero estoy replanteandome de utilizar una tarjeta SD. Pero el codigo para usar una SD en picbasic es enorme y complicado.
Lo que uso para organizar y enterarme un poco es realizar una hoja excel.


Yo e conseguido realizar la organizacion de la memoria para Variables.

Me falta saver como organizo los datos obtenidos de los sensores.

Yo tambien me gustaria saver lo del sleep. Pero en mi proyecto seria mas bien para el sensor porque va en bateria.

Pero no se como sincronizar 9 sensores y un mismo receptor y encima que se ponga en bajo consumo.

haver si nos podemos ayudar mutuamente.


que sensor usas tu?

PD: solo llevo 1año en esta materia y hay muchas cosas que se traban. pero gracias a este foro nos ayudamos mutuamente.

un saludo