Projekt 26: LED-Würfel 2.0: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(26 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Projekte]]
[[Datei:würfel.jpg|200px|thumb|right|Bild 1: LED-Würfel.]]
[[Datei:würfel.jpg|200px|thumb|right|Bild 1: LED-Würfel.]]
Im Rahmen des Elektrotechnik Fachpraktikums, im 5 Fachsemester des Studiengangs Mechatronik, WS2013/2014, haben wir uns mit einem LED-Würfel beschäftigt.
Im Rahmen des Elektrotechnik Fachpraktikums, im 5 Fachsemester des Studiengangs Mechatronik, WS2013/2014, haben wir uns mit einem LED-Würfel beschäftigt.


Ein LED-Würfel kann als eine 3-Dimensionale LED Anzeige betrachtet werden, auf der verschiedene Symbole, Figuren oder auch Texte dragestellt werden können.
Ein LED-Würfel kann als eine 3-Dimensionale LED Anzeige betrachtet werden, auf der verschiedene Symbole, Figuren oder auch Texte dragestellt werden können.
__TOC__






__TOC__




Zeile 27: Zeile 24:
Die Kathoden formen die Ebenen (Bild 2:8 Kathodenebenen), dass heißt die Kathoden auf der jeweiligen Ebene sind miteinander verbunden.
Die Kathoden formen die Ebenen (Bild 2:8 Kathodenebenen), dass heißt die Kathoden auf der jeweiligen Ebene sind miteinander verbunden.
Die Anoden bilden 64 Reihen in der z-Achse (Bild 3:64 Anodenreihen), demzufolge besteht eine Reihe aus 8 LED's, welche auf den 8 verschiedenen Ebenen liegen.
Die Anoden bilden 64 Reihen in der z-Achse (Bild 3:64 Anodenreihen), demzufolge besteht eine Reihe aus 8 LED's, welche auf den 8 verschiedenen Ebenen liegen.
Dadurch ist ein geringerer Verdrahtungsaufwand nötig. Es werden lediglich 8 Drähte für die Ebenen und 64 Drähte für die Reihen gebraucht, was zusätzlich ermöglicht mit weniger Ausgängen am Microcontroller zu Arbeiten.
Dadurch ist ein geringerer Verdrahtungsaufwand nötig. Es werden lediglich 8 Drähte für die Ebenen und 64 Drähte für die Reihen gebraucht, was zusätzlich ermöglicht, mit weniger Ausgängen am Microcontroller zu Arbeiten.


Dieser Aufbau ermöglicht es, durch das Multiplexverfahren jede LED einzeln anzusteuern.  
Dieser Aufbau ermöglicht es, durch das Multiplexverfahren jede LED einzeln anzusteuern.




Der Würfel wurde von einer anderen Gruppe zusammengebaut und in Betrieb genommen.


Weitere Information zum Aufbau des Würfels befinden sich in [[Datei:LED-CUBE_Dokumentation.pdf]], welches die Dokumentation der Gruppe ist, die den Würfel zusammengebaut hat.




Zeile 39: Zeile 38:




==Multiplexverfahren==


Eine einzelne LED lässt sich ansteuern, indem lediglich die Signale einer Reihe und einer Ebene eingeschaltet werden.


Will man LED's in verschiedenen Reihen bzw. Ebenen zur gleichen Zeit leuchten lassen, werden diese in einer Frequenz >25Hz nacheinander eingeschaltet. Durch dieses schnelle Ein- und Ausschalten, nimmt das menschliche Auge das Blinken als Leuchten wahr.


Möchte man mehr als 64 LED's gleichzeitig leuchten lassen, müssen diese mit einer Frequenz >25Hz blinken, da sonst die maximale Stomaufnahme von 1.3A des Würfels überschritten wird.


