Borg3d Bauanleitung

Aus LaborWiki
Wechseln zu: Navigation, Suche

Achtung! Dies ist eine Baustelle!

Borg3d Bauteilliste

Borg3d Platinen Bauanleitung

Borg3d Würfel Bauanleitung

Das Prinzip[Bearbeiten | Quelltext bearbeiten]

Um die 8 x 8 x 8 LEDs einzeln anzusteuern greifen wir auf eine Matrixschaltung zurück, wobei es sich elektrisch gesehen bei dem Borg3d um eine 8 x 64 Anzeigematrix handelt. Das heisst konkret, dass zu jedem Zeitpunkt nur eine der 8 Ebenen aktiv ist, und 64 Leitungen die LEDs dieser Ebene individuell ansteuern können. In schneller Folge werden die 8 Ebenen aktiviert, jeweils das gewünschte Anzeigemuster auf die 64 LEDs gebracht. Nur Trägheit des menschlichen Auges lässt den Eindruck entstehen, dass LEDs unterschiedlichen Ebenen gleichzeitig aktiviert sind.

Die Darstellung unterschiedlicher Helligkeitsstufen wird dadurch erreicht, dass die entsprechende LED nicht in jedem Zyklus aktiviert wird. Wird eine LED z.B. nur bei jedem zweiten Durchlauf angesteuert, so wird sie, gemittelt über mehrere Zyklen, nur halb so viel elektrische Energie in Licht umsetzen wie eine, die bei jedem Durchlauf aktiviert ist -- also dunkler erscheinen. Allerdings ist die menschliche Helligkeitswahrnehmung nicht proportional zur Energie des Lichtstroms, den die LEDs emittieren -- auf diesen Zusammenhang werden wir später bei der Beschreibung der Software zurückkommen.

Die Hardware der Steuerplatinen[Bearbeiten | Quelltext bearbeiten]

Schaltpläne im SVN

ACHTUNG die erste Version des Borg3D hatte eine andere Ebenenaufteilung. Die Fotos sind daher nicht mit der Bauanleitung kompatibel

Als Mikrocontroller verwenden wir bei unseren Projekten bevorzugt einen Atmel ATMega32 oder ATMega644, dies sind die z.Z. grössten von Atmel verfügbaren Mikrocontroller im Lochrasterplatinen-freundlichem Dual-Inline-Package. Diese Mikrochips mit 40 Pins sind vollständige Computer mit einer 8 Bit RISC CPU, einigen Kilobyte RAM und 32 oder 64 Kilobyte Flash-Speicher für das Programm. Daneben haben sie sie eine Hand voll IO Komponenten wie z.B. eine serielle Schnittstelle oder Analog-Digital Konverter.

Diese Mikrokontroller bieten insgesamt 32 frei programmierbare Ein-/Ausgabepins die wir benutzen um die oben erwähnten 8+64 Leitungen zu steuern. Wie steuert man mit 32 verfügbaren IO-Pins 72 Leitungen? Hier verwenden wir zwei unterschiedliche Strategien:

Für die 8 Ebenenansteuerungen benutzen wir ein 8-Bit-Schieberegister: Zu jedem Zeitpunkt soll nur eine Ebene aktiviert sein, und die Ebenen sollen der Reihen nach angesteuert werden. Dazu schieben wir eine 1 in den Eingang im ersten Zyklus. In den kommenden 7 Zyklen schieben wir jeweils eine Null und lassen die 1 so durch das Schieberegister wandern. An den 8 Ausgängen sind MOSFETs als Leistungstreiber geschaltet, die jeweils eine Ebene aktiv schalten.

Die 64 Leitungen für die Spalten müssen dagegen wahlfrei möglichst schnell gesetzt werden. Wir benutzen 8 8-Bit breite FlipFlop Bausteine, deren Eingänge direkt mit 8 I/O-Pins unseres Mikrokontrollers verbunden sind. Der Mikrokontroller legt also die gewünschte Aktivität der ersten 8 von 64 LEDs auf seinen IO-Port und aktiviert das erste 8-fach FlipFlop; legt die Aktivität der nächsten 8 LEDs auf seinen IO-Port aktiviert das zweite 8-fach FlipFlop; usw. bis zum achten.


