Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Vakuum-Fluoreszenz-Display-Controller

Komponenten und Verbrauchsmaterialien

Arduino UNO
...oder was auch immer 8 Bits Arduino
× 1
VFD-Display
unser Kumpel
× 1
CD4094
DIP-integrierte Schaltung
× 2
CD4017
DIP-integrierte Schaltung
× 2
BC557
...oder gleichwertiger Transistor (2N3906, 2SA733, ecc) oder PNP-Transistoren mit höherer Spannung
× 17
BC547
...oder gleichwertiger Transistor (2N3904, 2SC945, ecc)
× 2
PC817
allgegenwärtiger Optokoppler, der in den meisten Schaltnetzteilen zu finden ist, unterm Strich
× 1
1N4007 – Hochspannungs-, Hochstrom-Nenndiode
× 4
Elektrolytische Kondensatoren
Werte und Spannungen siehe Schaltplan
× 4
470nF Kondensator
jeder Typ ist gut
× 1
Perfboard
aka:Karton, Protoboard oder falls Ihre bevorzugte Montagelösung
× 1
1/4-W-Widerstände
Werte siehe Schema
× 24
Dupont Pullover
...oder Ihre bevorzugten Verbindungen und Beiträge
× 1
Draht
dünne Drähte für die Schaltungsrückseite und auch zum Anschließen des Displays, verwenden Sie dort keine Stecker, da Pin Die Abstände sind variabel und ein schnelles Löten ist einfach einfacher
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Lötdraht
kaufen Sie es in einem lokalen Geschäft, keine billigen Sachen dafür, 0,5 mm wird bevorzugt
Drahtknipser

Über dieses Projekt

Was ist der Nutzen?

VFD-Displays sind aus offensichtlichen Gründen nicht mehr im Trend, sie sind aus Glas ("äh cool!"), haben einen Glühfaden ("wirklich??"), sie sind im Grunde Vakuumröhren ("interessant!"), sie machen ein Licht so brillant, manchmal farbig, es braucht ein dunkles Plastik obendrauf ("äh, cool wieder!").

Normalerweise benötigen Sie einen dedizierten Chip, um sie anzusteuern, die meisten Module / Geräte werden mit diesem Chip geliefert, den Sie unabhängig über I2C oder SPI steuern können (das ist in Bezug auf die Einfachheit viel besser), falls Sie eines dieser Displays kaufen oder haben und es fehlt solchen Chip ist es nicht so einfach, "anzuschließen und loszulegen", das Ideal wäre, diesen Chip zu kaufen (der normalerweise im SMD-Format geliefert wird). Diese Schaltung bietet eine ziemlich anständige Schnittstelle für wie ein Arduino und kann ziemlich wahrscheinlich jedes VFD ansteuern, einschließlich der sperrigen "Röhren" -Vintage, aber Matrix-Displays mit vielen Segmenten sind übrigens keine gute Idee, Sie können die Schaltung erweitern aber TAUSENDE... mhhh, vielleicht nicht.

Vor- und Nachteile

Profis

  • fast keine Kosten (hoffentlich)
  • leicht zu findende Teile
  • Hochspannungsfähigkeit (bis zu Hunderte Volt an den Anoden)
  • unabhängige Netz- und Anodenspannungen
  • nur 3 digitale Datenleitungen erforderlich
  • erweiterbar (es erfordert für den Fall mehr CPU-Arbeit)
  • Code ist für jeden 8-Bit-Arduino vorbereitet

Nachteile

  • erfordert eine Reihe verschiedener Spannungen und Versorgungen (nicht ungewöhnlich für VFDs)
  • keine Dimmfunktion (außer bei Spannungsansteuerung)
  • verwendet zwei Arduino-Ressourcen, SPI und Timer1
  • Sie können den Mikrocontroller nicht aufhängen, sonst friert der Scan auf einem Gitter ein
  • Es ist kein Paar Widerstände und LEDs, es erfordert ein wenig Arbeit

Funktionsprinzip

Ein VFD funktioniert normalerweise im Multiplexverfahren, wie eine 2D-Matrix mit X- und Y-Achse, Sie müssen das Filament aufheizen (die Kathode, Sie sehen die dünnen Drähte davor), die Masse an diesem Filament auch anschließen, eine positive Spannung an einem Gitter (Steuergitter, ein Punkt der X-Achse) und wieder eine positive Spannung an einem Segment-Pin (der Anode, ein Punkt der Y-Achse), an dieser Stelle leuchtet ein Segment (nur eins). Um jedes Segment und jede Kombination zu beleuchten und mit "wenigen" Drähten herum, wählt das Multiplexing ein Gitter pro Zeit aus und konfiguriert gleichzeitig die Anoden, um die entsprechenden Segmente unter diesem Gitter zu beleuchten, einen Moment später wählt es ein anderes Gitter aus und konfiguriert die Anoden diesmal so, dass die entsprechenden Segmente unter diesem zweiten Gitter korrekt aufleuchten. Die Beschleunigung dieses sich ständig wiederholenden Scans führt zu einer Bewegung, die so schnell ist, dass sie unter unseren Augen nicht jedes Mal ein Raster auswählt, sondern sofort getrieben aussieht, dies ist die sogenannte POV (Persistence Of Vision).

Diese Schaltung verwendet zwei Arten von integrierten Schaltungen derselben Familie, zwei CD4094 und zwei CD4017, der 4094 treibt die Anoden und der 4017 steuert stattdessen die Gitter an, der 4094 kann eine High / Low-Konfiguration an ihren Ausgängen speichern und ist gut für die Anoden Seite sind die 4017 die klassischen Chips mit 10 Sequenzierungsausgängen, perfekt für die Grids. Sobald die 4094 mit der Momentanodenkonfiguration geladen sind, wendet das "OK"-Signal (Strobe) dieses Setup an und schaltet gleichzeitig die 4017 um einen Schritt um, was eine automatische Sequenzierung ermöglicht.

Der Leistungsteil besteht im Grunde nur aus einigen BC557-Transistoren (oder gleichwertig), die einen größeren Spannungshub an den Anoden ermöglichen, da diese Displays eine höhere Spannung als die 5 V des Arduino benötigen. Die Gitter werden direkt vom 4017 angesteuert, ein PC817 Optokoppler ermöglicht eine höhere Spannung als 5V um den 4017 und auch einen anderen Spannungspegel als der CD4094, dies vereinfacht das Ganze VIEL.

Der Arduino muss die gesamte Orchestrierung bereitstellen, das heißt, er muss alle Segmentkonfigurationen speichern und die Schaltung bei jedem Gitterschalter mit dem Anoden-Setup laden. Dies bedeutet, dass es wirklich einen cleveren Code erfordert, um dies über die Benutzeraktion hinaus zu tun. Der Code, den ich erstellt habe, richtet einen Timer-basierten Interrupt ein, der die 4094 Chips bei jedem Schritt neu lädt, tatsächlich etwa 1000 Mal pro Sekunde, sodass für 10 Raster eine Bildwiederholfrequenz von 100 Hz erreicht wird, das ist gut. Es gibt eine Reihe von Daten, die die Segmentkonfiguration speichern und im Code geändert werden können, ohne besondere Prozeduren oder nachfolgende Aktionen. Die Interrupt-Routine lädt die Daten selbst hoch.

Netzteile

Die Gitterspannung auf den 4017-Chips kann von 5 Vdc bis 18 Vdc und mindestens 50 mA Strom betragen, sie muss nicht reguliert werden. Normalerweise (soweit ich gesehen habe) reichen 12V für jede Situation aus, eine Erhöhung scheint die Helligkeit nicht viel zu erhöhen (wenn es eine Vakuumröhre ist, benötigt das Gitter keine großen Spannungen).

