Kinderspielzeug auf logischen Elementen

In diesem Artikel möchte ich sozusagen über mein erstes Projekt in der Elektrotechnik sprechen. Ich muss sagen, dass ich beruflich weit entfernt von Schaltkreisen und Funkelektronik bin, aber das Interesse an diesem Thema hat mich nicht von klein auf ausgeruht. Für Menschen mit Erfahrung scheinen die folgenden Informationen zu offensichtlich zu sein, und vieles, was ich getan habe, ist „ein Fahrrad zu erfinden“. Aber vielleicht kann ein Noob wie ich etwas Neues und Interessantes entdecken. Wen kümmert es bitte unter der Katze.


Alles begann mit der Idee, ein Entwicklungsboard für meine kleine Tochter zu bauen. Zuerst wollte ich meine Arme ausstrecken und selbst etwas tun. Zweitens wollte ich mein Gehirn dehnen und mir etwas einfallen lassen, das nicht auf gewöhnlichen Boards dieses Typs zu finden ist.


Nachdem Sie beobachtet hatten, was das Kind im Alltag am liebsten tut, wurde entschieden, dass Sie zusätzlich zu den Standardkettengriffen Tasten zum Drücken und ein bestimmtes Gerät hinzufügen müssen, das die Reaktion auf das Drücken anzeigt. Da etwas Einfaches, aber Helles angezeigt werden sollte, fiel die Wahl auf die rote 8x8-LED-Matrix.


Bis ich das Spielzeug kreierte, hatte ich einige Zeit Staub auf dem Arduino Uno-Regal gesammelt - es wartete darauf, dass ich etwas Nützliches außer dem automatischen Bewässerungsfarbsystem fand, das neben der Langeweile selbst etwas weniger war, als ich nicht brauchte. Ich dachte, dass ihre (Arduino) Stunde gekommen war, weil Sie irgendwo anfangen müssen. Nachdem ich die Handbücher für die Matrix gelesen hatte, stellte ich fest, dass es nicht nur möglich ist, alle LEDs gleichzeitig zu steuern, sondern dass sie nicht nur nicht mit dem Arduino verbunden sind (nur dafür benötigen Sie 16 Pins, die sich nicht in meinem Arduino befinden). Sie können gleichzeitig mit bestimmten Dioden entweder in einer Zeile oder in einer Spalte leuchten (Steuerung der gemeinsamen Kathode oder der gemeinsamen Anode). Und wenn Sie dies konsequent und schnell genug tun, nimmt eine Person das Blinken nicht mehr wahr und sieht ein stabiles Bild. Ich habe auch erfahren, dass es für Arduino Standardtreiber und -bibliotheken gibt, die sich die Mühe machen, diesen Prozess zu verwalten. Und die Tatsache, dass zu diesem Zeitpunkt kein solcher Fahrer vorhanden war, bestimmte das Ergebnis des gesamten Projekts.


Während ich alles hinausschob und die Auswahl des besten Ortes für den Kauf eines Fahrers aufschob, stieß ich auf einen Artikel über die Funktionsweise von Auslösesystemen. Für mein Gehirn, die Geisteswissenschaften, ist es eine echte Entdeckung geworden, die ein Verständnis dafür vermittelt, wie das Gedächtnis auf einer primitiven Ebene organisiert ist. Dann fragte ich mich, ob ich auf Arduino verzichten und mein Projekt auf Triggern und Logikschaltungen basieren könnte.


Also musste man sich zuerst entscheiden, was man zeigen und wie man es macht. Es war klar, dass es notwendig war, ein Signal nacheinander an acht Zeilen der Matrix anzulegen und für jede Iteration ein paralleles Signal an bestimmte Spalten anzulegen. Nun, das gab mir ein Verständnis für die drei Hauptkomponenten - einen Impulsgenerator, einen Taktwandler in acht aufeinanderfolgende Signale und einen Wandler, der für jedes der acht Signale eine bestimmte Kombination paralleler Signale ausgibt. Es ist nicht so kompliziert.


