loading...

14 de abril de 2012

Reloj en tiempo real añade una precisión de indicación de la hora del sistema microcontrolador

NOTA DE APLICACIÓN 4641

 

 

Muchos microcontroladores son circuitos de temporización, pero sólo unos pocos incluyen una batería de respaldo en tiempo real (RTC). Sin embargo, muchas aplicaciones requieren una RTC, que usted puede agregar fácilmente mediante el uso de una red 1-Wire. En este artículo se explica cómo añadir un RTC que soporta el protocolo 1-Wire a un sistema basado en microcontrolador. El código necesario está incluido. Explica los principios y técnicas que se aplican por igual a cualquier microcontrolador, cuyo propósito general de E / S ( GPIO ) pines son capaces de manejar el protocolo 1-Wire de comunicaciones.

Objetivos del diseño

Esta demostración muestra cómo implementar métodos para realizar las siguientes operaciones mediante la interfaz 1-Wire:

  • Lea el ID de ROM de 64 bits de la RTC seleccionado
  • Iniciar y detener el RTC
  • Leer el valor actual de la RTC
  • Ajuste el RTC a un nuevo valor

La demo también se mostrará el valor actual del RTC en un formato legible, es decir, la conversión de primas a un segundo año / mes / día / formato de hora. Esto permitirá al usuario modificar el valor del reloj mediante el incremento de los diversos valores convertidos (por ejemplo, año, mes, día) en lugar de calcular e ingresar un nuevo valor para los segundos.

Como para cualquier aplicación que almacena un número de segundos para que el valor de fecha / hora, debemos elegir un cero inicial . Para esta aplicación, que la línea de base es 1 de enero de 2000, a las 12:00:00 AM, para lo cual la cuenta de segundos prima es igual a cero (00000000h).

Configuración del sistema

La interfaz 1-Wire es fundamental para este artículo. Le permite agregar un RTC que soporta el protocolo 1-Wire a cualquier microcontrolador. El DS1904 RTC i botón ® se utiliza en este ejemplo. Esta aplicación utiliza la MAXQ610microcontrolador, ya que puede comunicarse fácilmente con un RTC, configurar el reloj y los valores de control, y convertir entre los segundos prima y la fecha del calendario correspondiente, incluso cuando se utiliza el lenguaje ensamblador.

El bajo consumo de energía MAXQ610 es muy adecuado para aplicaciones portátiles, pero carece de una RTC con batería de respaldo. Puede, sin embargo, conectar este a un microcontrolador dedicado RTC mediante el uso de uno de sus pines GPIO. Código de demostración para el microcontrolador se ha escrito utilizando la asamblea con sede en MAX-IDE medio ambiente. Está diseñado para funcionar en la máxima evaluación (EV) kit, MAXQ610-KIT . Fuente de código, archivos de proyecto y documentación adicional se encuentran disponibles para descarga .

Ejecutar la aplicación

Se necesita el siguiente hardware para ejecutar el código de demostración:

  • MAXQ610-KIT Kit de EV
  • Fuente de alimentación de 5 V CC
  • Serial-to-JTAG o USB-a-tarjeta de interfaz JTAG
  • JTAG programación por cable (2 x 5 cable de cinta con 0.100in. pines)
  • Directo a través de serie DB9-cable de interfaz
  • PC con puerto COM disponible o el adaptador de USB a serie
  • DS1904L-F5 # RTC i Button
  • DS9094F + a través de agujeros de montaje i clip de botón

El código se ejecuta en el equipo de MAXQ610 EV. Un i clip de botón (DS9094F +) está instalado en el área de creación de prototipos y un DS1904L-F5 # RTC i insertado en el botón i clip de botón. Las conexiones se hacen entonces de la i clip de botón:

  • Conecte el conector de tierra de la i clip de botón (el pin marcado "+" en la parte superior del clip que está en contacto la parte posterior / de la cara sin etiqueta DS1904) a uno de los puntos de prueba GND en el kit de MAXQ610 EV.
  • Conecte el pin de datos de la i clip de botón (el pin en el interior de la pinza que hace contacto con la parte frontal / etiqueta de la DS1904) a las patillas del puerto P2.0 (pines P3.1) en el kit MAXQ610 EV.

