Table des matières:

Minidot 2 - l'Holoclock : 6 étapes
Minidot 2 - l'Holoclock : 6 étapes

Vidéo: Minidot 2 - l'Holoclock : 6 étapes

Vidéo: Minidot 2 - l'Holoclock : 6 étapes
Vidéo: Luban L3 Mini Intelligent Repair Programmer for Phone 6 13ProMax 2024, Novembre
Anonim
Minidot 2 - l'Holoclock
Minidot 2 - l'Holoclock
Minidot 2 - l'Holoclock
Minidot 2 - l'Holoclock

Eh bien, peut-être que l'holoclock est un peu inexact… il utilise un film de dispersion holographique sur le devant pour donner un peu de profondeur. Fondamentalement, cette instructable est une mise à jour de mon précédent Minidot situé ici: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/et réutiliser beaucoup de code et de circuits de mon Microdot situé ici:https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD et le code Sourceboost est inclus dans les fichiers zip joints. Pourquoi ? Le Minidot précédent était trop complexe, à partir du Microdot, j'ai appris à faire un RTC sur un PIC en utilisant uniquement un cristal 32.768 et je n'avais pas besoin d'utiliser une puce RTC spéciale. Aussi, je voulais me débarrasser des puces d'affichage du précédent Minidot. Alors maintenant, il n'y a plus qu'une puce de régulateur de puissance et un PIC16F88… juste deux puces. ainsi qu'une sorte de capteur de lumière ambiante pour assombrir l'affichage la nuit. L'autre Minidot était à luminosité fixe et illuminait une pièce la nuit. L'appareil a été construit à l'aide du progiciel EagleCad et du compilateur Sourceboost. Vous devrez avoir une certaine expérience en électronique et en programmation de contrôleurs PIC pour démarrer ce projet. Veuillez noter qu'il ne s'agit pas d'une instruction sur l'électronique ou la programmation PIC, veuillez donc garder les questions pertinentes pour la conception de Miniclock. Reportez-vous aux instructables ci-dessus ou à de nombreux autres instructables sur ce site pour obtenir des conseils sur l'utilisation d'EagleCad ou la programmation de PIC. Alors voilà….. Minidot 2, The Holoclock……ou Minidot The Next Generation………….

Étape 1: Le circuit

Le circuit
Le circuit
Le circuit
Le circuit
Le circuit
Le circuit

Ce circuit est très similaire au Microdot. Notez que le tableau charlieplex est pratiquement identique… seules quelques broches ont été déplacées.

