Saltar al contenido

Reloj con pantalla de 7 segmentos hecho en casa

julio 10, 2021
FISFAU9HLFUV8IQ

Construí esto para mi novia y lo monté en una cáscara de coco. En el corazón hay un PIC16F727 en paquete TQFP y una pantalla de ánodo común. Obtuve la pantalla de mi ex líder de equipo, y dado que este tipo de pantallas ‘gritan’ por ser colocadas en un circuito, tuve que pensar en un nuevo proyecto.
Ya sea que el proyecto sea una pantalla de multímetro, un reloj, un calendario o un amperímetro, una pantalla es algo bueno para controlar. Puede ayudarlo a depurar el proyecto mostrando números en él, para averiguar dónde está su programa (ejecutándose o atascado) en este momento.

Este proyecto consta de una pantalla, algunas lecturas de botones, manejo del temporizador y algunos conteos de milisegundos, en el lado del software. Dado que este es un proyecto simple, daré más detalles sobre cómo funcionan realmente los periféricos utilizados del microcontrolador. Estoy dando algunas ideas y algunos enlaces útiles sobre temporizadores y exportación de ilustraciones a archivos PDF en Altium, por ejemplo.

Pero primero, ¡dibujemos el esquema!

Paso 1: el esquema y algunas palabras sobre los componentes

El esquema y algunas palabras sobre los componentesEl esquema y algunas palabras sobre los componentesEl esquema y algunas palabras sobre los componentes

He estado usando Altium durante casi un año, diseñé este proyecto usando este programa genial. Comencé creando un nuevo proyecto y agregando un archivo esquemático.
Que hay en ello:
– PIC16F727 – procesador
– Pantalla de 7 segmentos con ánodo común
– 13 x transistores lógicos BCR562 con resistencias de base incluidas
– resistencias
– encabezados de pines

Puede ver el esquema en los archivos adjuntos.

PIC16F727 – microcontrolador
Este procesador tiene 44 pines, y es bastante exagerado para esta aplicación, pero no he tenido ningún otro PIC en este momento. Algunas características importantes de este procesador:
– Oscilador interno de 16MHz
– -I²C, SPI, AUSART
– 2 X CCP (Caputure / Compare / PWM)
– ADC de 14 canales 8b
– Un temporizador de 8 bits (TMR0)
– Dos temporizadores de 16 bits (TMR1 / TMR2)
– Temporizador de vigilancia (WDT)
– Programación en serie en circuito ™ (ICSP ™)
– Módulo de detección capacitivo mTouch ™ incorporado
– Amplio voltaje de funcionamiento (1.8V – 5.5V)

No utilicé ningún otro periférico, sino un solo temporizador, el resto del algoritmo solo controla la pantalla y realiza un seguimiento del tiempo.
Si su versión del reloj va a ser una versión alimentada por batería, le recomiendo que haga algunas pruebas con las resistencias de límite de corriente para un consumo / visibilidad de corriente óptima. Usé resistencias de 1K.
Se utilizaron resistencias de 1K del mismo tipo para poner como pull-ups en las entradas de los botones.

Pantalla de 4 dígitos y 7 segmentos
Lo conveniente de estas pantallas es que tienen sus pines de segmento ya unidos en un solo pin, no tiene que rastrearlos al hacer la PCB. Solo un rastro, y tiene cada segmento de dígitos ‘a’ conectado. Lo mismo ocurre con los otros segmentos.
Entonces, un dígito tiene el cátodo de cada LED en un pin, ocupando 8 pines (hay un punto cerca de cada dígito), el ánodo de cada dígito LED-s se agrupa para salir en cuatro pines diferentes.
Eso es todo lo que necesitamos saber sobre nuestra pantalla, aparte del pin-out. El pin-out difiere de una pantalla a otra, no me molestaré en dar detalles al respecto, puede usar una diferente.

Transistores lógicos BCR562
Estos tienen las resistencias de polarización ya montadas. Se utilizan en modo de saturación, como conmutadores.

Archivos adjuntos

Paso 2: ¿Cómo exportar la obra de arte a PDF?

¿Cómo exportar la obra de arte a PDF?¿Cómo exportar la obra de arte a PDF?¿Cómo exportar la obra de arte a PDF?¿Cómo exportar la obra de arte a PDF?¿Cómo exportar la obra de arte a PDF?

