Projekt 43b: Ansteuerung des LED-Würfels 2.0 mit Matlab

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Grafische Benutzeroberfläche zur Ansteuerung des LED-Würfels[1]
Grafische Benutzeroberfläche zur Ansteuerung des LED-Würfels[1]

Autoren: Christian Horstknepper und Leon Hundertmark

Betreuer: Prof. Dr. Mirek Göbel


Einleitung

In diesem Artikel werden die Ergebnisse des WS 17/18: Fachpraktikum Elektrotechnik (MTR) der Gruppe 43b: Ansteuerung des LED-Würfels 2.0 mit Matlab festgehalten. Das Projekt wurde im Wintersemester 17/18 von Christian Horstknepper und Leon Hundertmark im Rahmen des Moduls Mechatronische Systeme II des Mechatronik Studiengangs im 5. Semesters bearbeitet. Um nachfolgenden Studierenden die Arbeit am LED-Würfel zu vereinfachen, enthält der Artikel eine Dokumentation, Datenblätter und eine kurze Funktionsbeschreibung des Würfels. Vorhandenen C-Code, Matlab-Code und weitere Dateien stehen im SVN und als .zip-Datei zur Verfügung.

Aufgabe

Ziel ist es, den Atmega32 des Würfels so zu programmieren, dass er Daten seriell empfängt und diese in richtiger Form an die LED-Treiber überträgt, um das gewünschte Bild darzustellen. Die Daten sollen aus Matlab gesendet werden. Die Initialisierung des Würfels konnte aus dem Beispielcode von Asaad Mohammed Al-Suleihi übernommen werden und musste somit nicht selbst programmiert werden.

Schwierigkeitsgrad

mittel(***)

Funktionsbeschreibung des Würfels

Funktionsplan des LED-Würfels[2]

Der Würfel benötigt eine Versorgungsspannung von 5 Volt. Über- und Unterspannungen werden durch eine Schutzschaltung abgefangen. Diese ist in die Anschlussplatine integriert. Außerdem befinden sich auf der Anschlussplatine zwei 4mm-Sicherheits-Buchsen zur Stromversorgung. Zwei dSPACE-, ein RS232- und ein USB-Anschluss dienen zur Übertragung von Daten zum Atmega32. Der Atmega32 kann über einen JTAG-Anschluss auf der Unterseite des Würfels programmiert werden.

Der eigentliche LED-Würfel besteht aus acht Ebenen, die nacheinander durchlaufend mit Daten geladen und ein- bzw. ausgeschaltet werden (Multiplex-Betrieb). Jede Ebene besteht aus 64 LEDs, die in acht Reihen zu acht LEDs von jeweils einem Treiber-IC angesteuert werden. Jede Reihe wird mit einem 8-Bit-Muster beschaltet, ein Bit repräsentiert dabei jeweils eine LED der aktuellen Reihe.

In unserem Fall werden die Daten per USB-Schnittstelle übertragen. Ein MAX232-Controller ermöglicht dabei die serielle Kommunikation über USB.

Projekt

Im folgenden werden die Ergebnisse kurz und prägnant dargestellt.

Erstellen eines Projekts mit Atmel Studio

  1. Atmel Studio installieren (siehe hier)
  2. Starte Atmel Studio
  3. Neues Projekt erstellen
    • GCC C Executable Projekt
    • Atmega32 auswählen
  4. Debuggen ermöglichen
    • Symbolleiste
    • Atmega32
    • Toolchain
    • Optimization
    • Optimization level: none
  5. Frequenz der CPU speichern
    • Projekt
    • Projekteigenschaften
    • Symbols
    • F_CPU= siehe Datenblatt(1475600UL)

Nutzung des Programmiergeräts

  1. Atmel-ice[3]
  2. Anschließen an den Würfel
  3. USB-Anschluss in den Computer
  4. Startbereit wenn die grüne LED leuchtet
  5. Einstellen in Atmel Studio
    • Symbolleiste
    • Rechts neben Atmega32(none)
    • JTAG Debugger auswählen
  6. Für Nutzung vorbereiten
    • Extras
    • Device Programming
    • Apply, Read

Einrichten der seriellen Schnittstelle des Atmega32

  1. Öffne das Datenblatt des Atmega32
  2. Suche Beschreibung von USART[4]
  3. In dem Atmel Studio Projekt
#include <avr/io.h>				// io Bibliothek des Atmega
#ifndef F_CPU
#define F_CPU 14745600UL 			// Definition der Frequenz
#endif
#define BAUD 9600				// Auswahl einer passenden Baudrate
#define UBRR (((F_CPU)/BAUD*16UL)-1)		// USART Baud Rate Register

