Clock DS1307 con micro motorola

Buenos días foristas,
Soy yo otra vez. He retomado el código C que hace lectura del DS1307 a LCD16*2, y tengo que añadirle tres pulsadores uno que entre a modo (y pare la lectura del conteo del DS1307) y me permita escoger la variable de tiempo (seg,hor,min,day,date,mes,año) que voy a cambiar.Otro que me permita cambiar su valor (incrementar) y uno que me cargue eso en el DS1307 y reinicie a la lectura a lcd desde la fecha cargada.

Por eso necesito su ayuda, ahora tuve problemas con que lo ponía a pasar del 31 de dic 2010 a 1 enero del 2011 pero apesar que cambiaba su hora, se me quedaba en el 31 de dic 2010. Luego lo arreglé , pero como saben el RTC también tiene una variable day (que creo que va 1-7) y lo que hice fue poner en lcd :

LUN;MAR;MIE;JUE;VIE;SAB;DOM, con un switch, pero al acabar en domingo (yo ajusto la fecha en la que hay este cambio y así verificar) no pasa a lunes de nuevo, es decir no es cíclico y es lo que me falta antes de ponerle las rutinas de pulsadores.

el adjunto es un archivo de word comprimido.
Por ahora sólo los molesto con eso, gracias

Aquí les adujnto el código, ya cambié le switch con if-else y luego traté con una matriz, el bucle for(;;){} y nada.

Por fav, se los pido , me gustaría acabarlo antes de año nuevo y dejarlo disponible para todos los que hasta ahora aprendemos C.

aquí adjunto cómo se ve en proteus(Doc1.rar)

Buenos , días al asunto del switch le agregué el default par que se encargue de pasar del DOM aLUN, pero me borra la hora,min,seg al cambiar de DOM a LUN.

Ya veremos que más le hago.

jajaj, creo que "ya quedó" la lectura:

El asunto es que logré que pasara bien de DOM a LUN, pero mi duda es que añadí el default (al final de los casos del switch) que incluye unos if-else anidados

Mi problema es que , si bien cambia de DOM a LUN, el responsable del cambio creo que es el default, pero no tengo cómo saber si luego pasa bien a MAR, y me vuelve a hacer el ciclo del resto de la semana y pasa correctamente a LUN de nuevo; O si al ingresar a ese default luego, va a molestar (porque se mete a los anidados y no sé si salga, si no sale, qué importa, pero lo hace bien? ) y como ven en el código, al inicio yo escribo intencionalmente el DS1307 para probar esos cambios.

¿qué me dicen, parece que pasa la prueba?
ahí va el archivo y las tomas de pantalla de la sim.
Ahor más tarde subo las rutinas para los pulsadores a ver cómo las incorporo.

De nuevo gracias por leer.
 

Adjuntos

  • printf day.rar
    10.9 KB · Visitas: 146
  • Doc1.rar
    78.5 KB · Visitas: 131
  • Código Aparentemente ok.rar
    157.9 KB · Visitas: 201
Última edición:
Este es el archivo del código en CCs de"todo el programa", al compilar me da este error:

UNA EXPRESIÓN NUMERICA DEBE APARECER AQUÍ! en donde dice:
i2c_write(ds_seconds) ;//indica que ponga registro en ds_seconds

no sé si debo poner la dirección en 0x00,o tal vez sólo (seconds, pero me deja muchas advertencias) u omitir esto aunque no croe que sirva sin esto, ya que sin las rutinas de pulsadores, no molesta por eso.

while(1)
{
delay_ms(retardo);//cada cuanto actualiza, tiempo en lcd
i2c_start();//inicia i2c
i2c_write(0xd0); //direcciona DS1307 write
i2c_write(ds_seconds);//indica que ponga registro en ds_seconds
i2c_stop();
i2c_start();
i2c_write(0xd1);//lee DS1307

seconds =i2c_read();
minutes =i2c_read();
hours=i2c_read();
day = i2c_read();
date = i2c_read();
month = i2c_read();
year = i2c_read(0);
i2c_stop();
// visualización y final de programa.

Por fav si pueden ayudarme, sería genial.
Gracias de nuevo.
 

Adjuntos

  • reloj en lcd última versión CCS.rar
    10.3 KB · Visitas: 245
Hola:
Fig2403_DS1307.gif


Puedes bajarte el código fuente en:
http://www.pic16f84a.org/index.php?...w=article&id=66&Itemid=87#Proteus_Capitulo_24

Saludo.
 
Este es my bueno , sobretodo porque el pic es el 16f84, pero aún así está en ASM y por ahora trabajo sólo en C.Voy a revisar a ver qué puedo copiar y editar en C.

Gracias y saludos.
 
Atrás
Arriba