Cómo hacerlo: reloj binario con Freeduino SB 2.1


Solarbotics acaba de lanzar su propia versión de la placa de desarrollo Arduino. Basaron su tablero en el proyecto Freeduino. Pensamos que esta sería una buena oportunidad para revisar la nueva placa y también presentar un método para construir un reloj binario simple. A lo largo del camino, cubriremos algunos conceptos básicos de la conexión de LED e interruptores a un microcontrolador.

Si no ha oído hablar de Arduino, definitivamente está tratando de evitarlo. Arduino es un paquete de hardware y software que permite una fácil programación y creación rápida de prototipos, reduciendo una barrera de entrada para el desarrollo de microcontroladores y en términos de costo y aprendizaje.

Hay dos tipos de placas compatibles con Arduino. Las placas compatibles con "programas" no tienen el mismo diseño físico, pero pueden ejecutar los programas generados por el IDE de Arduino. También tienen un cargador de arranque compatible en el chip AVR. Ejemplos de tales placas son el Boarduino y el Arduino Mini.

Las placas 100% compatibles tienen los pines de la cabeza exactamente en la misma posición y orden que el diseño de referencia de Arduino. La razón por la que esto es importante es que hay "protectores" de Arduino que se conectan a la parte superior de Arduino. Los más populares son ProtoShield y XBee shield. Freeduino SB es el último tipo, placa 100% compatible con hardware y software.

Entonces, si es 100% compatible, ¿por qué es Freeduino y no Arduino? Es una licencia. Si bien los programas y proyectos de Arduino son gratuitos (como en la cerveza), el nombre real de Arduino es una marca registrada y requiere permiso para su uso. Para algunas personas, esto no era lo suficientemente libre, por lo que crearon Freedom bajo la licencia Creative Commons, que no tiene derechos de propiedad intelectual, ni derechos de autor, marcas comerciales ni licencias restringidas. Esto permitió a Solarbotics construir Freeduino y asegurarse de que no estaban violando nada.


El Freeduino viene como un "mini-engranaje", lo que significa que todos los componentes de montaje en superficie están terminados, dejando un poco más de una docena de piezas de orificios para soldar. Las instrucciones son divertidas y están bien escritas, solo para alguien que sepa jugar. El Freeduino fue al menos tan fácil de montar como un Boarduino y tomó menos tiempo. Es posible convocar a la junta en menos de una hora, incluso para alguien agotado con las habilidades del laúd. Si bien las instrucciones y las afirmaciones dicen que puede usar una ranura USB normal o una mini ranura, el kit no viene con ninguna de las dos. En su lugar, hay dos versiones del kit, por lo que debe decidir antes de comprar qué conector USB desea. Nuestro kit viene con un mini conector USB.


Aquí está el Freeduino ensamblado (rojo a la derecha) junto a un Arduino NG (ligeramente dañado). Los PCB tienen el mismo tamaño y forma. Tenga en cuenta la diferencia que hace el conector USB.

Resulta que la elección del conector USB puede afectar la compatibilidad de la placa Freeduino. Debido a que han cambiado las cosas, el enchufe USB enorme habitual inserta algunos protectores Arduino, por lo que es posible que no encajen. Como dice el manual, "Nuestro proyecto empuja el conector USB-B hacia arriba para dejar espacio para el interruptor, y bloqueará algunas placas Shield". El miniconector USB no tiene este problema, por lo que si el cable correcto está a mano, es incomprensible. Muchos teléfonos móviles y cámaras digitales comunes utilizan este tipo de conector.


Aquí hay tres cables USB: regular, mini y micro. El medio es compatible con el miniconector USB de Freeduino.

Una buena característica del Freeduino es que el chip ATmega viene precargado con el programa "blink" (este es el "hola mundo" del universo Arduino). Una vez ensamblada, al operar la placa se inicia inmediatamente el programa de parpadeo, que muestra inmediatamente que la placa está funcionando.

Aunque todas las placas Free / Arduino son compatibles, es posible agregar funciones, como demuestra Solarbotics con esta placa. En general, el Freeduino que armaron es una mejora con respecto a la generación actual de Arduino Diecimila. La mayoría de los usuarios no notarán el mejor uso de los condensadores para la protección de circuitos. Notarán la mejor ubicación de los indicadores que están más cerca del borde del tablero. El cambio es un poco engañoso. Parece estar entre el regulador de voltaje y el chip ATmega. Incluso con el interruptor en la posición "apagado", todavía se usa algo de energía.