Nach einigem Überlegen bildet sich in dem Kopf eine Schaltung, in der das Taktsignal unter Verwendung von drei in Reihe geschalteten JK-Triggern in Binärcode und dann unter Verwendung von Logikschaltungen in Oktal umgewandelt wird. Details zu dieser Art von Triggern können zumindest auf Wikipedia nachgelesen werden. Kurz gesagt, es hat zwei Eingänge (J und K) und zwei Ausgänge (Q und Q̄) sowie einen Synchronisationseingang (CLK). Wenn eine logische Einheit während des nächsten Synchronisationsimpulses einem der Eingänge zugeführt wird, wird die Einheit am entsprechenden Ausgang angezeigt und darauf gespeichert, unabhängig davon, ob der Synchronisationsimpuls erneut angelegt wird und ob sich der Wert am ausgewählten Eingang ändert, vorausgesetzt, der zweite Eingang bleibt Null. Wenn Sie eine Einheit an den zweiten Eingang und an die erste Null senden, ändert sich beim nächsten Synchronisationsimpuls der Wert des ersten Ausgangs auf Null und der zweite auf Eins. Wenn jedoch eine Einheit an beide Triggereingänge angelegt wird, erscheint die Einheit bei jedem Synchronisationsimpuls abwechselnd an einem der Ausgänge. Wenn Sie zwei Trigger verwenden, legen Sie einen Takt an den Synchronisationseingang des ersten und das Signal vom Ausgang Q̄ des ersten zum Synchronisationseingang des zweiten an. Infolgedessen gibt der Ausgang Q1 alle zwei Zyklen einen und Q2 alle vier Zyklen aus. Somit wird ein zweistelliger Binärzähler erhalten. Und wenn Sie den dritten Trigger auf die gleiche Weise hinzufügen, können Sie aufgrund der dritten Ziffer mit einem Binärcode bis zu acht zählen - genau das benötigen Sie.


Bild


Als nächstes musste eine Wahrheitstabelle erstellt und ein Satz logischer Schlüssel ausgewählt werden, damit der Binärcode in acht aufeinanderfolgende Signale umgewandelt wurde. Wenn für einige die Wahrheitstabelle und die Booleschen Operationen etwas Neues und Unbekanntes sind, können Sie sie hier und hier auf Wikipedia erneut lesen.


Es scheint, dass die Hälfte der Arbeit da ist, aber tatsächlich war es nicht so einfach. Als ich den ersten Teil der Schaltung für den Test auf einem Steckbrett zusammenstellte und vorstellte, wie der zweite Teil auf ähnliche Weise implementiert werden kann, zeichnete sich meine Fantasie über viele Monate (und vielleicht Jahre - die Zeit, sich einem Hobby zu widmen, etwas mehr als eine Stunde nach der Arbeit) mit dem Zeichnen von Diagrammen und dem Zusammenstellen von Wahrheitstabellen ab. In der Tat müssen Sie für acht Zeilen jedes Bildes eine eindeutige Kombination von Spalten generieren. Und je mehr Bilder es gibt, desto monströser wird die Schaltung. Mir wurde klar, dass es nicht funktionieren würde, nur das zu tun, was für logische Schlüssel vorgesehen war. Es musste nach etwas gesucht werden, das diesen Prozess vereinfachen konnte.


Die Lösung war ein Speicherchip. Für meine Aufgabe war der EEPROM-Speicher (Electrically Erasable Programmable Read-Only Memory) gut geeignet - ein programmierbarer Speicher mit der Möglichkeit der elektrischen Löschung mit paralleler Ein- / Ausgabe. Der Speicher hat wie viele Adresseneingänge, die tatsächlich Bits der Binäradresse der Speicherzellen sind. Das heißt, wenn der Speicher n Adresseneingänge hat, können 2 ^ n Zellen programmiert werden. Die Anzahl der Speicherpins ist die sogenannte "Wortlänge" oder die tatsächliche Länge einer Binärzeichenfolge, die in jede Zelle geschrieben werden kann. Das Produkt aus der Anzahl der Zellen pro Wortlänge bestimmt die Speichermenge in Bits.


Das Eingangssignal in Form von Binärcode stand mir am Ausgang von JK-Triggern zur Verfügung. Es bleibt, es mit Bits von den Tasten zu ergänzen, die für die Ausgabe verschiedener Bilder verantwortlich sein sollten, und der Punkt ist im Hut.


