Inhaltsverzeichnis:

Minidot 2 - die Holoclock - Gunook
Minidot 2 - die Holoclock - Gunook

Video: Minidot 2 - die Holoclock - Gunook

Video: Minidot 2 - die Holoclock - Gunook
Video: CHEAP = GOOD RED DOT? NIMROD NTRD Red Dot Sights (Mini-Review) 2024, November
Anonim
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock

Nun, vielleicht ist Holoclock ein bisschen ungenau … es verwendet holographische Dispersionsfolie auf der Vorderseite, um ein bisschen Tiefe zu geben. Grundsätzlich ist dieses instructable ein Update zu meinem vorherigen Minidot, das sich hier befindet: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/und Wiederverwendung von viel Code und Schaltungen von meinem Microdot hier: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD-Dateien und Sourceboost-Code ist in den angehängten Zip-Dateien enthalten. Warum? Der vorherige Minidot war zu komplex, vom Microdot lernte ich, wie man eine RTC auf einem PIC mit nur einem 32.768-Kristall macht und keinen speziellen RTC-Chip verwenden musste. Außerdem wollte ich die Displaychips vom vorherigen Minidot loswerden. Jetzt gibt es also nur noch einen Leistungsregler-Chip und einen PIC16F88 … nur zwei Chips. Die anderen Gründe für ein Update waren, dass mein Minidot aufgrund der separaten Schaltplatine etwas unzuverlässig wurde und ich eine weiche Überblendung zwischen den Punktmustern wollte, da sowie eine Art Umgebungslichtsensor, um das Display nachts zu dimmen. Der andere Minidot hatte eine feste Helligkeit und beleuchtete nachts einen Raum. Das Gerät wurde mit Hilfe des EagleCad-Softwarepakets und des Sourceboost-Compilers konstruiert. Sie müssen etwas Erfahrung mit Elektronik und Programmierung von PIC-Controllern haben, um dieses Projekt zu starten. Bitte beachten Sie, dass dies weder für die Elektronik noch für die PIC-Programmierung anweisbar ist, also halten Sie bitte Fragen zum Miniclock-Design. Beziehen Sie sich auf die obigen Anleitungen oder viele andere Anleitungen auf dieser Website, um Ratschläge zur Verwendung von EagleCad oder zur Programmierung von PICs zu erhalten. Hier ist es also….. Minidot 2, The Holoclock……oder Minidot The Next Generation………….

Schritt 1: Die Schaltung

Die Rennbahn
Die Rennbahn
Die Rennbahn
Die Rennbahn
Die Rennbahn
Die Rennbahn

Diese Schaltung ist dem Microdot sehr ähnlich. Beachten Sie, dass das Charlieplex-Array praktisch identisch ist … nur ein paar Pins wurden verschoben.