Aquellos que usan Freeduino para aplicaciones en tiempo real apreciarán el cristal de 16 MHz mucho más preciso, que tiene aproximadamente 1000 veces menos error que otros proyectos. El PCB también tiene algo de espacio para la personalización, que será útil para aquellos que intentan construir proyectos compactos. Hay un espacio para agregar un potenciómetro (potenciómetro a medida) que puede establecer el voltaje de referencia analógico para el convertidor AD. Tenga en cuenta que el equipo no viene con esta pieza. Al trabajar con sensores que no son TTL, el trimpot podría salvar algunas partes externas. Solarbotics también ha dejado espacio para agregar un segundo regulador de voltaje más fuerte si es necesario. Sin embargo, no está claro cuáles son los límites del que está en el tablero.
La característica de la que parecen más orgullosos es el LED azul en el pin 13.

Dado que el Freeduino tiene un cristal más preciso, decidimos ver cómo actuaría como un reloj. Un reloj binario es el más fácil de implementar porque la pantalla es solo una fila de LED idénticos. Cada LED está conectado a un pin a través de una resistencia y conectado a una base común. La salida digital del controlador puede encender y apagar el LED. Esta calculadora ayuda a elegir exactamente el valor de resistencia correcto, pero hay suficiente tiempo libre para una resistencia lo suficientemente cerca. Tenga en cuenta que la polaridad del LED es importante.

Un reloj no es muy útil si no puede configurarlo, por lo que este reloj incluye dos interruptores. Un conmutador selecciona qué número establecer y el otro conmutador se utiliza para establecer el valor. Los interruptores están conectados con una resistencia de voltaje. [Ladyada] tiene un tutorial largo pero completo sobre el uso de interruptores. Los interruptores deben ser revelados, pero nos ocupamos de eso en los programas. Se trata de todo lo que hay en el hardware. Tenga en cuenta que usamos algunos de los pines analógicos como E / S digitales. El chip admite esto, así como la última versión del software Arduino. Asegúrese de usar al menos la versión 11 del paquete Arduino o los botones no funcionarán.