Siehe hierzu [http://de.wikipedia.org/wiki/Multiplexverfahren Multiplexverfahren]




==Multiplexverfahren==


Eine einzelne LED lässt sich ansteuern, indem lediglich die Signale eine Reihe und eine Ebene eingeschaltet werden.
==Schaltplan==


Will man LED's in verschiedenen Reihen bzw. Ebenen zur gleichen Zeit leuchten lassen, werden diese in einer Frequenz >25Hz nacheinander eingeschaltet. Durch dieses schnelle Ein- und Ausschalten, nimmt das menschliche Auge das Blinken als Leuchten wahr.
[[Datei:würfel_schaltplan.png|100px|thumb|right|Bild 4: Schaltbild]]


Siehe hierzu [http://de.wikipedia.org/wiki/Multiplexverfahren Multiplexverfahren]
Auf dem Schaltplan erkennt man links die 8 MOSFETs, welche zur Ansteuerung aller 8 Ebenen dienen. Mittig ist der Microcontroller mit einer 10-poligen Schnittstelle angeordnet, welche eine Verbindung mit dem Computer ermöglicht. Rechts danaben sind die 8 Schieberegister mit jeweils 8 LED's, welche 64 LED's pro Ebene entspricht, darstellen.


==Schaltplan==


[[Datei:würfel_schaltplan.png|100px|thumb|right|Bild 4: Schaltbild]]


Auf dem Schaltplan erkennt man links die 8 MOSFETs, welche zur Ansteuerung aller 8 Ebenen dienen. Mittig ist der Microcontroller mit einer 10-poligen Schnittstelle angeordnet, welche eine Verbindung mit dem Computer ermöglicht. Rechts danaben sind die 8 Schieberegister mit jeweils 8 LED's, welche 64 LED's pro Ebene darstellen.




==Software==
==Software==


Zur Programmierung des Atmel-Mega32 (eingebauter Microcontroller) kann man das dazugehörige Programm [http://www.atmel.com/tools/atmelstudio.aspx Atmel Studio 6], welche als freeware downloadbar ist, benutzen.
Zur Programmierung des Atmel-Mega32 (eingebauter Microcontroller) kann man das dazugehörige Programm [http://www.atmel.com/tools/atmelstudio.aspx Atmel Studio 6], welche als freeware downloadbar ist, benutzen.
Zeile 68: Zeile 67:




Der Quellcode des Würfels lautet wie folgt:


[[Datei:würfel_code.pdf]]
==Quellcode==
#include <avr/io.h> //AVR-Studio Basis Biblothek
#include <util/delay.h> //Biblothek mit der Funktion _delay_ms()
int main (void) {
DDRC = 0xFF; //PORT;A,C,D werden als Ausgänge aktiviert
DDRA = 0xFF;
DDRD = 0xFF;
int8_t a,b,c,d; // Variablen werden gesetzt
while(1)
{
//////////////////////////////////////
/////////////XY_Bewegung//////////////
//////////////////////////////////////
for(a=0;a<8;a++) //Schieberegister wird gefüllt
{
PORTA = 0xFF; //Alle 8 Schieberegister werden gleichzeitig beschrieben
PORTC = (1<<PC1); //PC1 Ausgang am PORTC, Takt für die Schiebregister
PORTC = 0x00; //Bei jeder positiven Flanke wird der Eingang des Schieberegister in Speicher geschrieben und um ein Stelle verschoben
}
PORTC = (1<<PC2); //Speicher Schieberegister wird ins Ausgangsregister geschrieben
PORTC = 0x00; //Alle Ausgänge PORTC werden auf 0 gesetzt
for(a=0;a<3;a++) //Anzahl Wiederholungen der XY_Bewegung
{
for(b=0;b<8;b++) //MOSFET/Ebene wird aufwärts geschaltet von
{ //Ebene 1-8
PORTD = (1 << b) ; //Ebene wird eingeschaltet
_delay_ms(40); //dauer wie lange eine Ebene an ist
}
for(b=7;b>-1;b--) //MOSFET/Ebene wird abwärts geschaltet von
{ //Ebene 8-1
_delay_ms(40); //dauer wie lange eine Ebene an ist
PORTD = (1<<b) ; //Ebene wird eingeschaltet
}
}
PORTD = 0x00; // Alle Ausgänge PORTD/Ebenen werden auf 0 gesetzt
//////////////////////////////////////
//////Alle_LEDs_an + XY_Bewegung//////
//////////////////////////////////////
for(a=0;a<8;a++) //Alle XY_Ebenen werden schneller als 25 HZ nacheinander geschaltet dadurch entsteht ein Standbild
{
PORTA = 0xff;
PORTC = (1<<PC1);
PORTC = 0x00;
}
PORTC = (1<<PC2); //Speicher Schieberegister wird ins Ausgangsregister geschrieben
PORTC = 0x00; // Alle Ausgänge PORTC werden auf 0 gesetzt
for(a=0;a<120;a++)
{
for(b=0;b<8;b++)
{
_delay_ms(1); //Verzögerung zwischen umschalten der Ebenen
PORTD = (1<<b) ;
}
}
PORTD = 0x00;
}
//die erste while-Schleife wird nie Verlassen deswegen beginnt das Programm dann immer wieder von Anfang
return 0; //Wird benötigt um das Programm korrekt zu beenden auch wenn es bis hier wegen der while(1) nie ankommt
}
 




==Problemstellung==
==Problemstellung==


An der 10-poligen Schnittstelle, für den Flasher, ist zwischen den Kontakten '2'(+5V) und '4'(GND) ein Kurzschluss vorhanden, sodass man sich die Versorgungsspannung direkt vom Netzteil abzweigen muss. Dies gilt nur für die Programmierung, da sich sonst keine Verbindung aufbauen lässt.
An der 10-poligen Schnittstelle, für den Flasher, ist zwischen den Kontakten '2' (+5V) und '4' (GND) ein Kurzschluss vorhanden, sodass man sich die Versorgungsspannung direkt vom Netzteil abzweigen muss. Dies gilt nur für die Programmierung, da sich sonst keine Verbindung aufbauen lässt.
Außerdem weißt die 5te Ebene einen Wakelkontakt auf, welcher nur sporadisch auftritt.  
Außerdem weißt die 5te Ebene einen Wakelkontakt auf, welcher nur sporadisch auftritt.
 
Die Fehler wurden nicht behoben, da der Würfel nicht neu aufgebaut wurde!
 




Zeile 82: Zeile 147:


Zur Projektweiterentwicklung empfielt es sich die Schaltung neu aufzubauen, um die Fehler zu eleminieren. Zum Neuaufbau der Schaltung kann zum Beispiel eine Platine mit dem Fräsbohrplotter erstellt werden.
Zur Projektweiterentwicklung empfielt es sich die Schaltung neu aufzubauen, um die Fehler zu eleminieren. Zum Neuaufbau der Schaltung kann zum Beispiel eine Platine mit dem Fräsbohrplotter erstellt werden.
== Verbesserungsvorschläge zum Artikel ==
[[Benutzer:Ulrich Schneider|Ulrich Schneider]] ([[Benutzer Diskussion:Ulrich Schneider|Diskussion]]) 11:58, 25. Jan. 2014 (CET)
* Zusammenfassung und Lessons Learned fehlen.
* Zip-Datei und ein Großteil der geforderten Dokumente fehlen.
* BOM, Projektpläne, PAP fehlen.
[[Benutzer:Mirekgoebel| Prof. Dr. Mirek Göbel]] am 31. Jan. 2014:
* Quellcode bitte als Extra Artikel anlegen (nicht als pdf!)
* Verweisen Sie auf die Vorarbeit Ihrer Vorgänger (alles bei Ihnen bis Software)
* Beschreiben Sie ausführlich die PRogrammierweise! Wie kann ich per Software gezielt LEDs schalten, wie Muster schalten?
* Es wird nicht klar, ob Sie die genannten Probleme behoben haben.
* insgesamt zu knappe Darstellung!

Aktuelle Version vom 8. Oktober 2014, 09:19 Uhr

Bild 1: LED-Würfel.

Im Rahmen des Elektrotechnik Fachpraktikums, im 5 Fachsemester des Studiengangs Mechatronik, WS2013/2014, haben wir uns mit einem LED-Würfel beschäftigt.

Ein LED-Würfel kann als eine 3-Dimensionale LED Anzeige betrachtet werden, auf der verschiedene Symbole, Figuren oder auch Texte dragestellt werden können.



Aufbau des Würfels

Bild 2: 8 Kathodenebenen
Bild 3: 64 Anodenreihen

Zu sehen ist ein gelöteter Würfel, der aus 8^3 grünen 3mm LED's besteht, was einer Anzahl von 512 LED's entspricht. Dieser Würfel ist auf einem Holzblock befestigt, indem sich die Schaltung befindet.

Die wichtigsten Bauteile in der Schaltung sind der Microcontroller (Atmega 32), 8 Schieberegister, 8 MOSFET's und diverse Widerstände. Die LED's sind in 8 Ebenen zusammengefasst. Jede Ebene enthält jeweils 8 LED's in der x-Achse und y-Achse.

Jede LED hat einen positiven (Anode) und negativen (Kathode) Anschlusspunkt. Die Kathoden formen die Ebenen (Bild 2:8 Kathodenebenen), dass heißt die Kathoden auf der jeweiligen Ebene sind miteinander verbunden. Die Anoden bilden 64 Reihen in der z-Achse (Bild 3:64 Anodenreihen), demzufolge besteht eine Reihe aus 8 LED's, welche auf den 8 verschiedenen Ebenen liegen. Dadurch ist ein geringerer Verdrahtungsaufwand nötig. Es werden lediglich 8 Drähte für die Ebenen und 64 Drähte für die Reihen gebraucht, was zusätzlich ermöglicht, mit weniger Ausgängen am Microcontroller zu Arbeiten.

Dieser Aufbau ermöglicht es, durch das Multiplexverfahren jede LED einzeln anzusteuern.


Der Würfel wurde von einer anderen Gruppe zusammengebaut und in Betrieb genommen.

Weitere Information zum Aufbau des Würfels befinden sich in Datei:LED-CUBE Dokumentation.pdf, welches die Dokumentation der Gruppe ist, die den Würfel zusammengebaut hat.




Multiplexverfahren

Eine einzelne LED lässt sich ansteuern, indem lediglich die Signale einer Reihe und einer Ebene eingeschaltet werden.

Will man LED's in verschiedenen Reihen bzw. Ebenen zur gleichen Zeit leuchten lassen, werden diese in einer Frequenz >25Hz nacheinander eingeschaltet. Durch dieses schnelle Ein- und Ausschalten, nimmt das menschliche Auge das Blinken als Leuchten wahr.

Möchte man mehr als 64 LED's gleichzeitig leuchten lassen, müssen diese mit einer Frequenz >25Hz blinken, da sonst die maximale Stomaufnahme von 1.3A des Würfels überschritten wird.

Siehe hierzu Multiplexverfahren


Schaltplan

Bild 4: Schaltbild

Auf dem Schaltplan erkennt man links die 8 MOSFETs, welche zur Ansteuerung aller 8 Ebenen dienen. Mittig ist der Microcontroller mit einer 10-poligen Schnittstelle angeordnet, welche eine Verbindung mit dem Computer ermöglicht. Rechts danaben sind die 8 Schieberegister mit jeweils 8 LED's, welche 64 LED's pro Ebene entspricht, darstellen.



Software

Zur Programmierung des Atmel-Mega32 (eingebauter Microcontroller) kann man das dazugehörige Programm Atmel Studio 6, welche als freeware downloadbar ist, benutzen.

Das Programm verwendet eine C++ identische Benutzeroberfläche, mit der man über 4 Ports an alle Bereiche des Microcontrollers Zugang hat. Um den Microcontroller programmieren zu können, benötigt man einen Flasher (zum Beispiel Atmel JTAGICE), den man sich, zum arbeiten in der Hochschule, ausleihen kann.


Quellcode

#include <avr/io.h> //AVR-Studio Basis Biblothek
#include <util/delay.h> //Biblothek mit der Funktion _delay_ms()
int main (void) {
DDRC = 0xFF; //PORT;A,C,D werden als Ausgänge aktiviert
DDRA = 0xFF;
DDRD = 0xFF;
int8_t a,b,c,d; // Variablen werden gesetzt
while(1)
{

//////////////////////////////////////
/////////////XY_Bewegung//////////////
//////////////////////////////////////

for(a=0;a<8;a++) //Schieberegister wird gefüllt
{
PORTA = 0xFF; //Alle 8 Schieberegister werden gleichzeitig beschrieben
PORTC = (1<<PC1); //PC1 Ausgang am PORTC, Takt für die Schiebregister
PORTC = 0x00; //Bei jeder positiven Flanke wird der Eingang des Schieberegister in Speicher geschrieben und um ein Stelle verschoben
}
PORTC = (1<<PC2); //Speicher Schieberegister wird ins Ausgangsregister geschrieben
PORTC = 0x00; //Alle Ausgänge PORTC werden auf 0 gesetzt
for(a=0;a<3;a++) //Anzahl Wiederholungen der XY_Bewegung
{
for(b=0;b<8;b++) //MOSFET/Ebene wird aufwärts geschaltet von
{ //Ebene 1-8
PORTD = (1 << b) ; //Ebene wird eingeschaltet
_delay_ms(40); //dauer wie lange eine Ebene an ist
}
for(b=7;b>-1;b--) //MOSFET/Ebene wird abwärts geschaltet von
{ //Ebene 8-1
_delay_ms(40); //dauer wie lange eine Ebene an ist
PORTD = (1<<b) ; //Ebene wird eingeschaltet
}
}
PORTD = 0x00; // Alle Ausgänge PORTD/Ebenen werden auf 0 gesetzt

//////////////////////////////////////
//////Alle_LEDs_an + XY_Bewegung//////
//////////////////////////////////////

for(a=0;a<8;a++) //Alle XY_Ebenen werden schneller als 25 HZ nacheinander geschaltet dadurch entsteht ein Standbild
{
PORTA = 0xff;
PORTC = (1<<PC1);
PORTC = 0x00;
}
PORTC = (1<<PC2); //Speicher Schieberegister wird ins Ausgangsregister geschrieben
PORTC = 0x00; // Alle Ausgänge PORTC werden auf 0 gesetzt
for(a=0;a<120;a++)
{
for(b=0;b<8;b++)
{
_delay_ms(1); //Verzögerung zwischen umschalten der Ebenen
PORTD = (1<<b) ;
}
}
PORTD = 0x00;
} 
//die erste while-Schleife wird nie Verlassen deswegen beginnt das Programm dann immer wieder von Anfang
return 0; //Wird benötigt um das Programm korrekt zu beenden auch wenn es bis hier wegen der while(1) nie ankommt
} 


Problemstellung

An der 10-poligen Schnittstelle, für den Flasher, ist zwischen den Kontakten '2' (+5V) und '4' (GND) ein Kurzschluss vorhanden, sodass man sich die Versorgungsspannung direkt vom Netzteil abzweigen muss. Dies gilt nur für die Programmierung, da sich sonst keine Verbindung aufbauen lässt. Außerdem weißt die 5te Ebene einen Wakelkontakt auf, welcher nur sporadisch auftritt.

Die Fehler wurden nicht behoben, da der Würfel nicht neu aufgebaut wurde!


Projektweiterentwicklung

Zur Projektweiterentwicklung empfielt es sich die Schaltung neu aufzubauen, um die Fehler zu eleminieren. Zum Neuaufbau der Schaltung kann zum Beispiel eine Platine mit dem Fräsbohrplotter erstellt werden.


Verbesserungsvorschläge zum Artikel

Ulrich Schneider (Diskussion) 11:58, 25. Jan. 2014 (CET)

  • Zusammenfassung und Lessons Learned fehlen.
  • Zip-Datei und ein Großteil der geforderten Dokumente fehlen.
  • BOM, Projektpläne, PAP fehlen.


Prof. Dr. Mirek Göbel am 31. Jan. 2014:

  • Quellcode bitte als Extra Artikel anlegen (nicht als pdf!)
  • Verweisen Sie auf die Vorarbeit Ihrer Vorgänger (alles bei Ihnen bis Software)
  • Beschreiben Sie ausführlich die PRogrammierweise! Wie kann ich per Software gezielt LEDs schalten, wie Muster schalten?
  • Es wird nicht klar, ob Sie die genannten Probleme behoben haben.
  • insgesamt zu knappe Darstellung!