Un cristal de 20Mhz a été ajouté au circuit Microdot pour cadencer le PIC beaucoup plus rapidement, ce qui permet au réseau d'être scanné plus rapidement et permet la mise en œuvre d'un algorithme de gradation. L'algorithme de gradation était très important pour faire fonctionner une fonction de fondu enchaîné et de lumière ambiante. Cela aurait été impossible avec le Microdot, en raison de la vitesse d'horloge plus lente car certains cycles de balayage devaient être consacrés à la gradation. Voir la section suivante pour une description de la fonctionnalité de gradation. Les autres choses à noter sont l'utilisation d'un régulateur de pompe de charge MCP1252 pour fournir du 5V, ma puce préférée du moment. Si vous modifiez le circuit, vous pouvez utiliser un vieux 7805 tout simple… J'ai juste un certain nombre de ces puces pratiques qui traînent. J'ai maintenant déplacé les commutateurs vers l'avant, ce qui évite de jouer à l'arrière de l'horloge après les coupures de courant pour réinitialiser l'heure et maintenant tout n'est qu'un seul PCB… aucun problème de câblage. A noter également l'inclusion d'un LDR. Ceci est utilisé dans un diviseur de tension qui est détecté par la broche A/D sur le PIC. Lorsque le PIC détecte que le niveau de lumière ambiante est faible (c'est-à-dire la nuit), l'algorithme de gradation maintient la matrice charlieplex dans l'obscurité pendant plus de cycles que lorsque le niveau de lumière est élevé. Je n'ai pas pu trouver de symbole LDR dans la bibliothèque Eaglecad, alors j'ai juste utilisé un symbole LED… ne vous y trompez pas, c'est un LDR. Voir l'image réelle du PCB ci-dessous. Une chose à noter lors de l'utilisation de LED multicolores dans un réseau charliplex. Vous devez vous assurer que la tension directe des LED est plus ou moins la même. Sinon, des chemins de courant vagabond peuvent se produire et plusieurs LED s'allumeront. Ainsi, l'utilisation de LED de puissance de 5 mm ou plus pour cette configuration ne fonctionnera pas car il y a généralement une assez grande différence entre les LED vertes/bleues et les LED rouges/jaunes. Dans ce cas, j'ai utilisé 1206 leds SMD et notamment des leds vertes/bleues à haut rendement. Les tensions directes n'étaient pas un problème ici cependant. Si vous souhaitez utiliser un mélange de LED vertes/bleues et rouges/jaunes plus puissantes dans une matrice charlieplex, vous devez séparer les différentes couleurs en deux matrices charliplex. Il existe de nombreuses explications sur le charlieplexing qui peuvent être googlées… Je n'entrerai pas dans les détails ici. Je vous laisse faire quelques recherches. (Appuyez sur la petite icône 'i' dans le coin de la photo ci-dessous pour voir une version plus grande)

Étape 2: L'algorithme de gradation - Modulation de largeur d'impulsion Charliplexed

L'algorithme de gradation - Modulation de largeur d'impulsion Charliplexed
L'algorithme de gradation - Modulation de largeur d'impulsion Charliplexed

Comme mentionné précédemment, je voulais que les différents motifs de points pour le moment s'estompent en douceur plutôt que de se déplacer d'un motif à l'autre. Voir la vidéo pour une démonstration. Au milieu se trouve la nouvelle horloge Minidot, à droite se trouve l'ancienne Minidot. Remarquez à quel point le nouveau est plus beau. (Pour info, les autres affichages en arrière-plan sont l'affichage de l'état de mon superordinateur Minicray et ma particule Nebulon capturée qui alimente le Minicray dans un champ de confinement magnétique de l'antimatière. Voir ici: https://www.youtube.com/embed/bRupDulR4MEpour une démonstration de la chambre de confinement des nébulons) Si vous regardez dans le code, ouvrez le fichier display.c. Notez qu'il existe quatre matrices pour mapper les valeurs tris/port pour éclairer une matrice particulière et deux matrices (une de plus que le code Microdot) pour définir quelles LED doivent être allumées pour un motif particulier de LED.

// LED1 LED2 LED3 …unsigned char LEDS_PORTA[31] = { 0x10, 0x00, 0x00, …unsigned char LEDS_TRISA[31] = { 0xef, 0xff, 0xff, …unsigned char LEDS_PORTB[31] = { 0x00, 0x02, 0x04, …car non signé LEDS_TRISB[31] = { 0xfd, 0xf9, 0xf9, …car non signé nLedsA[30];car non signé nLedsB[30];Pour allumer la LED1 par exemple, vous devez définir les registres TRIS TRISA:B = 0xef:0xfd et les registres PORT PORTA:B=0x10:0x00 et ainsi de suite. Si vous écrivez les valeurs tris en binaire, vous remarquerez qu'à tout moment, il n'y a que deux sorties activées. Les autres sont tous réglés sur Tri-state (d'où le registre TRIS). C'est au cœur du charlieplexing. Vous noterez également qu'une sortie est toujours un « 1 » logique et que l'autre est toujours un « 0 » logique… dont la direction s'allume quelle que soit la LED située entre ces deux lignes de sortie. La dernière valeur dans le port/tris arrays est une valeur nulle pour n'allumer aucune LED. Dans le Microdot, la fonction update_display parcourait en continu un autre tableau (nLeds) pour voir si cette LED particulière devait être allumée. Si c'était le cas, les valeurs tris/port correspondantes ont été définies et la LED s'est allumée pendant un certain temps. Sinon, la valeur nulle a été envoyée aux registres TRIS/PORT du PIC et aucune LED n'a été allumée pendant un certain temps. Une fois fait assez vite, cela a donné un motif. Le reste du programme lisait périodiquement les valeurs RTC et constituait un joli motif aléatoire dans ce tableau… et l'affichage a donc changé. Pour créer une fonction de gradation, cela a été légèrement étendu de sorte qu'après que les 30 LED soient non) alors des périodes supplémentaires seraient consacrées à l'envoi de valeurs nulles si l'affichage devait être atténué…..pour une luminosité maximale, aucune période supplémentaire ne serait dépensée. Lorsqu'il est répété s'il y avait beaucoup de périodes nulles pour les LED allumées, l'affichage serait faible. En effet, il s'agit d'une modulation de largeur d'impulsion multiplexée…..ou parce que le matériel est configuré dans un arrangement charlieplex, puis une modulation de largeur d'impulsion charlieplex. Le deuxième schéma ci-dessous montre la configuration de base pour cela. J'appelle cela un cadre de numérisation. Les 30 premières périodes du cadre sont utilisées pour parcourir les LED…..et un nombre variable de périodes supplémentaires définissent la luminosité de l'affichage. Ce cycle se répète. Plus de périodes nulles signifie moins de temps pour qu'une LED soit allumée par trame (car le nombre de périodes a augmenté). Notez que l'axe vertical ne signifie pas le niveau de tension. L'état réel des broches allant aux LED varie en fonction de sa position dans le réseau charlieplex…..dans le diagramme, cela signifie simplement allumé ou éteint. Cela signifie également que la longueur totale de la trame dans le temps a également augmenté, diminuant ainsi le rafraîchissement taux. Au fur et à mesure que les LED devenaient plus faibles, elles commençaient à clignoter en d'autres termes. Cette méthode n'est donc utile que dans une certaine mesure. Pour l'horloge, c'était OK. Une fonction est appelée par intermittence qui lit le convertisseur A/N sur le PIC et règle ce niveau de luminosité. Si vous lisez le code, il vérifie également si la LED la plus proche du LDR est allumée et ne fait aucun réglage de niveau si c'est le cas, cela arrête l'affichage de s'illuminer de manière inattendue lorsque le motif a changé. Ensuite, la fonction de fondu enchaîné.

Étape 3: Algorithme de gradation - l'effet de fondu enchaîné et le double tampon

Algorithme de gradation - l'effet de fondu enchaîné et le double tampon
Algorithme de gradation - l'effet de fondu enchaîné et le double tampon

La transition entre un motif et le suivant était auparavant immédiate. Pour cette horloge, je voulais montrer un motif diminuant progressivement de luminosité et le motif suivant augmentant progressivement… c'est-à-dire un fondu enchaîné.

Je n'avais pas besoin d'avoir des LED individuelles à contrôler à des niveaux de luminosité séparés pour faire un fondu enchaîné. J'avais juste besoin du premier motif à une luminosité et du second à une faible luminosité. Ensuite, sur une courte période, je diminuais un peu la luminosité du premier et augmentais le second….. cela continuerait jusqu'à ce que le deuxième motif soit au maximum. Ensuite, l'horloge attendrait jusqu'à ce que le prochain motif soit affiché et il y aurait une autre transition. J'avais donc besoin de stocker deux modèles. Celui actuellement affiché et le deuxième motif qui était sur le point d'être affiché. Ceux-ci sont dans les tableaux nLedsA et nLedsB. (notez rien à voir avec les ports dans ce cas). C'est le double tampon. La fonction update_display() a été modifiée pour faire défiler huit images et afficher un certain nombre d'images d'un premier tableau, puis de l'autre. La modification du nombre d'images allouées à chaque tampon tout au long des huit cycles a défini la luminosité de chaque motif. Lorsque nous avons fini de parcourir les tampons, nous avons inversé les tampons « affichage » et « affichage suivant », de sorte que la fonction de génération de modèle n'écrirait alors que dans le tampon « affichage suivant ». Le diagramme ci-dessous montre cela, espérons-le. Vous devriez être en mesure de voir que la transition prendra 64 images de numérisation. Dans l'image, le petit encart montre le diagramme du cadre de numérisation de la page précédente astucieusement réduit. Un mot sur le taux de rafraîchissement. Tout cela doit être fait très rapidement. Nous avons maintenant deux niveaux de calcul supplémentaires, un pour la luminosité ambiante de l'affichage et un pour les huit cycles d'images passés à faire une transition entre deux tampons. Ainsi, ce code devait être écrit en assembleur, mais est assez bon en 'C'.

Étape 4: Construction - le PCB

Construction - le PCB
Construction - le PCB
Construction - le PCB
Construction - le PCB

C'est assez simple. Juste un PCB double face avec quelques composants SMD sur le dessus. Désolé si vous êtes du genre à percer, mais c'est beaucoup plus facile de faire des projets SMD… moins de trous à percer. Vous devez avoir une main ferme, une station de soudage à température contrôlée et beaucoup de lumière et de grossissement pour faciliter les choses.

La seule chose à noter dans la construction du PCB est l'inclusion d'un connecteur pour la programmation du PIC. Cela se connecte aux broches ICSP sur le PIC et vous aurez besoin d'un programmeur ICSP. Encore une fois, j'ai utilisé un connecteur pratique pour mon junkbox. Vous pouvez omettre cela et simplement souder les fils aux pastilles si vous le souhaitez. Alternativement, si vous n'avez qu'un programmeur à socket, vous pouvez créer un en-tête qui se branche sur votre socket, puis le souder aux pastilles ICSP. Si vous faites cela, déconnectez Rx et connectez Ry qui ne sont que des liens de zéro ohm (j'utilise juste un blob de soudure). Cela déconnectera le reste de l'alimentation du circuit du PIC afin qu'il n'interfère pas avec la programmation. Un programmeur sur socket utilise simplement les broches ICSP comme un programmeur ICSP, il n'y a pas vraiment de magie impliquée. Vous devez également le faire si par erreur vous avez oublié de mettre un délai dans le code avant le démarrage du RTC. Pour le 16F88, les broches de programmation ICSP sont les mêmes que les broches nécessaires pour le cristal 32,768 kHz utilisé pour le RTC……si l'oscillateur externe T1 (c'est-à-dire le RTC) fonctionne avant que l'ICSP ne puisse démarrer son travail, alors la programmation échouera. Normalement, s'il y a une réinitialisation sur la broche MCLR et qu'il y a un retard, les données ICSP peuvent être envoyées à ces broches et la programmation peut démarrer correctement. Cependant, en isolant l'alimentation du PIC, le programmeur ICSP (ou le programmeur sur socket avec un en-tête) peut contrôler l'alimentation de l'appareil et forcer un programme. Les autres choses à noter sont que les pastilles de cristal sur le PCB ont été conçues à l'origine pour les cristaux SMD. J'avais hâte que certains soient livrés, alors le cristal de montre à 32,768 kHz a été soudé en haut comme indiqué, et le cristal de 20 MHz a été fixé en perçant quelques trous dans les coussinets, en insérant le cristal par le bas et en le soudant sur le Haut. Vous pouvez voir les broches juste à droite du PIC16F88.

Étape 5: Le film holographique et le boîtier

Le film holographique et le logement
Le film holographique et le logement
Le film holographique et le logement
Le film holographique et le logement
Le film holographique et le logement
Le film holographique et le logement

La construction finale consiste simplement à mettre le PCB dans le boîtier et, après programmation, à le fixer avec une noisette de colle chaude. Trois trous permettent d'accéder aux micro-interrupteurs par l'avant.

La partie notable de cette horloge est l'utilisation d'un film diffuseur holographique. C'est un film spécial que j'avais qui traînait et qui donne une belle profondeur à l'appareil. Vous pouvez utiliser du papier calque ordinaire (dans lequel je rapprocherais le PCB de l'avant) ou tout autre diffuseur comme ceux utilisés dans les luminaires fluorescents. Par expérience, la seule chose qu'il doit faire est de vous permettre de différencier le nombre de LED allumées, sinon compter les points pour dire l'heure sera difficile. J'ai utilisé un matériau de dispersion holographique de la Physical Optics Coorporation (www.poc.com) avec une dispersion circulaire de 30 degrés, l'affichage de l'état du superordinateur montré ailleurs dans l'instruction a utilisé un film avec une dispersion elliptique de 15x60 degrés. Vous pouvez utiliser du ruban adhésif occultant pour cacher les entrailles brillantes pendant la journée pour obtenir un look plus mystérieux. Vous pouvez même laisser l'écran clair et laisser les gens voir les entrailles comme je l'ai fait. Le support était composé de deux morceaux de barre en « L » en aluminium avec un morceau coupé en bas pour permettre un virage. Notez que dans ces images, un éclairage supplémentaire a été ajouté afin que vous puissiez voir les couvercles de l'écran, etc. Dans l'éclairage normal du salon, les LED sont plus proéminentes, même à la lumière du jour.

Étape 6: Logiciel et interface utilisateur

Le fonctionnement de l'appareil est très simple, pas de modes de motifs spéciaux ni de trucs flashy. La seule chose qu'il fait est d'afficher l'heure.

Pour régler l'heure, appuyez d'abord sur SW1. L'appareil fera clignoter toutes les LED plusieurs fois, puis le groupe de LED 10s heures SW3 incrémentera le groupe sélectionné SW2 passera au groupe de LED suivant, faisant à chaque fois clignoter brièvement toutes les LED du groupe. Le code est écrit pour le compilateur Sourceboost 'C' version 6.70. Le code RTC se trouve dans les fichiers t1rtc.c/h, et a une fonction d'interruption sur le temporisateur T1 du PIC. La minuterie T1 est réglée pour s'interrompre toutes les 1 seconde. A chaque seconde, les variables pour le temps sont incrémentées. De plus, un compte à rebours est décompté chaque seconde avec le temps. Ceci est utilisé pour déterminer quand effectuer la transition de l'affichage. La fonction d'interruption utilise également l'interruption du temporisateur T0 pour rafraîchir l'affichage, en appelant une fonction dans display.c Les fichiers display.h/display.c contiennent les fonctions pour mettre à jour l'affichage et afficher l'heure Les fichiers control.c/h contiennent les fonctions pour régler l'heure et lire les interrupteurs Les fichiers holoclock.c/h sont les boucles principales et l'initialisation.

Conseillé: