Comunicación entre pic16f628a y ds1302

hola gente del foro como estan?
bueno yo aca estoy con un mareo que no se imaginan jajaja
llevo leyendo pero cada ves me confundo mas y necesitaria que me tiren una mano, sinceramente no me agrada preguntar algo sin estar algo metido en el tema pero bueno las circunstancias me llevan a pedir ayuda de cero.
paso a contarles programo en lenguaje basic y estoy queriendo configurar leer y leer información de un ds1302 pero no se no logro establecer comunicacion con el mismo pense que se hacia por I2C pero lei en una de las tantas paginas que consulte que la comunicacion es simplemente serial.
si digo algun disparante perdonen pero sinceramente estoy muy mareado con respecto a esto
les agradeceria si me pueden tirar una punta por donde comenzar a investigar
ya baje los datasheet del integrado y lo conecte y se que lleva un cristal 32768khz pero... cuando quiero leer información del mismo y mostrarla en un lcd todo lo que logro es que el lcd me muestre "nada".
les agradeceria si me pueden ayudar.
como siempre un abrazo y gracias
 
gracias ya lo habia visto pero... el asembler me mata jajaja
me doy cuenta qeu le tendre que empezar a meter mano porque se usa mucho
gracias igual pero solo manejo basic
un abrazo y gracias por tomarte tiempo en responderme
 
hola,
bueno segun leo y entiendo el datasheet, para leer y escribir datos del componentes necesitas 3 señales:
el reloj : SCLK
la señal de datos : I/O
y la selecion : CE

cuando quieres escribir o leer primero activas la señal CE, la pones a nivel alto. depues pones lees el primer bit y activas el reloj. a cada golpe de reloj, es decir cuando el reloj pase a nivel alto lees el bit correspondiente.
yo te aconsejaria para que estes seguro de que estas leyendo algo de que envies lo data que estes leyendo a RS 232 de tu PC teniendo el hyperteminal activado y verificar que estas leyendo algo sea lo que sea.

espero haberte ayudado un poco
 
gracias y ya me pongo a probar eso
estoy usando un simulador el proteus en el cual puse un lcd y estoy mirando lo que lee

leer:
'para poder establecer comunicacion con el DS1302 poner pin_RST en calor alto
high pin_rst
shiftout pin_io,pin_sclk,LSBFIRST,[rdburst]
shiftin pin_io,pin_sclk,LSBFIRST,[secs,mins,hrs,day,day,day]
low pin_rst
Lcdout $FE, 1 ' Clear LCD screen
Lcdout $FE,$0F
LCDOUT $FE,2
PAUSE 10
LCDOUT $FE,1, "Valor leido: ", dec secs
pause 100

goto leer

ese es un fragmento de codigo y vere lo que me dijiste, hasta ahora con esto logro leer pero... tengo que decodificar la información recibida y algo importante por si alguien lee esto y esta trabajando con el ds1307 el ds1307 usa I2C y este shiftin/shiftout
 
Antes que nada, de nada!

Son pocas veces las que puedo aportar algo a este foro, y cuando puedo lo hago con ganas.

remramon2007 dijo:
tengo que decodificar la información recibida

La información que lees viene directamente en BCD, pero ten cuidado que algunos registros tienen alguna información adicional que tendrás que enmascarar.

Por ejemplo, si lees el año, los primero cuatro bits se corresponden directamente con la decena de los años, y los cuatro siguientes con la unidad. Ej. si fuera el año 97 leerás: 97 en hexadecimal o 1001 0111 en binario.

Hasta ahí todo sencillo, pero si lees la hora, en formato AM/PM, deberás eliminar los dos bits mas altos, el siguiente te dirá si es AM o PM, y los otros 5 serán las horas: el primer bit de las decenas y los otros cuatro de las unidades.
Ej.: en modo AM/PM, si lees B2 en hexadecimal (10110010), eliminas el bit 7, el bit 5 en estado alto significa PM, con lo cual enmascarando te quedas con: 00010010 (bits 0 a 4), que en hexa es 12, o sea que son las 12 PM.... Se entiende algo?

Pag 7 del datasheet, columna derecha para lo que falta: minutos, segundos, etc.

Espero esta vez haber aportado algo más, según lo que interpreté ya lograste leer los registros, que es la parte mas complicada.

Ya que no me cuesta escribir, sigo (jajaj): Si por ejemplo tienes el año 97, deberás mandar al LCD de a cada dígito por vez, o sea enmascaras y envías el 7 (al que le debes sumar 30 en hexa, recuerda que el ASCII para el número 7 es 37 en hexa ). Lo remarco porque ese fue un error que tuve en su momento. Luego enviarás el 9 (ojo de no enviar 90) y le harás el mismo tratamiento.

Saludos!
 
Hola! Disculpen por interrumpir un poco el flujo de este tema, solo quiero poner una pequeñísima observación sobre el programa en assembler que sale en el primer Link dado en esta conversación: como se necesita al menos una entrada en el PIC, tienen que poner un 1 en uno de los TRIS del programa mostrado.

Esta observación es para el que no sabe de assembler y se quede con la boca abierta al no ver qué rayos está pasando, que por qué no está funcionando esto, siesque lo grabó en un PIC.

Agradezco recibir el honor de que en ese link salga un programa hecho por mi, les quiero contar además que lo he probado con PROTEUS pero nunca lo he probado en la vida real. Además, la compuerta, ya han visto que no es I2C, si no que es SPI. Así se llama.

Saludos!

PD: Otra cosa más: la forma de lograr esto lo he hecho leyendo y re-leyendo y re-leyendo el datasheet del DS1302 hasta entender por ejemplo eso de que los cuatro bits de un Byte que se lee corresponden a los minutos por ejemplo, asiique te vuelvo a recomendar: lee el datasheet nuevamente... es una lata pero asi verás lo que ocurre.
 
bueno gracias gente por toda la data!
ya me pongo a seguir trabajando en esto :p hasta lograr hacerlo funcionar lo que si por lo que estube leyendo es que parece ser que el ds1307 es mas sencillo pero... el proteus que tengo no me trae el ds1307 para simular, ya baje la libreria la instale y todo pero me sigue sin andar. igualmente ya que estoy en el baile voy bailar hasta hacerlo funcionar.
probare lo que me dijieron y luego les cuento haber que paso...
un abrazo y gracias devuelta por todo
 
Atrás
Arriba