Die Anodenspannung kann von buchstäblich 0 V bis zu dem betragen, was Ihre Transistoren aushalten können (50 V DC für den BC557). Wenn das Display perfekt ist, erledigen normalerweise 20-30 V DC die Arbeit perfekt, nicht geregelt ist gut. Für ein normales Setup sind 50 mA Versorgung mehr als genug.

Die digitale Stromversorgung kann 5Vdc oder auch 3.3Vdc bei diesen Arten von Arduinos oder MCUs sein (noch nicht ausprobiert), dies erfordert etwa 100mA Strom (hoffentlich weniger), falls der CD4094 träge wird, können Sie den SPI-Takt im Code reduzieren und\oder verwenden Sie die "Q'S"-Ausgabe der ersten 4094 für eine konsistentere Kommunikation.

Die Filamentversorgung muss mindestens 5V 200-300mA Strom liefern. Wenn Sie bereits eine DC-Quelle haben, können Sie den Brückengleichrichter und den 1000uF-Kondensator vermeiden, aber Sie können NICHT dieselbe digitale Versorgung für \ vom Arduino verwenden. Das eigentliche Filament läuft bei einem nicht so großen Gerätedisplay mit 3V und kann 150mA ziehen.

Tipps und Hinweise

  • bevor Sie die Drähte anschließen, wenn Sie nicht wissen, welcher Stift was bewirkt, ist es besser, zuerst das Display zu testen. Normalerweise reicht ein Paar AA-Batterien in Reihe für das Filament (normalerweise sind es die Seitenkontakte). während ein Paar von 9-V-Batterien in Reihe die positive Polarisation für Gitter und Anoden liefert; Gitter und Anoden sind oft gruppiert, eine gute Idee ist es, die tatsächliche "Anoden-Null" zu finden, da dies sehr wahrscheinlich das erste Segment im numerischen oder alphanumerischen Teil ist, oft gleich und mit der gleichen Reihenfolge für alle Gitter, indem Sie die Drähte einsetzen Versehentliche umgekehrte Reihenfolge macht die Software am Ende ungeschickter, Raster folgen stattdessen anscheinend der Pin-Reihenfolge
  • Gehen Sie sparsam mit der Filamentversorgung, erhöhen Sie den Strom nach und nach, bleiben Sie im Dunkeln und sobald Sie sehen, dass die Filamente leicht glühend werden, reduzieren Sie einfach ein wenig und Sie sind fertig, ein Leistungspotentiometer ist perfekt, Sie finden diese manchmal in alte Fernseher, aber heutzutage ist es schwierig
  • Erhöhen Sie die Spannungen an Gittern und Anoden auf vernünftige Weise, die Phosphore können irreparabel brennen, die Schaltung arbeitet auch scannend, so dass Sie, wenn das System hängt, kontinuierlich zu viel Strom auf einem einzelnen Gitterabschnitt bereitstellen
  • spielen Sie mit einem Kompromiss bei den Gittern\Anodenspannungen, denken Sie daran, dass die Gitter etwas Strom verbrauchen könnten, es lohnt sich nicht, darauf zu drängen, achten Sie besser auf die Anoden
  • Die Verwendung eines einzigen Transformators für Ihr gesamtes Projekt\Setup ist ideal, auch einige gemischte Lösungen können verwendet werden, aber das Wechseln von Netzteilen und insbesondere geerdeten kann Ihnen einen schlechten Streich spielen, deshalb ist es zum Experimentieren IMMER eine gute Idee, den Klassiker zu verwenden Transformatorenversorgung
  • Sie können diesen Treiber erweitern, indem Sie CD4094 und \ oder CD4017 hinzufügen. Wenn Sie 8 Anoden oder weniger benötigen, können Sie natürlich die zweite 4094 entfernen, dasselbe Szenario für die 4017, aber wenn Sie den Treiber zur Hand haben möchten, bauen Sie einfach es so vollständig wie möglich
  • Es gibt keine Widerstände an den Basen der Anodentransistoren, wie Sie sehen können, dies sorgt für einen superschnellen Antrieb und schränkt die Stückliste ein, aber der CD4094 verbraucht etwas Strom, sie erwärmen sich fast überhaupt nicht, aber einige Chips können haben einen zu starken Ausgang, überprüfen Sie die Stromaufnahme, falls die Chips nicht durchbrennen, da die Verlustleistung INNERHALB des maximal zulässigen ist, kann der Strom im Bereich von 4 mA pro Pin bei 5 V-Versorgung liegen
  • alte müde Displays können durch einige Stromstöße auf den Filamenten erneuert werden, wenn das gesamte Display dunkel ist und nicht nur ein verbranntes Segment, sagt man, dass man die Drähte wie fünfmal hintereinander sichtbar glühend (gelb) bringt für ein paar Sekunden jedes Mal, nie ausprobiert, aber es kann die doppelte Nennspannung des Glühfadens erfordern, das reinigt sie, aber anscheinend ist es nützlicher für sehr alte \ antike ... und es ist riskant, das sind keine Glühbirnen, du könntest die Drähte durchbrechen

