Geliebte Geschenk für den 14. Februar von einem Elektronikingenieur

Grüße GT Leser. Für mich als technische und nicht sehr romantische Person ist die Auswahl eines Geschenks für jeden Anlass ein unglaublicher Schmerz. Alles wäre einfach, wenn meine Geliebte den RAM einem Laptop oder einer Folie von Prozessoren geben könnte, aber sie war nie eine Technikfreak.

Aber da: Ein Geschenk ist nicht so teuer wie Aufmerksamkeit (en) - wir werden versuchen, in Zeit zu investieren. Ich präsentiere Ihrer Aufmerksamkeit "Heart v1.0"



Die Grundidee des Gerätes wurde gemeinsam mit meinem Team für den „Weihnachtsbaum v1.0“ erfunden. Kurz Satz von Funktionen:

- ein gravierte Herz Glückwunsch
- angetriebene Telefonaufladeeinheit (micro - USB - Anschluss)
- die RGB - Hintergrundbeleuchtung beschreibbaren Profile blinkt, Einschalten der Taste
- ein Nachtmodus
- Integrierter Speicher für Grüße der Aufnahme. Wenn es an einen PC angeschlossen ist, wird es als Flash-Laufwerk definiert.

Nachdem wir über die inhärente Funktionalität gesprochen / uns darüber gefreut hatten, entschieden wir uns dafür - niemand ahnte dann, welche Zeitkosten das Herz benötigen würde ...

Eisen


Wie sich herausstellte - der einfachste Teil des Herzens. Der erste Schritt bestand darin, ein Strukturdiagramm des Geräts zu erstellen: Die



Details stammen aus denen in unserem Lager und wurden auch mehrmals in Geräten verwendet. Entsprechend dem Schema können wir sagen: das billigste MK mit USB an Bord STM32F042F6P6, ein einfacher LDO - XC6206P332MR, 32 Mbit / s SPI-Speicher W25Q32FVSSIG (2 Teile wurden auf die Platine gelegt, aber schließlich wurden eines gelötet), RGB28-gesteuerte LED WS2812.

Schematische Darstellung: Das



Minimum an Details und die wichtigste Fehleinschätzung ist die Hoffnung, dass der WS2812 ab dem 3,3-V-Pegel normal funktioniert (Slavik! Ja, ich habe es hundertmal gemacht ... viele sagten).

Das Brett wurde mit der minimalen Breite hergestellt, um es so weit wie möglich unter dem Rand des Herzens zu verstecken. Weiße Farbe. Das Ergebnis in der Abbildung erhalten.



Feil


Denken Sie daran, ich erwähnte die schüchterne Hoffnung, dass der WS2812 mit 3,3 V funktioniert? So wird es nicht sein !!! Genauer gesagt schien alles so zu funktionieren wie vor Beginn des Austauschs über USB. Gleichzeitig begann der blaue Kanal zu versagen. Wir haben lange nach einem Problem in der Software gesucht und gedacht, dass nicht genügend Prozessorressourcen vorhanden sind. Dann haben wir das PB1-Bein über einen 1 kΩ-Widerstand auf 5 V gezogen und alles hat klar funktioniert. Gleichzeitig betrug der Pegel von log.1 ungefähr 4,3 V. Ich verstehe, dass dies nicht gut ist, aber es gab keine Wahl. Das Board stellte sich als ziemlich elegante "Kollektivfarm" heraus:



Soft MK


Um die MK-Programmierung zu vereinfachen, wurde beschlossen, die STM HAL-Bibliothek zu verwenden, da fast alles bereits vorhanden ist. Sie müssen lediglich Logik hinzufügen und alle Module miteinander verbinden. Zum Teil hat uns STM32CubeMX dabei geholfen - die Generierung des größten Teils des Codes kann ihm zugewiesen werden. Hier entscheidet jedoch jeder für sich selbst - der generierte Code muss noch wesentlich korrigiert werden und die Größe der Firmware muss bezahlt werden - die HAL-Bibliothek ist nicht kompakt.

Trotzdem sind in unserem Mikrocontroller 32 KB verfügbar. Die Firmware benötigt etwas mehr als die Hälfte. Daher ist es logisch, in den verbleibenden Speichersequenzen drei Bytes (RGB) zu speichern, die wiederum an den LED-Eingang übertragen werden. Durch Drücken der Taste werden die im Flash MK aufgezeichneten Sequenzen durchlaufen.