Aufgrund der mangelnden Erfahrung konnte ich die Komplexität des Prozesses nicht angemessen einschätzen. Schließlich muss der Speicher programmiert werden, und dafür benötigen Sie einen Programmierer - das Gerät ist erheblich teuer, um es für ein einmaliges Spielzeughandwerk zu kaufen. Googeln zeigte, dass es theoretisch möglich war, dies mit dem Arduino zu tun. Für die Programmierung ist es jedoch erforderlich, gleichzeitig Signale sowohl an die Adresseingänge des Speicherchips als auch an die Ausgänge zu liefern, die anschließend das Signal reproduzieren sollen. Und wir brauchen auch Chip-Steuersignale. Das heißt, wieder mehr als die verfügbaren Stifte. Durch zusätzliches Googeln wurde für mich ein Schieberegister geöffnet - ein Chip, der sich eine bestimmte Folge von Nullen und Einsen merkt und diese auf parallelen Ausgängen anzeigt. Oft arbeiten solche Chips auch als Puffer und haben einen Ausgang, der die Eingangssignale sequentiell reproduzieren kann. Das heißt, wenn Sie das nächste Register daran anschließen, können Sie gleichzeitig eine doppelt so große Sequenz wie für eine anzeigen. Wenn Sie die Zeile betreten, durchläuft der erste Teil das erste Register wie einen Puffer im zweiten, und der Rest verbleibt im ersten Register. Durch Hinzufügen eines dritten Registers können Sie die Länge der Zeichenfolge usw. verdreifachen. Um dies zu implementieren, mussten Sie eine Skizze in einer unbekannten Programmiersprache schreiben. Nach einigen Versuchen in Python und vielen Beispielen im Internet erwies sich diese Aufgabe nach einer Reihe von Versuchen und Irrtümern als durchaus machbar. Skizze kann auf Github genommen werden .


Und jetzt ist die Skizze geschrieben, die Mikroschaltung angeschlossen, der Start und ... nichts - der Speicher ist nicht programmiert. Einige Beispiele, geänderte Aufnahmeeinstellungen und keine Ergebnisse. Ich hatte eine Mikroschaltung W27C512-45Z. Ein sorgfältiges Lesen der Handbücher zeigte einen unangenehmen Moment. Um auf einen bestimmten Kontakt der Mikroschaltung zu schreiben, muss ein Strom von 0,03 A mit einer Spannung von 12 V geliefert werden. Ich dachte, ich hätte gerade einen nicht so geeigneten Chip gekauft. Aber nachdem ich durch die Regale der örtlichen Geschäfte für elektrische Komponenten gescrollt hatte, stellte ich sicher, dass jeder 12 V benötigt. Ich hatte keine Labornetzversorgung. Es gibt viele 12V-Blöcke im Haus, aber sie sind alle gepulst, außerdem beträgt der Strom ungefähr 1A. Verzeihen Sie mir, erfahrenen Ingenieuren, ein solches Sakrileg, aber in meiner Verzweiflung beschloss ich zu versuchen, zu sehen, ob mit den vorhandenen Blöcken ein Wunder geschehen würde. Ist nicht passiert. Die ersten beiden Durchgänge der Aufnahme ergaben nichts, und nach dem dritten Mikrokreislauf zeigten sich keine Lebenszeichen mehr.


Im Internet fand ich Hinweise auf eine bestimmte ST662AB-Mikroschaltung - einen 5V-12V-Wandler - der zusammen mit dem richtigen Satz Kondensatoren den erforderlichen Strom und die erforderliche Spannung erzeugen sollte. Tatsächlich war es nicht einfach, den Chip zu finden. Infolgedessen bestellte ich es aus China, auch SMD. Und was ist mit vier bis sechs Wochen Lieferung? Richtig, lerne. Beim Durchblättern der Artikel zur Speicherprogrammierung stieß ich auf die Erwähnung eines Chips, der mit 5 V programmiert werden kann. Es ging um den AT28C256. Und tatsächlich wurde in den Datenblättern für sie 12 V nicht erwähnt. Müssen nehmen! Der Chip für meine Anforderungen war zwar etwas redundant, da ich 256 KB einsparen konnte: eine 8-Bit-Ausgabe für 32 KB-Adressen, die unter Berücksichtigung der belegten drei Adresspins für Zeilensynchronisationssignale die Codierung von bis zu 4096 Bildern ermöglichte (10 wären für mich ausreichend). Außerdem musste die Lieferung bereits aus Großbritannien erfolgen. Aber ich habe keine anderen Optionen gefunden, und am Ende kann der Speicher neu programmiert werden, und wenn das Spielzeug nicht mehr relevant ist, kann der Chip an anderer Stelle verwendet werden. Nach vier Tagen hatte ich eine Erinnerung. Skizzentestlauf und Glück - alles funktioniert.


Als letztes müssen Sie entscheiden, wie viele Tasten vorhanden sein sollen, 8 x 8 Bilder zeichnen und das Hinzufügen von Signalen von den Tasten zur Schaltung implementieren. Nachdem ich den Platz auf der Tafel geschätzt hatte, entschied ich mich für fünf Knöpfe. Angesichts der wertlosen Nachfrage im Vergleich zur Speicherressource bestand der einfachste Weg darin, ein Signal von jeder Taste ohne Codierung direkt an einen separaten Eingang zu senden. Es stimmt, ich musste immer noch das Problem des Wechsels zwischen Bildern lösen. Es konnten Knöpfe mit Druckfixierung verwendet werden. Eine solche Implementierung war jedoch nicht für ein einjähriges Kind geeignet, da vor dem Drücken des nächsten Knopfes der funktionierende gedrückt werden musste und an sich recht primitiv war. Ich wollte ein Schema für Tasten ohne Fixierung entwickeln, bei dem das Drücken jeder Taste gespeichert wird, und sogar das Drücken der vorherigen Taste abbrechen. Ich habe über die Funktionen der Verwendung verschiedener Arten von Triggern gelesen und gehofft, dass einige von ihnen dieses Problem selbst lösen können, aber leider. Nachdem ich ein wenig mit einem Blatt und einem Bleistift gesessen hatte, kam ich zu folgendem Diagramm (ein Beispiel für drei Knöpfe).


