TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: tasher 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.
-
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
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
-
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
-
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....
-
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