Wenn du weitere, konkrete Fragen zum Projekt hast, melde dich doch nochmal kurz bei uns, wir helfen dir dann gerne weiter.

FAQ[Bearbeiten | Quelltext bearbeiten]

Wie kommt es zu den (geringen) Vorwiderstandswerten?

Zitat aus der Mailingliste: Welchen der beiden Werte Du verwendest ist relativ egal. 47 Ohm und 39 Ohm funktionieren beide. Diese Werte liefern Ströme von ca. 63 bzw. 76mA pro LED wenn man nachrechnet. Ganz so hoch wird der Strom aber in der Praxis nicht, da die 74HC574 einen gewissen Spannungsabfall haben je nach Strom den man zieht Eher so 40-50mA sind realistisch. Dass der LED-Strom wesentlich höher als 2mA/LED ist ist allerdings volle Absicht. Mit nur 2mA leuchten die LEDs relativ dunkel.Wenn man ins Datenblatt schaut, dann sieht man bei den "absolute maximum ratings" dass die LEDs einen Dauerstrom von 25mA bzw. 30mA vertragen, und einen Pulsstrom von 150mA bei 1/10 Tastverhältnis. Im Borg haben wir es mit einem Tastverhältnis von 1/8 zu tun, der zulässige Strom liegt also irgendwo zwischen den beiden Werten.

Wir haben bei Experimenten herausgefunden, dass diese LEDs das beste Helligkeits/Preis verhältnis für unsere Zwecke haben. Außerdem sind sie diffus, was ein großer Vorteil ist damit der Borg aus allen Richtungen ungefähr gleichhell erscheint.

> Wie verhält es sich, wenn ich LED’s á 2V/20mA für den Borg einsetzen > möchte? > Da würde ich auch einfach 47 oder 39 Ohm nehmen. Wenn Du ganz wissenschaftlich vorgehen möchtest dann schau halt ins Datenblatt welche Pulsströme zulässig sind, und berechen einen entsprechenden Vorwiderstand!

Zitat Ende

Wie Programmiere ich den Microcontroller?

Dazu brauchst Du ein Programmiergerät für den ISP-Anschluss auf der Borg-Platine. Zum Beispiel den "Usbasp" kann man dafür benutzen. Das Programmiergerät wird an die Platine angeschlossen und die Platine wird über ein 5V-Netzteil oder durch das Programmiergerät mit Spannung versorgt (je nach Programmiergerät).

Es müssen zuerst die Fuses des AVR programmiert werden. Das Sind Einstellungsbits, die verschiedene Optionen des Microcontrollers konfigurieren. Die Passenden Werte sind hfuse = 0xC1 und lfuse = 0x1F. Dadurch verwendet der AVR den externen Quarz als Taktquelle, und der JTAG-Port, dessen Leitungen hier anderweitig verwendet werden, wird abgeschaltet.

Zum Schluss muss noch die Firmware (das Programm) aufgespielt werden. Zum Test kann man das "borg.hex" file von hier nehmen: https://www.das-labor.org/trac/export/5901/microcontroller/src-atmel/borg/borg-felix3d/borg.hex

Wie das Setzen der Fusebits und das Hochladen der Firmware gemacht wird ist von der Software für das Programmiergerät abhängig. Wir verwenden hauptsächlich das Usbasp-Programmiergerät zusammen mit der Software "avrdude". Die benötigten Kommandozeilen sehen dann folgendermaßen aus:

 Setzen der Fuses:
 avrdude -c usbasp -p m32 -B 1000 -U hfuse:w:0xc1:m -U lfuse:w:0x1f:m
 Programmieren der Firmware:
 avrdude -c usbasp -p m32 -U borg.hex

Avrdude muss mit root Rechten ausgeführt werden, da es direkt auf das Programmiergerät zugreift. Alternativ kann man eine entsprechende Udev Regel erstellen, siehe hier: [1]. Sobald die Udev-Regel aktiviert ist, kann avrdude ohne root Rechte ausgeführt werden.

Besen
Diese Seite sollte verbessert/überarbeitet werden: Das ist keine Bauanleitung! Es fehlt eine Einleitung. Bilder, die einzelne Aspekte illustrieren, wären hilfreich.
Über Verbesserungen an dieser Seite soll bei Bedarf auf der Diskussionsseite beraten werden
Hier gelangst du zur Dokumentation dieses Banners.