Hier stehen wir vor dem ersten Problem: Die WS2812-LED stellt hohe Anforderungen an die Dauer und Dauer der Impulse, während die Impulszeit (0,4 bis 0,8 μs) für einen mit 48 MHz arbeitenden Prozessor klein genug ist. Darüber hinaus müssen wir berücksichtigen, dass unsere Mikroschaltung neben der Steuerung der LED auch die Kommunikation mit einem PC über USB und den Lese- / Schreib-Flash-Speicher bedienen muss.
Glücklicherweise ist diese Diode sehr beliebt und verschiedene Methoden zur Implementierung ihres Protokolls werden im Internet beschrieben, einschließlich auf STM-Mikrocontrollern. Wir haben vielleicht einen der schwierigsten in Bezug auf die Implementierung ausgewählt, aber gleichzeitig auch den effektivsten in Bezug auf die CPU-Zeit - DMA + Timer. DMA schreibt direkt auf den GPIO-Port, der Timer steuert die DMA-Kanäle. Da DMA auf einmal auf den gesamten Port schreibt, funktioniert es nicht, andere Port-Pins als Ausgabe zu verwenden. Aus diesem Grund wurde der PB1-Pin zur Steuerung der LED ausgewählt. Ideologisch ist alles einfach, aber ich müsste ziemlich viel an der Implementierung basteln, wenn es nicht die wunderbare Bibliothek gäbe , die Martin Hubáček auf github geschrieben und gepostet hat. Nach einigem Abschluss unter unserem MK und der ausgewählten Methode zum Speichern von RGB-Sequenzen erhalten wir eine funktionierende LED.

Flash-Speicher


Stellen Sie sich vor, Sie geben Ihnen ein Herz mit einem persönlichen Glückwunsch. Du kommst freudig nach Hause, verbindest es mit dem Computer und es gibt dir anstelle von "Ich liebe dich!" "Der notwendige Gerätetreiber wurde nicht gefunden" oder so ähnlich. Nicht gut.

Daher sollte das Herz in einem der gängigen Betriebssysteme als Flash-Laufwerk erkannt werden, ohne dass Treiber installiert werden müssen. Daher werden wir die USB-Klasse "Massenspeichergerät" verwenden, da die STM32-USB-Gerätebibliothek eine schlüsselfertige Lösung bietet. Hör auf! Fertig ???? Jetzt mal sehen.

Wir erstellen ein Projekt in STM32CubeMX, kombinieren die Lese- / Schreibmethoden für SPI-Flash-Speicher mit den entsprechenden Aufrufen im USB-Massenspeichermodul und stellen zwei Probleme gleichzeitig fest: Das USB-Flash-Laufwerk möchte nicht sicher entfernt werden und „drosselt“, wenn versucht wird, mehr als den Text „Hallo Welt “in der Datei README.txt.

Das erste Problem ist leicht zu lösen - Sie müssen die fehlende SCSI-Verarbeitung des Befehls StartStopUnit implementieren. Der zweite ist schwieriger zu lösen. Die Blockgröße des Dateisystems (mit nur 8 MB Speicherplatz verwenden wir Fat16) beträgt 512 Byte. Der Speicher kann nur in 4k-Blöcken gelöscht werden. Wir müssen einen der Blöcke für die temporäre Speicherung reservieren (wir können uns 4 KB RAM mit den verfügbaren 6 KB nicht leisten). Das heißt, um 512 Bytes zu schreiben, müssen Sie 4 KB kopieren, 4 KB löschen und zurückkopieren. Wenn die Datei groß genug ist, möchte das Betriebssystem außerdem jeweils 64 KB auf das Laufwerk schreiben, und unser Controller kann eine so große Datenmenge nicht zum richtigen Zeitpunkt verarbeiten, da das verwendete Flash-Laufwerk auch nicht das schnellste ist. Im Allgemeinen,Während der Controller langsam 256 Bytes auf einmal schreibt (die Größe der Speicherseite), kann das Betriebssystem (zumindest Fedora, auf dem all dies getestet wurde) bereits entscheiden, dass das Laufwerk den Mut verloren hat.