También es necesario el siguiente software:

  • MAX-IDE en lenguaje ensamblador del entorno de desarrollo para un microcontrolador MaxQ
  • Microcontrolador Tool Kit (MTK) o emulador de terminal con la otra "terminal tonto" modo de

El paquete de instalación más reciente y documentación para el medio ambiente MAX-IDE están disponibles en nuestro MaxQ microcontroladores RISC página.

Los datos de la RTC se transfieren en serie a través del protocolo 1-Wire, sólo un cable de datos única y un retorno a tierra se requieren. Este RTC contiene un único identificador de 64-bits, en fábrica con láser en la ROM y un RTC / calendario implementado como un contador binario. Reside en un paquete durable MicroCan que resiste la suciedad, la humedad y los golpes. Este paquete se puede montar en casi cualquier superficie, incluidos los circuitos impresos (PCB) y los llaveros de plástico. Cuando se opera, el RTC agrega una fecha del calendario, hora y fecha, cronómetro, contador de horas, temporizador de intervalos, y la función de libro de registro de cualquier dispositivo electrónico o una aplicación integrada que utiliza un microcontrolador.

El RTC contiene un contador de 32 bits con 1-segunda resolución, que proporciona una autonomía de aproximadamente 136 años. Todo el hardware necesario para mantener el reloj en marcha, incluyendo el cristal de 32 kHz y una batería, están sellados en su interior. El dispositivo resultante tiene una vida útil mayor de 10 años, con una precisión de reloj de aproximadamente ± 2 minutos por mes en una sala de la temperatura de +25 ° C. Modo de funcionamiento (detenido o en ejecución) y el valor del contador de reloj puede ser leído o escrito utilizando la interfaz 1-Wire.

Conducción de la Red 1-Wire

La interfaz 1-Wire, proporciona energía y comunicaciones a través de un solo cable además de un retorno a tierra única.Esto significa que un pasador único puerto permite un microcontrolador para comunicarse con un sensor de 1-Wire.Una variedad de sensores y otros componentes han sido desarrollados para la operación en las redes 1-Wire.

Una red 1-Wire funciona con un solo maestro y varios esclavos en configuraciones multipunto. Requisitos de temporización son flexibles, permitiendo que todos los esclavos para sincronizar con el maestro a una velocidad de comunicación hasta 16kbps. Cada sensor 1-Wire tiene un único global de 64-bit ID ROM, por lo que el maestro 1-Wire,selecciona los esclavos de forma individual y precisa, independientemente de su posición física en la red.

La línea 1-Wire opera en un abierto de drenaje modo: el maestro (y también a los esclavos, cuando su producción se solicita), indica "cero" tirando de la línea a tierra, o "uno", dejando flotar alta. Esta operación es normalmente implementado con una resistencia pullup discreta unida entre la línea y V CC . Microcontroladores con un modo de pull-up débil en los pines de puerto (como el MAXQ610) sólo puede cambiar el pin del puerto de nuevo a ese modo y dejar flotar la línea de alta, sin resistencia externa es necesaria. Debido a que el maestro y los esclavos tirar de la línea de baja y nunca tire de ella activamente alta, la red 1-Wire opera en un cable-O de configuración. Este enfoque evita los conflictos de línea cuando varios esclavos intentan transmitir en el bus 1-Wire, al mismo tiempo.