Der Microdot-Schaltung wurde ein 20-MHz-Kristall hinzugefügt, um den PIC viel schneller zu takten. Dies ermöglicht eine schnellere Abtastung des Arrays und die Implementierung eines Dimmalgorithmus. Der Dimmalgorithmus war sehr wichtig, um eine Cross-Pattern-Fade- und Umgebungslichtfunktion zum Funktionieren zu bringen. Dies wäre mit dem Microdot aufgrund der langsameren Taktrate unmöglich gewesen, da einige Scanzyklen für das Dimmen aufgewendet werden mussten. Eine Beschreibung der Dimmfunktionalität finden Sie im nächsten Abschnitt. Die anderen zu beachtenden Dinge sind die Verwendung eines MCP1252-Ladungspumpenreglers zur Versorgung von 5 V, meinem momentanen Lieblingschip. Wenn Sie die Schaltung modifiziert haben, könnten Sie einen einfachen alten 7805 verwenden. Ich habe nur eine Reihe dieser praktischen Chips herumhängen. Ich habe jetzt die Schalter nach vorne verlegt, erspart mir das Herumfummeln nach Stromausfällen um die Zeit zurückzustellen und jetzt ist alles nur eine Platine….keine Verkabelungsprobleme. Bemerkenswert ist auch die Aufnahme eines LDR. Dies wird in einem Spannungsteiler verwendet, der vom A/D-Pin des PIC erfasst wird. Wenn der PIC erkennt, dass die Umgebungslichtstärke niedrig ist (dh Nachtzeit), hält der Dimmalgorithmus das Charlieplex-Array für mehr Zyklen dunkel, als wenn die Lichtstärke hoch ist. Ich konnte kein LDR-Symbol in der Eaglecad-Bibliothek finden, also habe ich nur ein LED-Symbol verwendet…..lass dich nicht täuschen, es ist ein LDR. Siehe tatsächliches Bild der Platine unten. Beachten Sie bei der Verwendung von mehrfarbigen LEDs in einem charliplex-Array. Sie müssen sicherstellen, dass die Durchlassspannung der LEDs mehr oder weniger gleich ist. Wenn nicht, können Streustrompfade auftreten und mehrere LEDs leuchten. Daher funktioniert die Verwendung von LEDs mit 5 mm oder höherer Leistung für diese Konfiguration nicht, da normalerweise ein ziemlicher Unterschied zwischen den grün/blauen LEDs und den rot/gelben LEDs besteht. In diesem Fall habe ich insbesondere 1206 SMD-LEDs und hocheffiziente grün / blaue LEDs verwendet. Die Durchlassspannungen waren hier jedoch kein Thema. Wenn Sie eine Mischung aus grünen / blauen und roten / gelben Hochleistungs-LEDs in einem Charlieplex-Array verwenden möchten, müssen Sie die verschiedenen Farben in zwei Charlieplex-Arrays aufteilen. Es gibt zahlreiche Erklärungen von Charlieplexing, die man googeln kann……Ich werde hier nicht ins Detail gehen. Die Recherche überlasse ich Ihnen. (Drücken Sie auf das kleine 'i'-Symbol in der Ecke des Bildes unten, um eine größere Version zu sehen)

Schritt 2: Der Dimmalgorithmus - Charliplexed Pulsweitenmodulation

Der Dimming-Algorithmus - Charliplexed Pulsweitenmodulation
Der Dimming-Algorithmus - Charliplexed Pulsweitenmodulation