void USART_init(void)
{
	UBRRL= UBRR;				// Definition der Baud Rate 
	UBRRH=(UBRR>>8);			// in 2 mal 8 Bit
	UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);	// Definition der Datengröße 8-bit
	UCSRB=(1<<RXEN)|(1<<TXEN);		// Empfangen und senden freischalten
}
void USART_send(unsigned int data)
{
	while (!( UCSRA & (1<<UDRE))); 		// Warte bis der Buffer leer ist
	UDR = data;				// Schreibe neue Daten in den Buffer
}
unsigned int USART_receive(void)
{
	while(!(UCSRA) & (1<<RXC));  		// Wenn die Übertragung abgeschlossen ist
	return UDR;				// Gib die Daten aus dem Buffer zurück
}

Serielle Übertragung aus Matlab[5]

1. Erstellen eines Serial-Objekts

 atmega = serial('COM3','BaudRate',9600)

2. Öffnen des seriellen Ports

 fopen(atmega)

3. Senden der entsprechenden Daten

 fwrite(atmega,daten)

Erstellung einer GUI in Matlab

Um die Bedienung des Würfels zu vereinfachen, wurde eine grafische Benutzeroberfläche mit Matlab GUIDE[6] erstellt. Diese Benutzeroberfläche vereint mehrere Funktionen:

  • Herstellen einer seriellen Verbindung zum Würfel (manuelle Auswahl des COM-Ports)
  • Auswahl einer vordefinierten Figur
    • Eine Vorschau diese Figur wird in der GUI geplottet
  • Senden der gewählten Figur an den Würfel
  • Die gesendeten Daten (64 Byte - ein Byte pro Linie) werden zur Kontrolle angezeigt

Da der Würfel am Ende des Praktikums leider nicht mehr funktionierte, wird dieser durch einen Arduino repräsentiert, welcher analog zum Würfel seriell verbunden wird und die Daten empfängt. Sollte der Würfel wieder funktionieren, muss der Code der GUI nicht verändert werden.

Probleme & Schwierigkeiten

  1. Erstellen eines funktionierenden Atmel Studio Projekts
  2. Einrichten der seriellen Schnittstelle
  3. Defekt des Würfels
    • Problem:
      • Stromversorgung des Würfels defekt
      • Die "Spannung ok" LED blinkt aufgrund des Kondensators C15
    • Vermutung:
      • Kurzschluss in der zweiten Ebene
  4. Spätes Erhalten des Atmel-ice Programmiergeräts
  5. Zeitweise benötigte die Gruppe 43a, welche für das Gehäuse verantwortlich war, den Würfel. Währenddessen konnte neu geschriebener Code nicht getestet werden.

Zusammenfassung

Insgesamt war der LED-Würfel eine interessante elektrotechnische und informatische Herausforderung. Das Einarbeiten in das Datenblatt des Atmega32, das Einrichten der seriellen Schnittstelle und das Modellieren des Würfels als 8x8x8-Matrix innerhalb von Matlab konnte erfolgreich umgesetzt werden. Des Weiteren wurde eine GUI eingerichtet, welche die Auswahl einer Figur und die serielle Übertragung dieser zum Würfel vereinfachen soll. Aufgrund oben genannter Probleme konnte die serielle Übertragung zum Würfel nicht fertig konfiguriert und getestet werden.

Ausblick

  1. Aufgaben
    • Reparieren des Würfels
    • Testen der vorhandenen seriellen Schnittstelle
    • Anpassen des vorhandenen C-Codes zur korrekten Darstellung der gesendeten Daten
  2. Möglichkeiten
    • Vereinfachtes Erzeugen von 8x8x8-Matrizen
    • Verbesserung der seriellen Übertragung allgemein

Literaturverzeichnis

  1. Eigener Screenshot
  2. Funktionsplan erstellt durch Ansgar Ramesohl
  3. Atmel-ice Programmiergerät. Abgerufen am 20.01.2018
  4. USART. Abgerufen am 20.01.2018
  5. Serielle Kommunikation mit Matlab. Abgerufen am 20.01.2018
  6. Grafische Benutzeroberflächen mit Matlab GUIDE. Abgerufen am 20.01.2018

→ zurück zum Hauptartikel: WS 17/18: Fachpraktikum Elektrotechnik (MTR) und Angewandte Elektrotechnik (BSE)