Code

  • Arduino-Code mit Arbeitsroutine
Arduino-Code mit ArbeitsroutineArduino
/* Vielseitige VFD-Display-Hrdware-Schnittstelle Arduino-Programm Copyright (C) 2019 Genny A. Carogna Dieses Programm ist freie Software:Sie können es unter den Bedingungen der GNU General Public License, wie von der Free veröffentlicht, weiterverbreiten und/oder modifizieren Software Foundation, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) eine spätere Version. Dieses Programm wird in der Hoffnung verteilt, dass es nützlich ist, jedoch OHNE JEGLICHE GEWÄHRLEISTUNG; auch ohne die stillschweigende Garantie der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Informationen finden Sie in der GNU General Public License. Zusammen mit diesem Programm sollten Sie eine Kopie der GNU General Public License erhalten haben. Wenn nicht, siehe .*//* Dieser Code verwendet Ressourcen vom Arduino auf eine "hinter den Vorhängen" Weise, die Module Timer1 und SPI werden beide verwendet und beschäftigt * , daher können Sie große Probleme bei der Verwendung von SPI, SPI-Pins und einigen Funktionen haben, die auf Timer1 basieren ... die vorgeschlagene Schaltung * hat keinen Onboard-Speicher, daher muss das Segment-Setup kontinuierlich 100 Mal in jedem Raster "gescannt" werden pro Sekunde * , aus dem Arduino-Segmente-Array, übersetzt dies auch auf die sogenannte "überlastete" CPU-Arbeit, dass es, damit Sie wissen, * nicht mehr als die normale Verwendung eines Mikros am Ende ist, es kann ungefähr 3 . erreichen % der CPU-Arbeit in Bezug auf die belegte Zeit, Sie können auch versuchen * die regulären SPI-Tools von Arduino zu verwenden, aber es erfordert eine eingehende Analyse des Outtakes und der Vorgehensweise * * Dieser Code funktioniert mit jedem 8-Bit-Arduino, auch 3.3V sollten funktionieren ok, vielleicht die SCK-Frequenz reduzieren, wenn man bedenkt, dass die CD4094 * mit Strom versorgt werden und möglicherweise "untervolten" (ja, genau die Übertaktungsprinzipien, um Ihre Lieben zu braten) PC) */#define ledLed 13 // Es ist der LED-Pin, der eine LED zu einer LED führt die "strobe"-Zeile#define strobeHold 10 // Mikrosekunden // Haltezeit zum Umschalten des Optokopplers... nicht Megahertz-schnell aber akzeptabel // Daten für meine Displays (einen Videorecorder, ein Audiophoolery CD-Reader und eine Kompakt-Stereoanlage) ... egal, löschen und einfach "gridAmount" und "anodeAmount" definieren#define JVC#define mitsubishiGrids 10#define mitsubishiAnodes 9#define marantzGrids 9#define marantzAnodes 14#define JVCGrids 11#define JVCAnodes 19#if Defined mitsubishi# define gridAmount mitsubishiGrids#define anodeAmount mitsubishiAnodes#elif Defined marantz#define gridAmount marantzGrids#define anodeAmount marantzAnodes#elif Defined JVC#define gridAmount JVCGrids#define anodeAmount JVCAnodes#endif// dieses Array, Segmente bits// speichert die Segmente Bits[x], [0] bedeutet Gitternull, an d das am wenigsten signifikante Bit ist das Segment Null in diesem Raster // Sie können auf dieses Array zugreifen und es beliebig ändern, von überall aus, ohne etwas anderes zu tun, der Effekt ist sofort auf // dem Display sichtbar und bleibt so lange erhalten ändere die Bits nicht, für mehr als 8 Segmente pro Rasteranzeige brauchst du einen // 16 oder 32 Bit Container pro Raster, dies wird automatisch von den obigen #define(s) verwaltet#if AnodeAmount> 16volatile uint32_t Segmente[gridAmount] ={0}; // mehr als 16 Segmente pro Raster (32 Bit benötigt)#elif AnodeAmount> 8volatile uint16_t Segmente[gridAmount] ={0}; // mehr als 8 Segmente pro Raster (16 Bit, Zwillingsübertragung)#elsevolatile uint8_t Segmente[gridAmount] ={0}; // 8 oder weniger Segmente pro Raster (8 Bit) #endifvoid setup () { // SPI-Pins und einige funktionale als Ausgabe schnell\direkt *portModeRegister(digitalPinToPort(PIN_SPI_SS)) |=digitalPinToBitMask(PIN_SPI_SS); *portModeRegister(digitalPinToPort(PIN_SPI_MOSI)) |=digitalPinToBitMask(PIN_SPI_MOSI); *portModeRegister(digitalPinToPort(PIN_SPI_SCK)) |=digitalPinToBitMask(PIN_SPI_SCK); *portModeRegister(digitalPinToPort(strobePin)) |=digitalPinToBitMask(strobePin); *portOutputRegister(digitalPinToPort(strobePin)) &=~digitalPinToBitMask(strobePin); // setze es niedrig *portModeRegister(digitalPinToPort(ledLed)) |=digitalPinToBitMask(ledLed); *portOutputRegister(digitalPinToPort(ledLed)) &=~digitalPinToBitMask(ledLed); // setze es auf niedrige Verzögerung (800); // einige Verzögerung, um auf den Abschluss des CD4017-Resets zu warten (Sie müssen den Code NACH dem Einschalten des 4017s ausführen, dies macht es automatisch, falls Sie alles einmal einschalten) cli(); // deaktiviert Interrupts, damit wir einige Dinge optimieren können, ohne dass Katzen und Hunde überall entkommen // Timer1-Konfiguration, es wird ein Interrupt "Grids mal 100" pro Sekunde durchgeführt ... dies ergibt eine Gesamtaktualisierung von 100 Hz, die in Ordnung ist TCCR1A =0; TCCR1B =0; TCNT1 =0; OCR1A =160000 / Rasterbetrag; TCCR1B |=(1 < 24 SPDR =~uint8_t(segments[turn]>> 24); // wir brauchen negierte Bits auf dem CD4094 (cos der Transistoranordnung) while (!(SPSR &(1 < 16 SPDR =~uint8_t(segments[turn]>> 16); // wir brauchen negierte Bits auf dem CD4094 (cos der Transistoranordnung) while (!(SPSR &(1 < 8 SPDR =~uint8_t(segments[turn]>> 8); // wir brauchen negierte Bits auf dem CD4094 (cos der Transistoranordnung) while (!(SPSR &(1 < 2) pos ++; uint16_t Maske =0xFF80; uint8_t Zahlen[] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000}; Schalter (pos) { Fall 0:Fall 1:Fall 4:Fall 5:Fall 6:Fall 7:Fall 8:Segmente[pos] &=Maske; Segmente[pos] |=Zahlen[val]; brechen; Fall 2:wenn (val ==1) Segmente[1] |=(1 <<8); else Segmente[1] &=~(uint16_t(1) <<8); brechen; Fall 9:Segmente[9] &=0xFFF0; if (val ==1) Segmente[9] |=3; else if (val ==2) Segmente[9] |=B1101; }} // easy peasy Sieben-Segment-Nummervisualisierungvoid marantzPrintNum(uint8_t val, uint8_t pos) { if (pos> 5) return; Pos ++; Pos ++; uint16_t Maske =0xFF80; // Bitmaske zum Löschen der Ziffer uint8_t numbers[] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01111111, B01101111, B00000000}; Segmente[pos] &=Maske; // lösche alle Ziffernsegmente[pos] |=numbers[val]; // set digit}// easy peasy Sieben-Segment-Nummer-Visualisierungvoid JVCPrintNum(uint8_t val, uint8_t pos) { // kommen (es ist dir wirklich egal)}//

