Ver I2C + RTC DS3231 usando C
En éste post mostraré un programa que permite configurar un DS1307. Como sabemos el DS1307 se comunica por I2C.
En éste post mostraré un programa que permite configurar un DS1307. Como sabemos el DS1307 se comunica por I2C.
El programa tiene dos partes que son ejecutadas por dos interrupciones.
En la interrupción del timer 1, que se ejecutará cada 1000ms (1seg), leerá la hora y fecha del DS1307 y se mostrará en un LCD.
Por el uart llega información que permite leer ó escribir el DS1307.
La información para escribir(configurarlo a una hora y fecha determinada) consta de 8 bytes que son:
| CABECERA(1) | COMANDO(1) | HORA(1) | MIN(1) | SEG(1) | FECHA(1) | MES(1) | AÑO(1) |
La cabecera es 0xBA
El comando puede ser ‘W’(0x57) para escribir y ‘R’(0x52) para leer.
El resto de datos deben estar en BCD.
Un ejemplo de esto es: BA 57 12 21 08 08 07 11
Donde la hora es 12:21:08 y la fecha es 08/07/11.
En el caso que se quiera leer solamente hay que enviar BA 52 y la respuesta a esto será por ejemplo BA 57 12 30 12 08 07 11 , donde se indica que la hora leída es 12:30:12 08/07/11
Ahora mostraré las macros usadas.
Ahora las rutinas para I2C y DS1307.
Como ya sabemos cada esclavo que se conecta al bus I2C debe tener una dirección y en éste caso la dirección del DS1307 es 0b1101000 + el bit de R/W, es por ello que para escritura se envía D0 y para lectura D1.
Ahora las rutinas del UART.
Por último el mensaje principal.
Hay que tener en cuenta que se esta usando el RC interno.
En el siguiente video se muestra el funcionamiento del programa.
El programa que se muestra para configurar el DS1307 lo hice en visual C#, éste programa lo pueden descargar de éste enlace RTC_DS1307.
Si no lo pueden abrir instalen netframework 3.5.
Si no lo pueden abrir instalen netframework 3.5.
HOLA BUEN DIA, NECESITO AYUDA ESPERO ME PUEDAS ORIENTAR HACERCA DE COMO HACER UNA DECODIFICADOR DE CONTROL REMOTO MEDIANTE ATMEGA8. NECESITO MOSTRAR EN UN LCD EL BOTON DEL CONTROL QUE PRESIONE, ESPERO QUE ME PUEDAS DAR UNA IDEA DE COMO HACERLO GRACIAS.
ResponderEliminarSALUDOS.
¿En que necesitas ayuda ? ¿En el programa ?.
ResponderEliminarLa verdad es que no he trabajado con infrarrojos, pero entiendo que necesitarías de un Receptor Infrarrojo, en éste enlace hay información sobre un receptor: http://www.microingenia.com/electronics/upload/docs/ModIR38KHz/Manual_ModIR38KHz_V1.0.pdf
Luego de tener el código del botón que se presiono seria muy sencillo poner esa información en un LCD.
En estos otros enlaces hay algo mas de información sobre los protocolos.
http://robots-argentina.com.ar/Comunicacion_protocolorc5.htm
http://www.ucontrol.com.ar/Articulos/protocolo_de_los_controles_remotos_philips_RC5/protocolo_de_los_controles_remotos_philips_RC5.htm
Si ya estube leyendo sobre el protocolo que utilizan el problema que no se como implementar el codigo para decodificar la serie de pulsos que envia el infrarojo espero me hayas entendido y me puedas ayudar gracias. saludos
ResponderEliminarEl receptor ya no te envía un tren de pulsos.
ResponderEliminarLa salida del receptor se encuentra normalmente en '1'. Si en el centro del bit hay un flanco de bajada será un '1', y si el flanco es de subida será un '0'.
Por ejemplo:
1 1 0 0 0 0 0 1 0 0 0 0 0 1
-----_-__-_-_-_-_--__-_-_-_-_--_-----------
Aquí se ve los bits de inicio(11), el bit de conmutación(0), la dirección(00001=0x05) y el comando(000001=0x01). Cada bit esta compuesta de dos estados. Alto-Bajo para el '1' y Bajo-Alto para el '0'.
Cada bit estado demora 889us, entonces cada bits demora 1778us.
Tu programa debe esperar los bits de Start + el bit de conmutación, luego esperar los 5 bits de dirección y por último los 6 bits de comando.
Ya que no hay ATmega que tenga un periférico que realice la decodificación, esta debe ser hecha por programa, y la idea para hacer esto es usar retardo y testear el pin donde estará conectado el receptor para poder verificador su estado.
En éste link encontrarás lo que quieres.
ResponderEliminarhttp://www.atmel.com/dyn/resources/prod_documents/doc1473.pdf
Gracias por el aporte, se me despejaron algunas dudas que tenia sobre el TWI del atmega y como trabajar con el DS1307, yo estoy haciendo un proyecto parecido, pero con un atmega16 y programo en C, y los datos los ingreso por un teclado matricial.
ResponderEliminarMuy bueno el blog, definitivamente va a favoritos, saludos desde Arequipa.
Hola, estas vendiendo esto por si acaso?, necesito armar uno, no pude descargarme el archivo que pusiste, necesito crear cuenta en 4shared me cree y no me llega el mail de verificacion hasta ahora por lo tanto no tengo cuenta para bajarme. En el programa pusiste F_SCL = 100Khz de esta manera haces que el DS1307 trabaje a esa frecuencia, supongo que tienes que ponerle un cristal externo al DS1307 pero no puedo verlo en el video de cuanto es. Hay un bloque que supongo que es solo para ver como es la comunicacion del I2C, Mencionaste: "El programa que se muestra para configurar el DS1307 lo hice en visual C#" con esto te refieres a todo el programa que muestras en esta pagina. Lo necesitaba para implementarlo en la realidad y programarlo en Assembler. Gracias
ResponderEliminarhola, una pregunta y como hago para programar en ese mismo lenguaje la pantalla lcd?...
ResponderEliminarNo entiendo tu pregunta, sé mas especifico.
EliminarEstá pidiendo un código de ejemplo sobre cómo poner caracteres en el LCD (driver hitachi HD44780) utilizando asm (que es el lenguaje que utilizaste en este caso). Lamentablemente nunca me senté a aprender assembler, por lo que no puedo ayudar en este caso. Saludos.
Eliminarcomo programo la pantalla LCD en el mismo lenguaje de programación con el que has realizado el programa de arriba?
ResponderEliminar