Inhaltsverzeichnis:

Spiegelanzeige - Gunook
Spiegelanzeige - Gunook

Video: Spiegelanzeige - Gunook

Video: Spiegelanzeige - Gunook
Video: Smart Mirror (Spiegel mit Bildschirm) für unter 100€ BILLIG selber bauen 2024, November
Anonim
Spiegelanzeige
Spiegelanzeige
Spiegelanzeige
Spiegelanzeige
Spiegelanzeige
Spiegelanzeige

Das Ziel dieses Projekts ist es, die Bildanzeigefunktionalität eines Smart Mirrors zu erstellen. Der Spiegel kann Vorhersagen (sonnig, teils sonnig, bewölkt, windig, Regen, Donner und Schnee) und Temperaturwerte von -9999° bis 9999° anzeigen. Vorhersage- und Temperaturwerte sind fest codiert, als ob sie emuliert werden sollen, wenn sie von einer Wetter-API geparst werden.

Das Projekt verwendet ein Zynq-Zybo-7000-Board mit FreeRTOS und verwendet Vivado 2018.2 zum Design und Programmieren der Hardware.

Teile:

Zynq-Zybo-7000 (mit FreeRTOS)

19 -LCD (640x480)

VGA-Kabel

12 "x 18" Acrylspiegel

Schritt 1: Vivado. konfigurieren

Vivado. konfigurieren
Vivado. konfigurieren
Vivado. konfigurieren
Vivado. konfigurieren

Laden Sie Vivado 2018.2 von Xilinx herunter und verwenden Sie die Webpack-Lizenz. Starten Sie Vivado und "Create New Project" und geben Sie ihm einen Namen. Wählen Sie als Nächstes "RTL-Projekt" und aktivieren Sie "Zu diesem Zeitpunkt keine Quellen angeben". Wählen Sie bei der Auswahl eines Teils "xc7z010clg400-1" und klicken Sie auf der nächsten Seite auf "Fertig stellen".

Schritt 2: VGA-Treiber-IP verpacken

Verpackung VGA-Treiber-IP
Verpackung VGA-Treiber-IP
Verpackung VGA-Treiber-IP
Verpackung VGA-Treiber-IP

Fügen Sie die Datei vga_driver.sv zu den Designquellen hinzu. Klicken Sie anschließend auf "Extras" und wählen Sie "Neue IP erstellen und verpacken". Wählen Sie "Ihr aktuelles Projekt verpacken". Wählen Sie dann einen IP-Speicherort und ".xci-Dateien einschließen". Klicken Sie im Popup auf "OK" und dann auf "Fertig stellen".

Gehen Sie unter "Packaging Steps" zu "Review and Package" und wählen Sie "Package IP".

Nun sollte der vga_driver als IP-Block verfügbar sein.

Schritt 3: Zynq IP

Zynq-IP
Zynq-IP
Zynq-IP
Zynq-IP
Zynq-IP
Zynq-IP
Zynq-IP
Zynq-IP

Wählen Sie im Abschnitt "IP-Integrator" die Option "Blockdesign erstellen". Fügen Sie das "ZYNQ7 Processing System" hinzu und doppelklicken Sie auf den Block. Klicken Sie auf "XPS-Einstellungen importieren" und laden Sie die Datei ZYBO_zynq_def.xml hoch.

Öffnen Sie als nächstes unter "PS-PL Configuration" das Dropdown-Menü für "AXI Non Secure Enablement" und aktivieren Sie "MAXI GP0 interface".

Als nächstes öffnen Sie unter „MIO Configuration“die Dropdown-Liste für „Application Processor Unit“und aktivieren „Timer 0“und „Watchdog“.

Öffnen Sie zuletzt unter „Clock Configuration“das Dropdown-Menü für „PL Fabric Clocks“und aktivieren Sie „FCLK_CLK0“und bei 100 MHz.

Schritt 4: GPIO-IP

GPIO-IP
GPIO-IP
GPIO-IP
GPIO-IP