Para impulsar la red 1-Wire, el microcontrolador utiliza un software para generar espacios de tiempo en un solo pin.Todas las franjas horarias son iniciados por el maestro 1-Wire, por lo que el microcontrolador no es necesario para controlar la línea 1-Wire, cuando no se está comunicando con un dispositivo esclavo. ¹

  • Restablecer ranuras de tiempo son aproximadamente 1 ms de ancho. Durante la primera mitad de la ranura de tiempo, el maestro (MAXQ610) mantiene la línea 1-Wire baja. A medio camino a través de la ranura de tiempo, se libera la línea 1-Wire y la deja flotar alta. Todos los esclavos 1-Wire presentes en la línea de responder al restablecer a sí mismos y tirando de la línea hacia abajo durante la segunda mitad de la ranura de tiempo. Los esclavos a continuación, generar un pulso de presencia , lo que indica que el maestro que uno o más esclavos están presentes y listos para comunicarse.
  • Escribir las franjas horarias son 60μs a 120μs de ancho, y utilizado por el maestro para transmitir los bits (0 ó 1) a uno o más esclavos. Ambos tipos de ranuras de tiempo de escritura empezar con el maestro tirando de la línea de baja durante al menos un microsegundo. Para transmitir un 1, el maestro libera entonces la línea (permite flotar alto) para el resto de la ranura de tiempo. Para transmitir un 0, el maestro mantiene la baja línea hasta el final de la ranura de tiempo.
  • Lea las franjas horarias son 60μs a 120μs amplia y utilizada por el maestro para leer bits (0 ó 1) de un dispositivo esclavo. La ranura de tiempo se inicia con el maestro tirando de la línea de baja durante al menos un microsegundo. El maestro libera la línea, lo que permite que el esclavo sea mantenerla baja (0) o dejar que flote alta (1). A mitad del intervalo de tiempo, las muestras maestras de la línea para leer el valor del bit del esclavo.

El MAXQ610 se cifra en unas 12 instrucciones de ciclos por microsegundo a 12MHz, por lo que fácilmente se ejecuta el estándar del protocolo 1-Wire en el software con un pin del puerto (P2.0). Se implementa leer ranuras de tiempo de una manera similar. Nótese que todos los bytes de datos en el bus 1-Wire se transmiten bit menos significativo ( LSB ) primero.

El valor de la resistencia pullup en el bus 1-Wire varía en función del número de dispositivos en la red, pero normalmente se especifica en 4kΩ a 5k. En contraste, la resistencia pullup débil en el pin puerto MAXQ610 varía de 15kΩ a 40kΩ, dependiendo de la operación de voltaje . Para evitar un intervalo de tiempo excesivo en el bus 1-Wire, que flota alta del estado de baja, el código de una breve conduce el autobús (a través de P2.0) con un alto estado normal que se "ajusta" el autobús al estado de alta antes de P2.0 a la normal débil pullup modo. Esta acción no causa interrupción en el bus 1-Wire, si, es decir, a evitar los intervalos de tiempo en el que el esclavo podía intentar sacar el autobús baja. Como alternativa, usted puede poner una resistencia de pull-up física externa en el bus 1-Wire, y luego manejar el pin del puerto en el modo de bajo nivel para un estado cero y en el modo de tres estados para un estado de alta.

Iniciar, detener y configurar el reloj

Debido a que más de un 1-Wire dispositivo puede estar presente en el bus 1-Wire, la comunicación con estos dispositivos producto en dos etapas. El maestro del bus una vez se selecciona un dispositivo 1-Wire con el que comunicarse y, a continuación las cuestiones de la comunicación. ² Después de que el maestro del bus transmite un impulso de reposición, todos los dispositivos esclavos en la declaración de bus 1-Wire para el valor predeterminado no seleccionado estatal. Varios comandos están entonces disponibles para el maestro del bus de selección del dispositivo con el que se comunican en la segunda etapa. Los comandos siguientes se utiliza el ID de ROM de 64 bits asociado con cada dispositivo esclavo. Los comandos son compatibles con todos los dispositivos 1-Wire.

Saltar ROM [CCh]

Este comando de un solo byte se activa todos los dispositivos esclavos en el bus. Es útil si sólo un único dispositivo 1-Wire está presente, o si el maestro del bus tiene que enviar el mismo comando a todos los dispositivos 1-Wire en el autobús. La solicitud anterior tiene un solo dispositivo en el bus (por ejemplo, el RTC DS1904), por lo que el maestro de bus (por ejemplo, el microcontrolador MAXQ610) utiliza este comando para activar a través de la RTC, antes de leer o escribir en ella.

Lea ROM [33h]

