====== PWM Steuerung mit UART ======
[[dtlab_start|Zurück zur Themenübersicht]]
===== Aufgabenstellung =====
Bauen Sie einen Automaten, der die empfangenen Daten interpretiert und damit die Leuchtintensität der LEDs steuert.
===== Vorbereitung =====
==== Projekt aktualisieren ====
Aktualisieren Sie das dtlab Projekt mit
cd ~/projects/dtlab
git pull
==== VHDL toplevel top_uart ====
Die Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/top_uart.vhd|top_uart.vhd]] beschreibt das Modul "top_uart". "top_uart" stellt den toplevel auf dem FPGA dar. Das ist der gleiche toplevel wie bei der letzten Aufgabe. In das Modul wird zusätzlich das pwm Modul und ein Automat eingebaut. Mit dem Automaten werden die von der UART empfangenen Zeichen interpretiert und das pwm Modul angesteuert.
==== Empfangsautomat ====
In [[dt-code-statem|VHDL Code für Zustandsautomaten]] wird das VHDL Designpattern für Automaten dargestellt. In der Schaltung hier soll ein Automat die von der UART empfangenen Zeichen interpretieren und damit das pwm Modul ansteuern. So lässt sich vom Terminal am PC aus die Leuchtstärke der LEDs steuern. Die Schaltung soll die folgenden Befehle erkennen:
led [0|h|1]
Damit kann man die grünen Leuchtdioden 0 bis 3 in der Helligkeit steuern. Der erste Parameter ist die Nummer der Leuchtdiode.
Der zweite Parameter steht für die Helligkeit.
^Parameterwert ^Bedeutung ^
| 0 | LED ist aus |
| h | LED hat die halbe Leuchtkraft |
| 1 | LED hat die volle Leuchtkraft |
Beispielsweise bedeutet
led 2 1
dass die grüne LED 2 voll eingeschaltet wird. Wenn ein gültiger Befehl erkannt und umgesetzt wurde, dann sendet die Schaltung "ok" zurück. Es gibt dazu schon eine Datei [[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/rxautomat.vhd|rxautomat.vhd]].
==== Sendeautomat ====
Wenn der Empfangsautomat einen gültigen Befehl erkannt hat, dann wird für einen Takt das Signal "send_ok_o" aktiviert. Bauen Sie auf Basis eines Zähler einen Sendeautomaten, der die Zeichenfolge "ok" mit Hilfe des UART Transmitters sendet. Die Datei
[[https://gitlab.elektrotechnik.hs-augsburg.de/beckmanf/dtlab/-/blob/master/src/txautomat.vhd|txautomat.vhd]] ist schon vorbereitet. Integrieren Sie den Sende- und Empfangsautomaten im Toplevel mit den anderen notwendigen Komponenten.
===== Labor =====
Im Labor gibt es ein FTDI-RS232 Kabel zum Anschluss eines Rechners an eine RS-232 Schnittstelle. Auf dem FPGA Board ist ein MAX232 Chip mit dem die 3,3V Logiksignal auf RS-232 (+7/-7V) Niveau gewandelt werden. Das Kabel enthält einen [[https://ftdichip.com/products/ft231xq/|USB-UART Konverterchip von FTDI]]. Das Kabel kann also per USB an einen Rechner angeschlossen werden.
{{ :dt-ftdi-uart.jpg?600 | FTDI RS-232 Kabel}}
Abbildung 3: FTDI RS-232 Kabel
==== Software auf dem Rechner ====
Nach dem Einstecken des Modems erscheint unter /dev/ttyXXXXXXX ein neues Device. Unter Linux ist dies /dev/ttyUSB0, unter MacOS ist dies /dev/tty.usbserial-DM000IKG
Auf dem Rechner wird ein Terminalprogramm benötigt, mit dem die Daten von der seriellen Schnittstelle angezeigt werden können.
* Unter MacOS ist ''screen'' vorinstalliert und kann so verwendet werden:
sudo screen /dev/ttyUSB0 57600
* Unter MS Windows kann [[https://www.putty.org|putty]] installiert und genutzt werden.
* Unter Linux ist bei unseren virtuellen Maschinen ''gtkterm'' installiert und kann direkt so gestartet werden:
gtkterm --port /dev/ttyUSB0 --speed 57600 --echo
Tippen Sie im Terminalprogramm Zeichen ein und beobachten Sie, ob die Zeichen korrekt auf den roten LEDs angezeigt werden. Die [[https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#Zusammensetzung|ASCII Tabelle]] zeigt die Codes für die verschiedenen Buchstaben.