Usé el método de transferencia de tóner para hacer el PCB, que se exportó con Altium. Dado que no se puede decir mucho sobre el montaje de la cosa, me centraré más en explicar cómo exportar la ilustración de PCB a un PDF, utilizando Altium Designer.

Primero, necesitamos un archivo de trabajo de salida. Siga las instrucciones de las imágenes para averiguar cómo debe hacerlo. Si lo tiene listo, tendrá que crear una “Salida de documentación”, llamada “Impresiones de PCB”. Si presiona eso, aparecerá una nueva línea, pidiendo que se le dé un nuevo nombre. No los nombro de todos modos, no hace ningún daño si simplemente lo dejas así. Haga clic en el lado derecho en el cuadro PDF, luego haga clic en el pequeño botón de radio en el extremo derecho. Una flecha verde conectará los dos, indicándole que las impresiones de PCB se exportarán a formato PDF.

Haga doble clic en la línea “Impresiones de PCB” para poder cambiar sus propiedades. Haga doble clic en cada capa para definir qué tipo de objeto desea / no desea mostrar en el archivo de salida. Deshabilite todo, deje solo la capa superior / inferior encendida, eventualmente las pistas en la capa de exclusión, para ver los bordes de la placa. Presione OK para cerrar la ventana.

A continuación, tendrá que decirle a Altium que desea que la salida se escale 1: 1. Para hacer esto, haga clic con el botón derecho en “Impresiones de PCB” y seleccione “Cuadro de diálogo de configuración de página”.
Cuando aparezca, seleccione “impresión a escala” en la lista desplegable “modo de escala” y presione OK.
Por último, haga clic derecho en el cuadro PDF y haga clic en el botón “Avanzado” para ver configuraciones adicionales. Establezca el “Tamaño y orientación de la página” en “Cuadro de diálogo de configuración de página”, como se muestra en la imagen. Luego presione F9 para exportarlo a PDF, se abrirá en unos momentos, si tiene instalado un visor de PDF. Imprime eso para comenzar la fabricación de PCB.

Si alguien lo necesita, puedo hacer un instructivo para principiantes sobre el diseñador de Altium. A mi leal saber y entender, por supuesto.

Paso 3: Una mirada al interior de las tareas del PIC16F727

Una mirada al interior de las tareas del PIC16F727Una mirada al interior de las tareas del PIC16F727

Describiré las cosas que usé del PIC para hacer realidad este proyecto. Lo único que necesita para este tipo de tareas es un temporizador. Un temporizador cuenta los ciclos de instrucción, que tienen una relación estricta con el cristal o el oscilador que usa para sincronizar su procesador. Usé el oscilador interno para mantener la PCB simple. Un PIC necesita relojes para ejecutar una sola instrucción:

Fosc = 16000000 Hz
Finst = 4000000 Hz
Tinst = 1 / Finst = 250 ns

Una instrucción tarda 250 nanosegundos, es la misma velocidad con la que cuenta el temporizador. Si necesitamos un tiempo de 1 milisegundo, dejamos que el temporizador funcione para 4000 instrucciones, luego señalizamos que ha transcurrido 1 ms.

Para hacer esto muy preciso, usaremos interrupciones. Una interrupción a un microcontrolador es como un golpecito en el hombro para ti. Simplemente estás ocupándote de tus propios asuntos, luego aparece alguien, tocando tu hombro para decir algo. Dejas de hacer tu negocio y prestas atención a la ‘interrupción’ que acaba de ocurrir. Una vez que hayas terminado de escuchar, reaccionas de cierta manera y luego vuelves a las cosas que estabas haciendo antes de que alguien te interrumpiera. Diciendo esto a la manera PIC, acabas de atender una interrupción.

El PIC no hace lo que usted QUIERE, hace lo que usted le dice que haga. Esto es algo muy importante de memorizar: un error de silicio rara vez es la razón por la que su proyecto no se inicia. Es el 99,9% de las veces la programación defectuosa.
¿Qué debemos decirle al PIC que haga para lograr lo que queremos?

Configuración del oscilador:
Necesitamos configurar el oscilador interno para que sea la fuente de reloj principal para este proyecto, lo hacemos poniendo 0x30 en el registro OSCCON.

Habilitación de interrupciones:
Primero, tenemos que habilitar el sistema de interrupciones. Esto se hace manipulando los bits en el registro INTCON.
Necesitamos habilitar las interrupciones globales y la interrupción de Timer0. Mirando la hoja de datos, vemos que el bit 7 es el bit de habilitación de interrupciones global y el bit 5 es el bit de habilitación de interrupciones del Timer0. El resto de los bits son ceros, no es necesario cambiarlos. Esto da un valor binario de b10100000, que en hexadecimal es 0xA0. Lo ponemos en el registro INTCON.