Este comando de un solo byte se activa todos los dispositivos esclavos en el bus y hace que se transmitan sus valores de 64-bit ID ROM de nuevo al maestro del bus. Puesto que activa todos los dispositivos esclavos, sólo puede ser utilizado para un solo-esclavo sistemas. De lo contrario, varios dispositivos esclavos provocará colisiones de datos en su intento de transmitir sus documentos de identidad ROM al mismo tiempo. Debido a que sólo un dispositivo (DS1904) está presente en el autobús en nuestra aplicación, el MAXQ610 utiliza este comando en el comienzo para que diga el ID de ROM del DS1904.

Coincidir ROM [55h]

Este comando selecciona un esclavo entre varios esclavos en el bus 1-Wire. Después de que el maestro del bus transmite este comando, se sigue por la transmisión de la ID de ROM de 64 bits de la unidad esclava para ser seleccionado. El dispositivo se combina con los ID ROM responde yendo a un estado activo, mientras que todos los demás dispositivos en el bus van inactivos y esperar a la próxima 1-Wire de restablecimiento desde el maestro del bus.(Este comando no se utiliza en la aplicación descrita aquí.)

Buscar ROM [F0h]

Este comando permite que el maestro de bus utiliza un proceso iterativo de descubrimiento para determinar los valores de identidad de la ROM de uno o más dispositivos esclavos en el ³ 1-Wire bus. (Este comando no se utiliza en la aplicación que se describe aquí.)

Lectura y escritura de los valores de reloj y control

Cuando el maestro del bus ha seleccionado el dispositivo esclavo 1-Wire (es decir, el RTC, DS1904) con la ROM de Skip o comando de lectura ROM, que el dispositivo está listo para aceptar 1-Wire comandos específicos para ello.Estos comandos ( Figura 1 ) se detallan a continuación:

Leer reloj [66h]

Este comando permite que el maestro de bus de leer el byte de control del dispositivo desde el DS1904 y el de 4 bytes (32 bits) valor RTC. El byte de control del dispositivo determina si el oscilador de 32 kHz que impulsa la RTC está en marcha o parado. Como se muestra en el código de abajo, un solo comando lee tanto el byte de control del dispositivo y el valor del reloj. Incluso si los dos valores no son necesarios, usted debe leer el byte de control del dispositivo antes de que el dispositivo de entrega los datos de reloj.

Escribir Reloj [99h]

Como complemento a la lectura del reloj, este comando permite que el maestro del bus para establecer nuevos valores para el byte de control del dispositivo y el DS1904 de 4 bytes contra reloj. Tenga en cuenta que debe escribir todos los bytes 5 y transmitir un impulso de reposición 1-Wire, antes de que los nuevos valores tengan efecto. El código de la aplicación anterior incluye rutinas que establecen el byte de control del dispositivo y el valor del reloj individualmente, por primera lectura de los 5 bytes de datos desde el DS1904 (1 byte de control del dispositivo más 4 bytes del contador de reloj), y luego escribir de nuevo los datos con los cambios apropiados.

Figura 1.  Estas funciones de reloj DS1904-comandos se toman de la hoja de datos.
Figura 1. Estas funciones de reloj DS1904-comandos se toman de la hoja de datos.

Conversión de valores de fecha y hora

Para convertir los segundos cuentan primas en forma de imprimir, la aplicación determina el valor de cada campo de fecha y hora (año, mes, día, hora, minuto y segundo) de forma individual, comenzando con el campo más grande (el año) y trabajando hacia abajo:

  1. Mientras segundos ≥ (segundos por año), restar (segundos por año) a partir de segundos y el Año de incremento.
  2. Mientras segundos ≥ (segundos por mes), restar (segundos por mes) a partir de segundos y el Mes de incremento.
  3. Mientras segundos ≥ (segundo por día), restar (segundo por día) a partir de segundos y el Día de incremento.
  4. Mientras segundos ≥ (segundos por hora), restar (segundo por hora) del incremento de horas y segundos.
  5. Mientras segundos ≥ 60, resta 60 de segundos y un minuto de incremento.
  6. El valor restante de segundos es el segundo campo.