Schaltpläne

Ich habe es vermieden, ALLE BC557-Transistoren zu zeichnen, weil sie trotzdem an allen CD4094-Ausgängen angeschlossen sind.

Es gibt einen Jumper-Selektor (der auf der roten Linie läuft), den Sie auf den 4017-Chips konfigurieren müssen, er setzt die beiden 4017 nach Abschluss des Rasterscanns zurück, Sie müssen den fliegenden Jumper am Ausgangspin NACH dem letzten Raster anschließen (oder löten). , wenn Ihr Display also 10 Gitter hat, geht der Jumper auf den 11. Ausgang.

Die Arduino-Anschlüsse sind rot umrandet, Sie können die USB-Stromversorgung dafür verwenden, aber es wird dringend empfohlen, einen normalen Transformator alten Stils für die verbleibenden Versorgungen zu verwenden, wenn Sie bereits ein geerdetes Netzteil wie Ihr PC haben. Diese Versorgungen müssen alle Gleichstrom sein, außer vielleicht die Filamentversorgung. Ich habe einige Dioden hinzugefügt, da Sie wahrscheinlich einen separaten Transformator mit einer Niederspannungssekundärspannung benötigen. Die Filamentleistung liegt normalerweise im Bereich von 3V 150mA, ein 5V AC-Transformator reicht aus. Das "Vorschaltgerät" ist möglicherweise ein drahtgebundenes Leistungspotentiometer von etwa 100 Ohm oder ein Festwiderstand oder auch einige 1N4007-Dioden zur Reduzierung der Spannung.