Prescalers:
Un preescalador es un contador en sí mismo, que se incrementa en cada ciclo de instrucción. Estos, de forma predeterminada, están configurados en 1: 1 para que no interfieran con el funcionamiento normal del temporizador. La salida del prescaler está conectada a la entrada del temporizador, como podemos ver en el diagrama. si configuramos un preescalador en 1: 2, su salida irá a ‘1’ solo después de que se hayan completado 2 ciclos de instrucción. Esto significa que el temporizador no se incrementará en cada ciclo de instrucción, sino en cada 2º. De manera similar, al configurar el preescalador para que se divida entre 4, el TMR0 se incrementa cada 4º ciclo de instrucción, y así sucesivamente.

Configurando Timer0 para dar interrupción cada milisegundo:
Timer0 cuenta las instrucciones incrementando el valor en el registro TMR0. ese valor tiene 8 bits de ancho, lo que significa que no podemos contar más allá de 255. Si el contador está en 255 y ocurre un incremento, el registro se desbordará y comenzará el conteo nuevamente desde 0.
Este es el punto, cuando un temporizador puede señalar una interrupción. Pero si esto sucede cada ciclo 256, ¿cómo podemos usarlo para contar hasta 4000? Con la ayuda de los preescaladores.

4000/256 = 15,625

Entonces, necesitamos una división por 16 (el valor de preescalador más cercano y más grande) para que esto suceda.

4000/16 = 250;

Dado que el temporizador da una interrupción en el rollover de 255 -> 0, simplemente colocaremos un desplazamiento de 256 – 250 = 6 en el registro TMR0. Este valor debe actualizarse cada vez que se atiende la interrupción. También tenemos que borrar la bandera, que se estableció en ‘1’, cuando ocurrió el traspaso del Timer0.
Habiendo dicho eso, ahora tenemos una interrupción precisa, que ocurre cada milisegundo. Por lo general, implemento un contador en la rutina del servicio de interrupciones, cuento 1000 interrupciones, creando una señal de un segundo. El conteo de los segundos se debe hacer en el ciclo principal, solo hay contadores simples que cuentan 60 segundos, luego se desbordan para incrementar la variable “minuto”. Luego, de la misma forma, se incrementa la variable “horas”, “días”, “meses”.

Los dígitos
Si el proyecto es lo suficientemente simple y tiene algunas pantallas de 7 segmentos en el esquema, nunca me preocupo de ubicar los pines del controlador de segmento uno al lado del otro. Este proyecto no fue una excepción, las definiciones borrosas que puede ver al comienzo del programa están implementadas para simplificar las formas en que muestro los dígitos. Si se toma el tiempo suficiente para tratar de comprenderlos, verá lo fácil que es realmente esta parte de visualización.

Archivos adjuntos

Paso 4: encontrar un recinto

Encontrar un recintoEncontrar un recintoEncontrar un recinto

Se me ocurrió la idea del reloj cuando vi unos cocos en la mesa de la cocina. Los convertí en piezas de cerramiento con una sierra para metales y mi pequeño mini taladro. Aunque no me gusta usar pegamento como elemento de fijación, tuve que usarlo esta vez. Simplemente no había forma de fijar la tabla en la cáscara de coco con tornillos, sin “atornillar”.
Hay una burbuja de pegamento en cada esquina, asegurándola en su lugar. Las dos mitades se mantienen unidas por superpegamento en 4 o 5 puntos. Esto dificulta el cambio de batería, estoy pensando en ajustar este proyecto con un adaptador de pared.

Desafortunadamente, los dos puntos en el medio estaban apagados cuando tomé las fotos, ¡pero les aseguro que esto no se construyó en 2006 :)! Aquí hay algunas imágenes que tomé durante la depuración y después de ensamblar todo. No he tomado ninguna imagen del lado del procesador, pero prometo que lo haré cuando cambie las pilas la próxima vez.

Paso 5: Palabras finales, limpieza de la mesa

Palabras finales, limpiando la mesa

Si tiene alguna pregunta sobre este esquema, PCB, PIC o cualquier cosa en él, ¡no dude en preguntar!
¡Que tenga un lindo día!

Sé el primero en compartir

    Comentarios

    close