Incluso si el maestro del bus ofrece soporte de hardware para la división, una operación de división simple no es suficiente para calcular los dos primeros valores de campo (años y meses). Esto es porque el número de segundos por unidad de campo cambia debido al efecto de los años bisiestos (que afecta al valor de años y meses) y el número de días por mes (que afecta sólo mes). A modo de ejemplo, comenzar con el año 2000 (un año bisiesto):

  • Segundos por año en 2000) = 366 (días) x 24 (horas al día) x 60 (min / hora) × 60 (seg / min) = 31,622,400 segundos.
  • Años estándar tienen un día menos (365 días), que cambia los segundos por año a (31.622.400 - 86.400) = 31536000.

Debido a que cada cuatro años es un año bisiesto, se calcula de la siguiente manera Año (tenga en cuenta que los artículos 2, 3 y 4 de este pseudocódigo son idénticos.):

  1. Si Segundos ≥ (segundos por año bisiesto), restar (segundos por año bisiesto) a partir de segundos y el Año de incremento, de lo contrario parar.
  2. Si Segundos ≥ (segundos por año), restar (segundos por año) a partir de segundos y el Año de incremento, de lo contrario parar.
  3. Si Segundos ≥ (segundos por año), restar (segundos por año) a partir de segundos y el Año de incremento, de lo contrario parar.
  4. Si Segundos ≥ (segundos por año), restar (segundos por año) a partir de segundos y el Año de incremento, de lo contrario parar.
  5. Volver a la línea 1.

El valor del campo Mes se calcula de una manera similar:

  1. Si Segundos ≥ (segundo en enero), restar (segundo en enero) y Mes de segundos de incremento, de lo contrario parar.
  2. Si Segundos ≥ (segundo en febrero), restar (segundo en febrero) a partir de segundos y el Mes de incremento, de lo contrario parar.
  3. Si Segundos ≥ (segundo en marzo), restar (segundo en marzo) de segundos y el Mes de incremento, de lo contrario parar.
  4. Proceder a través de los meses restantes.

Ejecución de la demo

Para ejecutar la demo, cargar y ejecutar la aplicación. A continuación, utilice el DB9 serie cable para conectar el kit de MAXQ610 EV J1 SKT a COM1 en el PC. Inicio MTK (o cualquier otro emulador de terminal) y abrir COM1 a 38400 baudios. La salida inicial debe ser similar al siguiente:

@
Identificación: 24B91231000000B2 AC 18F83065

+ 18F83065 10 de abril 2013, 02:15:01 pm
+ 18F83066 10 de abril 2013, 02:15:02 pm
+ 18F83067 10 de abril 2013, 02:15:03 pm
+ 18F83068 10 de abril 2013, 02:15:04 pm
+ 18F83069 10 de abril 2013, 02:15:05 pm

La segunda línea de código contiene el valor ROM ID DS1904 (24B91231000000B2), el byte de control del dispositivo (AC), y el valor actual del reloj (18F83065). El "+" valor en las líneas subsiguientes indica que el reloj está en marcha.El valor de tiempo se actualiza y se muestra tan a menudo a medida que cambia, que debe ser una vez por segundo.Pulse el botón "-" para detener el reloj. En ese momento usted puede modificar los valores del reloj presionando las teclas adicionales:

 


  • +Comience el día y comenzar la actualización automática de nuevo.


  • Y Incrementar el valor del año, y restablecer mes y un día hasta 01/01.


  • M Incrementar el valor de mes, y restablezca el día 01.


  • D Incrementar el valor de día (se envuelve alrededor, dependiendo del mes en curso).


  • h Incrementar el valor de la hora.


  • m Incrementar el valor de minutos.


  • s Restablecer contador de segundos a 00.


  • Z Poner a cero el contador de segundos, como borrar el tiempo de 1 de enero 2001, 12:00:00 am.

  • Referencias



    1. Consulte la hoja de datos de RTC DS1904 para más detalles sobre los requisitos de tiempo 1-Wire.


    2. Para más detalles sobre los siguientes comandos, consulte la hoja de datos DS1904 .


    3. Ibíd., www.maxim-ic.com/DS1904 .

    1-Wire es una marca registrada de Cypress Semiconductor, Inc. i Button es una marca registrada de Cypress Semiconductor, Inc. MaxQ es una marca registrada de Maxim Integrated Products, Inc.



    No hay comentarios:

    Publicar un comentario