Die BC557-Transistoren ziehen die Anoden auf Anodenspannung und die 100-kOhm-Widerstände lassen die Spannungsansteuerung fallen, wenn das Segment ausgeschaltet ist, während der CD4094 normalerweise bei 5 V bleibt.

Die CD4017s werden mit Netzspannung betrieben und benötigen keine zusätzlichen Transistoren. Es gibt eine "Ghetto" -Reset-Schaltung für den 4017, die etwa eine Zehntelsekunde dauert. Sie müssen warten, bis sie sich beruhigt hat, bevor Sie den Code ausführen.
Der "originale" Schaltplan für die Kaskadierung einiger CD4017 erforderte andere Logikgatter-Chips, ich habe stattdessen einen NPN-Transistor und den Optokoppler selbst verwendet, um ein UND-Gatter zu replizieren das ist uns aber egal, zumal die Clock-Eingänge des 4017 schmittgetriggert sind und die benötigte Geschwindigkeit dort nicht "gruselig" ist.

Es gibt verschiedene Gründe für die Chips und so, wie Sie sehen können.

Herstellungsprozess

  1. Squid Games Doll-Build mit Arduino UNO
  2. Bitmap-Animation auf dem ILI9341 TFT-Touchscreen-Displayschild
  3. Webbetriebener DMX-Controller
  4. Arduino Pong-Spiel - OLED-Display
  5. Arduino-Gamecontroller
  6. Unopad - Arduino MIDI-Controller mit Ableton
  7. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  8. Mit Nextion Display spielen
  9. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  10. BME280 Temperatur, Luftfeuchtigkeit und Druck auf dem Nextion-Display