Fügen Sie dem Blockdesign zwei GPIO-Blöcke hinzu. Die GPIOs werden verwendet, um die Pixeladresse und die RGB-Komponenten der Pixel zu steuern. Konfigurieren Sie die Blöcke wie in den Bildern oben gezeigt. Nachdem Sie beide Blöcke hinzugefügt und konfiguriert haben, klicken Sie auf "Verbindungsautomatisierung ausführen".

GPIO 0 - Kanal 1 steuert die Pixeladresse und Kanal 2 steuert die rote Farbe.

GPIO 1 - Kanal 1 steuert die grüne Farbe und Kanal 2 steuert die blaue Farbe.

Schritt 5: Speicher blockieren

Speicher blockieren
Speicher blockieren
Speicher blockieren
Speicher blockieren
Speicher blockieren
Speicher blockieren

Fügen Sie dem Blockdesign eine Blockspeichergenerator-IP hinzu und konfigurieren Sie sie wie oben gezeigt. Die Pixelfarben werden in Speicheradressen geschrieben, die dann vom VGA-Treiber gelesen werden. Die Adresszeile muss der Anzahl der verwendeten Pixel entsprechen, also muss sie 16 Bit haben. Der Dateneingang beträgt ebenfalls 16 Bit, da es 16 Farbbits gibt. Es ist uns egal, irgendwelche Bestätigungsbits zu lesen.

Schritt 6: Andere IP

Das angehängte PDF zeigt das fertige Blockdesign. Fügen Sie die fehlende IP hinzu und schließen Sie die Verbindungen ab. Außerdem "Make Externals" für die VGA-Farbausgänge und die vertikalen und horizontalen Sync-Ausgänge.

xlconcat_0 - Verkettet die einzelnen Farben zu einem 16-Bit-RGB-Signal, das in den Block-RAM eingespeist wird.

xlconcat_1 - Verkettet die Spalten- und Zeilensignale vom VGA-Treiber und wird in Port B des Block-RAM eingespeist. Dadurch kann der VGA-Treiber Pixelfarbwerte lesen.

VDD - Konstantes HIGH verbunden mit der Schreibfreigabe des Block-RAM, damit wir immer darauf zugreifen können.

xlslice_0, 1, 2 - Die Slices werden verwendet, um das RGB-Signal in einzelne R-, G- und B-Signale aufzuteilen, die in den VGA-Treiber eingespeist werden können.

Sobald das Blockdesign abgeschlossen ist, generieren Sie einen HDL-Wrapper und fügen Sie die Einschränkungsdatei hinzu.

*Block Design basiert auf dem Tutorial von benlin1994*

Schritt 7: SDK

Der Code, der dieses Blockdesign ausführt, ist unten enthalten. Init.c enthält die Funktionen, die die Zeichnung behandeln (Prognosen, Zahlen, Gradzeichen usw.). Die Hauptschleife in main.c wird ausgeführt, wenn das Board programmiert wird. Diese Schleife setzt die Vorhersage- und Temperaturwerte und ruft dann die Zeichenfunktionen in init.c auf. Es durchläuft derzeit alle sieben Vorhersagen und zeigt eine nach der anderen an. Es wird empfohlen, in Zeile 239 einen Haltepunkt hinzuzufügen, damit Sie jedes Bild sehen können. Der Code ist kommentiert und gibt Ihnen weitere Informationen.

Schritt 8: Fazit

Um das aktuelle Projekt zu verbessern, könnte man Vorhersagebilder in Form von COE-Dateien vorab auf Blockspeichergeneratoren hochladen. Anstatt also die Vorhersagen manuell zu zeichnen, wie wir es im C-Code getan haben, könnte man die Bilder einlesen lassen. Wir haben dies versucht, aber es gelang nicht, es zum Laufen zu bringen. Wir konnten Pixelwerte lesen und ausgeben, aber es entstanden unordentliche Bilder, die nicht mit denen vergleichbar waren, die wir in den RAM hochgeladen haben. Das Datenblatt des Blockspeichergenerators ist nützlich zu lesen.

Das Projekt ist im Wesentlichen ein halber Smart Mirror, da ihm der Aspekt der Internetverbindung fehlt. Wenn Sie dies hinzufügen, erhalten Sie einen vollständigen Smart Mirror.