Kenner werden wahrscheinlich eine elegantere Lösung für das Problem vorschlagen, aber "wir werden den anderen Weg gehen." Der Flash-Speicher wird über die Schnittstelle des Massenspeichergeräts gelesen und in diesem Modus als schreibgeschützt positioniert (gleichzeitig kann das Herz ohne „sichere Extraktion“ leicht aus dem Computer „herausgezogen“ werden, aber wir haben Angst, das Dateisystem zu beschädigen). Wir werden es aufschreiben über den virtuellen Com-Port (auch bekannt als Communication Device Class). Über dieselbe Schnittstelle schreiben wir unsere RGB-Sequenzen an das Ende des MK-Speichers.

Der Startmodus (Massenspeicher oder CDC) wird beim Laden durch Drücken der Taste (oder nicht) ausgewählt.
Kaum gesagt als getan (wie immer wurde die meiste Zeit und Kaffee für diese beiden Wörter aufgewendet). Wir geben Lese- / Schreibzugriff an die MSC-Schnittstelle zurück, da festgestellt wird, dass MacOs im schreibgeschützten Modus das USB-Flash-Laufwerk nicht erkennen - es spielt keine Rolle, hier betrügen wir das Betriebssystem und geben "Erfolg" an jede Schreibanforderung zurück, ohne etwas zu tun (erneut) eine Lösung aus der Kategorie „obwohl nicht elegant, aber billig und fröhlich“). Der Punkt ist klein - Software für den PC.

Weicher PC


Da entschieden wurde, über die CDC-Oberfläche zu konfigurieren und zu flashen, können Sie Dateien einfach nicht mit der Maus ziehen und ablegen, und Sie benötigen eine spezielle Anwendung, die dies ermöglicht. Die Hauptaufgabe besteht darin, dem Benutzer die Möglichkeit zu geben, ein Disk-Image zu erstellen, dort Benutzerdateien hochzuladen und dieses Image in den Flash-Speicher zu schreiben. Die Anwendung sollte auch eine Schnittstelle zum Erstellen / Lesen / Schreiben von RGB-Sequenzen bereitstellen.

Die Anwendung sollte plattformübergreifend sein, und hier helfen uns die Qt-Bibliothek zum Erstellen einer grafischen Oberfläche und ChaN FatFS zum Erstellen und Verwalten eines Disk-Images. Der Datenaustausch mit dem Gerät über den COM-Port ist in Qt der neuesten Versionen "out of the box" (QSerialPort-Modul) verfügbar. Für Disk-Image-Operationen verwenden wir QTreeView mit einem von QabstractItemModel geerbten Elementmodell, in dem Drag & Drop-Operationen zusätzlich implementiert sind (Drag & Drop, was auch immer Sie sagen). mit der Maus “ist praktisch und vertraut, wenn es um Dateien / Ordner geht. Zum Erstellen von RGB-Sequenzen können Sie QListWidget (zum Anzeigen der Farbsequenz), die QtColorWidgets-Bibliothek (von Mattia Basaglia) zum Auswählen von Farben und die in Qt integrierte QEasingCurve-Klasse verwenden, um glatte (oder umgekehrt krampfhafte) Übergänge zwischen Farben zu erzielen und einen Regenbogeneffekt zu erzeugen.

Ergebnis: Die Anwendung verfügt über zwei Registerkarten:

1) "Speicher" für Dateien



2) "LED" zum Verwalten von RGB-Sequenzen



Dialogfeld zum Erstellen von RGB-Sequenzen: Das



Dialogfeld funktioniert in drei Modi:

a) RGB - Mit dieser Option können Sie Übergänge zwischen zwei in der RGB-Notation angegebenen Farben festlegen.
b) HSV - das Gleiche, aber in HSV-Notation - der Überlauf ist dem menschlichen Auge vertrauter, insbesondere im Modus "HSV" + "Iterieren-> HUE" können Sie Regenbogen erstellen.
c) Benutzerdefiniert - In diesem Modus können Sie jede Farbe der Sequenz manuell einstellen. Es ist unmöglich, große Sequenzen wie diese zu erstellen, aber es ist sehr praktisch, das Herz für eine Weile zu löschen (indem Sie die Farbe auf "Schwarz" setzen).

Und schließlich die Definition unseres Geräts als Flash-Laufwerk in Windows / MacOs / Linux (Gnome):







Fazit


Und nach all der geleisteten Arbeit und dem geschriebenen Text stellte ich fest, dass ich kein einziges normales Foto des Herzens selbst gemacht hatte. Daher füge ich die Option „Wie es passiert ist“ bei:





In Wirklichkeit sieht es großartig aus (insbesondere beim Gravieren). Liebe deine Lieben !!!

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


All Articles