Wie bereits erwähnt, wollte ich die verschiedenen Punktmuster für die Zeit glatt überblenden lassen, anstatt von einem Muster zum anderen zu ruckeln. Sehen Sie sich das Video für eine Demonstration an. In der Mitte die neue Minidot-Uhr, rechts die ältere Minidot. Beachten Sie, wie viel schöner der neue ist. (Zu Ihrer Information, die anderen Anzeigen im Hintergrund sind meine Minicray-Supercomputer-Statusanzeige und mein eingefangenes Nebulon-Partikel, das den Minicray in einem magnetischen Einschlussfeld aus Antimaterie antreibt. Siehe hier: https://www.youtube.com/embed/bRupDulR4ME für eine Demonstration der Nebelkammer) Wenn Sie im Code nachsehen, öffnen Sie die Datei display.c. Beachten Sie, dass es vier Arrays zum Zuordnen der Tris / Port-Werte gibt, um ein bestimmtes Array zu beleuchten, und zwei Arrays (eins mehr als der Microdot-Code), um zu definieren, welche LEDs für ein bestimmtes LED-Muster beleuchtet werden sollen.zB:

// 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, …unsigned char LEDS_TRISB[31] = { 0xfd, 0xf9, 0xf9, …unsigned char nLedsA[30];unsigned char nLedsB[30];Um beispielsweise LED1 zum Leuchten zu bringen, müssen Sie die TRIS-Register TRISA:B = 0xef:0xfd und die PORT-Register PORTA:B=0x10:0x00 usw. einstellen. Wenn Sie die Tris-Werte binär ausgeben, werden Sie feststellen, dass zu jedem Zeitpunkt nur zwei Ausgänge aktiviert sind. Die anderen sind alle auf Tri-State gesetzt (daher TRIS-Register). Dies ist von zentraler Bedeutung für Charlieplexing. Sie werden auch feststellen, dass ein Ausgang immer eine logische „1“und der andere immer eine logische „0“ist arrays ist ein Nullwert, um überhaupt keine LED einzuschalten. In Microdot durchlief die Funktion update_display kontinuierlich ein anderes Array (nLeds), um zu sehen, ob diese bestimmte LED aufleuchten sollte. Wenn ja, wurden die entsprechenden Tris/Port-Werte eingestellt und die LED leuchtete eine Zeit lang. Andernfalls wurde der Nullwert an die TRIS/PORT-Register des PIC gesendet und für eine Zeitdauer leuchtete keine LED. Wenn es schnell genug gemacht wurde, ergab dies ein Muster. Der Rest des Programms las periodisch die RTC-Werte und bildete ein schönes Zufallsmuster in diesem Array….und so änderte sich die Anzeige nicht) dann würden zusätzliche Zeiträume für das Senden von Nullwerten aufgewendet, wenn das Display gedimmt werden soll…..für volle Helligkeit würden dann keine zusätzlichen Zeiträume aufgewendet. Wenn die leuchtenden LEDs viele Nullperioden aufweisen, würde die Anzeige bei einer Wiederholung dunkel sein. Tatsächlich handelt es sich um Multiplex-Pulsweitenmodulation…..oder weil die Hardware in einer Charlieplex-Anordnung konfiguriert ist, dann um Charlieplex-Pulsweitenmodulation. Das zweite Diagramm unten zeigt den grundlegenden Aufbau dafür. Ich nenne das einen Scanrahmen. Die ersten 30 Perioden bis zum Frame werden verwendet, um durch die LEDs zu gehen…..und eine variable Anzahl zusätzlicher Perioden definiert, wie dunkel das Display sein wird. Dieser Zyklus wiederholt sich. Mehr Nullperioden bedeuten weniger Zeit für eine LED pro Frame (da die Anzahl der Perioden gestiegen ist). Beachten Sie, dass die vertikale Achse nicht den Spannungspegel bedeutet. Der tatsächliche Zustand der Pins, die zu den LEDs gehen, variiert je nach Position im Charlieplex-Array…..im Diagramm bedeutet dies nur ein oder aus. Dies bedeutete auch, dass die Gesamtlänge des Frames in der Zeit ebenfalls erhöht wurde, wodurch die Aktualisierung verringert wurde Bewertung. Wenn die LEDs dunkler wurden, begannen sie mit anderen Worten zu flackern. Diese Methode ist also nur bedingt sinnvoll. Für die Uhr war es OK. Eine Funktion wird intermittierend aufgerufen, die den A/D-Wandler auf dem PIC ausliest und diese Helligkeitsstufe setzt. Wenn Sie den Code lesen, überprüft er auch, ob die dem LDR am nächsten gelegene LED leuchtet, und nimmt in diesem Fall keine Pegeleinstellung vor. Dies verhindert, dass das Display unerwartet hell wird, wenn sich das Muster ändert. Als nächstes die Crossfade-Funktion.

Schritt 3: Dimmalgorithmus - der Crossfade-Effekt und die doppelte Pufferung

Dimming-Algorithmus - der Crossfade-Effekt und Double Buffering
Dimming-Algorithmus - der Crossfade-Effekt und Double Buffering

Der Übergang zwischen einem Muster und dem nächsten war zuvor unmittelbar. Für diese Uhr wollte ich ein Muster zeigen, das allmählich in der Helligkeit abnimmt und das nächste Muster allmählich ansteigt … dh eine Überblendung.

Ich brauchte keine einzelnen LEDs, die mit unterschiedlichen Helligkeitsstufen gesteuert werden mussten, um eine Überblendung durchzuführen. Brauchte nur das erste Muster bei einer Helligkeit und das zweite bei geringer Helligkeit. Dann würde ich über einen kurzen Zeitraum die Helligkeit des ersten ein wenig verringern und das zweite erhöhen ….. dies würde bis zum zweiten Muster so weitergehen, wie es vollständig ist. Dann würde die Uhr warten, bis das nächste Muster angezeigt werden sollte, und es würde einen weiteren Übergang geben. Daher musste ich zwei Muster speichern. Das aktuell angezeigte und das zweite anzuzeigende Muster. Diese befinden sich in den Arrays nLedsA und nLedsB. (beachten Sie in diesem Fall nichts mit Ports). Dies ist der Doppelpuffer. Die Funktion update_display() wurde so geändert, dass sie acht Frames durchläuft und eine Anzahl von Frames aus dem einen Array und dann dem anderen anzeigt. Das Ändern der Anzahl von Frames, die jedem Puffer während der acht Zyklen zugeteilt wurden, definiert, wie hell jedes Muster sein würde. Als wir mit dem Wechseln zwischen den Puffern fertig waren, schalteten wir die Puffer 'Anzeige' und 'Nächste Anzeige' um, sodass die Mustererzeugungsfunktion dann nur in den Puffer 'Nächste Anzeige' schreibt. Das folgende Diagramm zeigt dies hoffentlich. Sie sollten sehen können, dass der Übergang 64 Scan-Frames dauert. Im Bild zeigt der kleine Einschub das Scan-Frame-Diagramm der vorherigen Seite kunstvoll verkleinert. Ein Wort zur Aktualisierungsrate. All dies muss sehr schnell geschehen. Wir haben jetzt zwei zusätzliche Berechnungsebenen, eine für die Helligkeit der Umgebungsanzeige und eine für die acht Bildzyklen, die für einen Übergang zwischen zwei Puffern verwendet werden. Daher sollte dieser Code in Assembler geschrieben werden, ist aber in 'C' gut genug.

Schritt 4: Aufbau - die Platine

Konstruktion - die Leiterplatte
Konstruktion - die Leiterplatte
Konstruktion - die Leiterplatte
Konstruktion - die Leiterplatte

Das ist ziemlich einfach. Nur eine doppelseitige Leiterplatte mit einigen SMD-Komponenten auf der Oberseite. Tut mir leid, wenn Sie ein Durchbohrer sind, aber es ist viel einfacher, SMD-Projekte zu machen … weniger Löcher zu bohren. Sie sollten eine ruhige Hand, eine temperaturgesteuerte Lötstation und viel Licht und Vergrößerung haben, um es einfacher zu machen.

Das einzige, was bei der Konstruktion der Leiterplatte zu beachten ist, ist die Aufnahme eines Steckers zum Programmieren des PIC. Dies wird mit den ICSP-Pins des PIC verbunden und Sie benötigen einen ICSP-Programmierer. Wieder habe ich ein Handy zu meinem Junkbox-Anschluss verwendet. Sie können dies weglassen und einfach Drähte an die Pads löten, wenn Sie möchten. Alternativ können Sie, wenn Sie nur einen gesockelten Programmierer haben, einen Header herstellen, der in Ihren Sockel gesteckt wird, und diesen dann an die ICSP-Pads löten. Wenn Sie dies tun, trennen Sie Rx und verbinden Sie Ry, die nur Null-Ohm-Verbindungen sind (ich verwende nur einen Lötklecks). Dadurch wird der Rest der Schaltungsleistung vom PIC getrennt, damit die Programmierung nicht beeinträchtigt wird. Ein gesockelter Programmierer verwendet nur die ICSP-Pins wie ein ICSP-Programmierer, es ist keine wirkliche Magie erforderlich. Sie müssen dies auch tun, wenn Sie versehentlich vergessen haben, den Code zu verzögern, bevor die RTC startet. Beim 16F88 sind die ICSP-Programmierpins die gleichen wie die Pins, die für den 32,768-kHz-Quarz für die RTC benötigt werden……wenn der externe T1-Oszillator (dh die RTC) läuft, bevor der ICSP seine Arbeit aufnehmen kann, schlägt die Programmierung fehl. Normalerweise können bei einem Reset am MCLR-Pin und einer Verzögerung ICSP-Daten an diese Pins gesendet werden und die Programmierung kann ordnungsgemäß beginnen. Durch das Trennen der Stromversorgung des PIC kann der ICSP-Programmierer (oder ein gesockelter Programmierer mit einem Header) jedoch die Stromversorgung des Geräts steuern und ein Programm erzwingen. Zu beachten ist auch, dass die Kristallpads auf der Platine ursprünglich für SMD-Kristalle entwickelt wurden. Ich konnte es kaum erwarten, dass einige geliefert wurden, also wurde der 32,768-kHz-Uhrenkristall wie abgebildet an die Oberseite gelötet, und der 20-MHz-Kristall wurde befestigt, indem ein paar Löcher in die Pads gebohrt, der Kristall durch den Boden gesteckt und auf die gelötet wurde oben. Sie können die Pins rechts neben dem PIC16F88 sehen.

Schritt 5: Der holografische Film und das Gehäuse

Der holografische Film und das Gehäuse
Der holografische Film und das Gehäuse
Der holografische Film und das Gehäuse
Der holografische Film und das Gehäuse
Der holografische Film und das Gehäuse
Der holografische Film und das Gehäuse

Die endgültige Konstruktion besteht darin, die Platine einfach in das Gehäuse zu legen und nach der Programmierung mit einem Klecks Heißkleber zu befestigen. Drei Löcher ermöglichen den Zugang zu den Mikroschaltern von vorne.

Der bemerkenswerte Teil dieser Uhr ist die Verwendung eines holografischen Diffusorfilms. Dies ist ein spezieller Film, den ich herumliegen hatte und der dem Gerät eine schöne Tiefe verleiht. Sie könnten normales Transparentpapier verwenden (in dem ich die Platine näher an die Vorderseite rücken würde) oder einen anderen Diffusor, wie er in Leuchtstofflampen verwendet wird. Experimentieren Sie damit, das einzige, was Sie tun müssen, ist, die Anzahl der leuchtenden LEDs zu unterscheiden, oder es wird schwierig, die Punkte zu zählen, um die Zeit zu bestimmen. Ich verwendete holographisches Dispersionsmaterial von der Physical Optics Coorporation (www.poc.com) mit einer kreisförmigen Dispersion von 30 Grad. Sie können tagsüber ein Verdunkelungsband verwenden, um die glänzenden Innereien zu verbergen, um ein mysteriöseres Aussehen zu erhalten. Sie könnten sogar das Display frei lassen und die Leute das Innere sehen lassen, wie ich es getan habe. Der Ständer bestand aus zwei Stück Aluminium-L-Stange, die unten etwas ausgehackt waren, um eine Biegung zu ermöglichen. Beachten Sie, dass in diesen Bildern zusätzliche Beleuchtung hinzugefügt wurde, damit Sie die Displayabdeckungen usw. sehen können. Bei normaler Wohnzimmerbeleuchtung sind die LEDs auch bei Tageslicht stärker auffällig.

Schritt 6: Software und Benutzeroberfläche

Die Bedienung des Gerätes ist sehr einfach, keine speziellen Pattern-Modi oder auffälliges Zeug. Es zeigt nur die Uhrzeit an.

Um die Zeit einzustellen, drücken Sie zuerst SW1. Das Gerät lässt alle LEDs einige Male aufblinken und dann die 10s-Stunden-Gruppe von LEDs SW3 erhöht die ausgewählte Gruppe SW2 wechselt zur nächsten Gruppe von LEDs, jedes Mal blinken alle LEDs in der Gruppe kurz auf. Der Code ist für Sourceboost 'C' Compiler Version 6.70 geschrieben. Der RTC-Code befindet sich in den Dateien t1rtc.c/h und hat eine Interrupt-Funktion für den T1-Timer des PIC. Der T1-Timer ist so eingestellt, dass er jede Sekunde unterbricht. Jede Sekunde wird die Variable für die Zeit inkrementiert. Auch ein Tick-Timer wird jede Sekunde zusammen mit der Zeit heruntergezählt. Dies wird verwendet, um zu bestimmen, wann die Anzeige umgeschaltet werden soll. Die Interrupt-Funktion verwendet auch den T0-Timer-Interrupt, um die Anzeige zu aktualisieren und eine Funktion in display.c aufzurufen. Die Dateien display.h/display.c enthalten die Funktionen zum Aktualisieren der Anzeige und zum Anzeigen der Uhrzeit Die Dateien control.c/h enthalten die Funktionen zum Einstellen der Uhrzeit und Auslesen der Schalter Die Dateien holoclock.c/h sind die Hauptschleifen und Initialisierung.