Zuerst müssen Sie alle Tasten an einen bestimmten Kollektor anschließen, der am Ausgang eine Einheit ergibt, wenn Sie auf eine der Tasten klicken. Hierfür ist die ODER-Taste geeignet. Da die Tastenkreise meistens nur zwei Eingänge haben, müssen die ersten beiden Tasten mit einer Taste verbunden und dann der Ausgang mit dem ersten Eingang der zweiten Taste und mit dem zweiten Eingang - der dritten Taste - verbunden werden. Auf diese Weise können Sie weitere Schaltflächen verbinden und für jede weitere Taste einen neuen Schlüssel hinzufügen. Außerdem muss jede Taste mit einer separaten XOR-Taste und dem J-Eingang eines separaten JK-Triggers verbunden sein. Verbinden Sie den Ausgang des ODER-Puffers mit dem zweiten Eingang der XOR-Tasten und den Ausgang jeder XOR-Taste mit dem K-Eingang des entsprechenden JK-Triggers. Durch Drücken von beispielsweise Taste 1 wird eine Einheit an J1 gesendet, und XOR1 wird nicht ausgelöst, da ihm sowohl von der Taste als auch vom ODER-Puffer eine Einheit zugeführt wird. Am Ausgang Q1 erscheint ebenfalls eine Einheit und wird gespeichert. Gleichzeitig arbeiten XOR2 und XOR3 und versorgen K2 und K3 mit einer Einheit. Und wenn es in Q2 oder Q3 zuvor eine Einheit gab, ändert sich diese auf Null.


Bild


Das Erstellen von 8x8-Bildern war ebenfalls ein separater Test. Zu wenige Punkte, um ein erkennbares Bild zu reproduzieren. Aber die Fantasie anzuschalten, schaffte es immer noch, ein paar zu zeichnen, zum Beispiel einen solchen Android.


Bild


Für Bilder habe ich Wahrheitstabellen erstellt. Da man jedoch eins für die Zeilen für die Matrix und null für die Spalten einreichen muss, musste die Tabelle invertiert werden. Ich habe den resultierenden Binärcode in hexadezimaler Codierung aufgeschrieben, um ihn in der Arduino-Skizze bequemer verwenden zu können.


Um die gesamte Strecke zu bauen, wollte ich ein fertiges Board bestellen. Aus der Liste der verfügbaren Unternehmen, die Mock-Board-Fertigungsdienstleistungen anbieten, wurde mir die günstigste Option für ein bilaterales Board für fast 25 US-Dollar angeboten. Ich weiß nicht, vielleicht sind das normale Kosten, aber es schien mir ein bisschen viel zu sein. Außerdem habe ich absolut keine Erfahrung mit dem Entwerfen von Layouts. Und ich finde den Lötprozess sehr angenehm und beruhigend. Deshalb kaufte ich mir eine Universalplatine, eine Rolle mehrfarbigen Drahtes, die notwendigen Komponenten und setzte mich mehrere Abende an die Montage. Da alle Komponenten mit einer Spannung von 5V bis 12V betrieben werden. Der Einfachheit halber habe ich eine 9-V-Batterie hergestellt.


Wie alles als Ergebnis funktioniert, sehen Sie hier , das vollständige Schema ist auf dem Github verfügbar.
Als "Herz" der gesamten Schaltung habe ich einen Impulsgenerator verwendet. Ich war mir nicht sicher, welche genaue Frequenz der Takt benötigt wird, deshalb habe ich die vorgefertigte Schaltung mit Einstellung verwendet. Leider habe ich kein Oszilloskop, aber durch Vergleichen der Einstellungen und des Datenblattes der Schaltung wird irgendwo um 1KHz verwendet. Hier zeigt das Video , wie sich die Frequenz von niedrig nach höher ändert. Sie können sehen, wie die Matrixzeilen gezeichnet werden.


Vielen Dank für Ihre Aufmerksamkeit.

Source: https://habr.com/ru/post/de421967/


All Articles