El software Arduino funciona como un gran bucle. Cada vez que recorre el ciclo, nuestro programa hace lo siguiente:

  • Vea cuántos milisegundos han pasado desde la última vez y ajuste el tiempo interno en consecuencia.
  • Si es necesario parpadear un conjunto de LED, encienda su estado.
  • Verifique el estado de los botones; ajuste el tiempo en consecuencia.
  • Muestra la hora en binario.
  • El cálculo de milisegundos nos guarda la biblioteca Arduino por una interrupción de tiempo. No es tan simple como parece al principio, ya que la calculadora de milisegundos Arduino puede funcionar. Entonces, hay un código adicional para detectar y tratar esa condición. Entonces todo lo que tenemos que hacer es separarlo en horas, minutos y segundos.

    Lidiar con los botones resulta ser la parte más difícil. Primero queremos actuar solo cuando se acaba de soltar el botón; no cuando está arriba, presionado o simplemente presionado. En segundo lugar, es necesario revelar los botones. La divulgación es un tema completamente separado que merece un artículo personal. Usamos software para disputar un truco que espera la estabilización de entrada. Para aquellos que quieran aprender más, el artículo definitivo sobre el tema está aquí (PDF).

    Mostrar la hora es en realidad la parte más fácil, ya que solo tenemos que configurar los distintos pines de acuerdo con los bits en las variables de tiempo. El programa completo está disponible aquí (PDE). El IDE de Arduino lo compila y lo descarga a la placa con solo unos pocos clics.

    Después de descargar un programa o reiniciar la placa, el reloj se inicia inmediatamente y comienza a contar los segundos. La pantalla consta de tres conjuntos de LED que muestran números binarios. El 5 más a la izquierda muestra las horas en formato de 24 horas (militar). El seis del medio muestra los minutos y el último conjunto es de segundos. El reloj se puede configurar con los dos botones. El botón 1 selecciona qué parte del tiempo configurar: horas, minutos o segundos. Al presionar el botón 1, gira cada parte. El conjunto de ajustes de LED parpadeará brevemente. El botón 2 se usa para cambiar realmente el valor. Para horas y minutos, el botón 2 aumentará el valor cada vez que se presione. Eso significa que es posible que deba presionarse hasta 59 veces para establecer los minutos. Cuando configura los segundos, el botón 2 solo los restablece a 0. Pensamos que esto era más fácil de sincronizar que intentar capturar un número en movimiento.

    Para evitar cambiar accidentalmente la hora, el software implementa "seguridad". Si no se pulsa ningún botón durante unos 3 segundos, el botón 2 se desactiva hasta que se vuelva a pulsar el botón 1. Si presiona el botón 1 cuando la seguridad está activada, el conjunto de LED seleccionados ahora parpadeará y volverá a encender el botón 2.

    Solo para ver si el cristal más preciso difiere, lanzamos el mismo programa en Freeduino SB y más tarde en Boarduino. Las tablas se establecieron y se compararon con un reloj "atómico" controlado a distancia como tiempo de referencia. Aquí hay una imagen del Boarduino operando el reloj binario:


    El Boarduino hizo un trabajo sorprendentemente malo ahorrando tiempo. Sin una corrección, ganó más de un minuto por hora. El Boarduino utiliza un resonador, que puede tener una deriva de hasta un 0,5%. Tuvimos que aplicar un factor de "fudge" del 0,85% para evitar que se desvíe notablemente. Incluso entonces tiende a ganar de unos segundos a unas pocas horas. La Liberada lo hizo mucho mejor; a la deriva solo unos segundos durante una racha de cinco horas. Entonces, el cristal más preciso difiere.

    Hay mucho margen de mejora en este proyecto. Usamos una placa prototipo con muchos cables de salto, pero hay muchas mejores formas de conectarla. Incluso podría llevarse a cabo como escudo.

    Esperamos que este procedimiento haya sido útil tanto como revisión de la placa Freeduino SB como como ejemplo de microcontroladores simples de entrada y salida. Feliz piratería.

    • Tomás dice:

      excelente redacción, inspiradora y minuciosa.

      ¡informar!

      Gracias

    • bokubob dice:

      Su "reloj" atómico "controlado por radio" probablemente se sincroniza una vez al día, por lo que para sus propósitos es solo un reloj de cuarzo; no es que algo esté mal en eso.

      -Jonatano

    • ladyada dice:

      probablemente tenga problemas para ahorrar tiempo porque el código usa el arduino millis () que (última verificación) es 1,024 ms, no 1,000 ms, por lo que siempre acelerará alrededor del 3% 🙂

      tal vez también quieras usar un cristal de reloj, están creados solo para esto. Me vinculé a un artículo sobre el uso de un boarduin (aunque podrías hacerlo con cualquier dúo) aquí: http://www.ladyada.net/rant/2008/04/add-a-watch-crystal-to -a- boarduino /

    • ladyada dice:

      Además, si desea saber qué tan preciso es un cristal, se puede calcular fácilmente. la mayoría de los cristales en proyectos baratos tienen una precisión de 50 millones (aunque puede llegar a 100 ppm) 30/1000000 = 0.003% de precisión, que es 166 veces más precisa que un oscilador cerámico

    • WestfW dice:

      La esfera del reloj está en 1.024 ms, pero la función "millis ()" tiene algunas matemáticas que se supone que corrigen esto, errores de redondeo del módulo ...

    • WestfW dice:

      Por cierto, como una de las personas involucradas en el proyecto Freedunio. ¡Me gustaría felicitarlo por su resumen excepcionalmente conciso y preciso de las cosas involucradas allí!

    • faska dice:

      ¡Buen articulo! ¡Soy inspirador!

    • Jason Alverez dice:

      Hola, acabo de encontrar este blog hoy, pero debo decir que se ve muy bien. Yo estoy totalmente de acuerdo con tu publicacion. Buen día, sigan con el buen trabajo y definitivamente seguiré leyendo.

    • Luis dice:

      Hola a todos,

      Sé que es una publicación antigua, pero seguiré preguntando: el enlace al código está roto. ¿Alguien puede enviarlo por correo electrónico o enviarme el código por correo electrónico?
      ¿Alguien tiene el diagrama de cableado completo para este proyecto?

      Gracias por cualquier ayuda.
      (Publicaré mi correo electrónico si es necesario)

Gloria Vega
Gloria Vega

Deja una respuesta

Tu dirección de correo electrónico no será publicada.