Nachdem ich meine ersten Erkenntnisse im Programmieren von PIC Mikrocontrollern
erworben hatte (beim PicKit 3 waren einige Übungsprogramme dabei) machte ich mich also
daran, mir meinen ersten einfachen LED-Cube zu bauen.

Als Inspiration diente mir dabei folgende Seite:
http://www.ledstyles.de/fpost99870.html?highlight=Cube+leicht+gemacht

Dort bekam ich sinnvolle Tipps zum Löten des Cube, der Aufbau und die Funktion wird gut beschrieben usw.

Allerdings wird dort ein AT Tiny 2313 uC verwendet der allemal ausreichend ist.
Ich hingegen hatte bereits einen PIC 18F 4620 daheim weil ich ja in Richtung 8x8x8 RGB wollte.
Daher hab ich das ganze mit diesem viel zu starken Chip realisiert.

Folglich: Andere Pins, andere Programmierung, anderer Aufbau.

Verwendet hab ich meine bereits vorher hergestellte PIC-Test-Platine.
Mit ihr hatte ich bereits eine stabile Stromversorgung, einen Sockel in dem ich die meisten PIC-uC verwenden konnte und Pins die bereits darauf gewartet haben verwendet zu werden.
Ein weiterer Vorteil dieser Platine ist, dass der uC dabei in der fertigen Schaltung programmiert werden kann. (Dank ICSP-Programmierung)

Link zur Anleitung Test-Platine (außerdem eine gute Anlaufstelle für grundlegende Elektronik):
http://www.sprut.de/electronic/pic/test/index.htm#40pin

Auf dieser Seite hab ich sehr viele Stunden verbracht und mich in die uC-Technik eingelesen.
Auch über die ICSP-Schnittstelle und was man bei ihr beachten muss oder wie wichtig eine
stabile Stromversorgung für einen uC ist hab ich dort viel gelesen. Ich rate euch dasselbe zu tun.

Aufgebaut hab ich meinen Würfel auf einer Lochraster-Platine da ich vom selbst Ätzen noch weit entfernt war. Da meine Stromlaufpläne mit Bleistift auf Butterbrotpapier gezeichnet waren, kann ich die hier leider nicht anbieten.

 

Die Hardware

IMG_0656[1]Dies ist die Test-Platine.

Links sieht man den 7805 Spannungsregler mit seinen Kondensatoren, der für die stabile Spannungsversorgung von 5V sorgt. Er schafft max. 5A und ist daher auch für sehr viele peripheren Schaltungen geeignet. Aufgrund des Wechselrichters (links unten) ist das ganze Verpolungssicher. Benötigt wird lediglich ein Netzteil das genug Ampere und eine Spannung zwischen 8 und 20V liefert. Der Schalter dient zum Ein und Ausschalten sowie als Umschalter zum Programmieren. Am Rand verteilt sieht man schön übersichtlich die aufgetrennten Ports des PIC. Links über dem PIC befindet sich die ICSP-Schnittstelle. Rechts unter dem PIC befindet sich eine Anschlussmöglichkeit für eine externe Taktversorgung für den PIC. Sie wird hier nicht verwendet da der PIC-interne Taktgeber des PIC 4620 verwendet wird, der immerhin bis zu 32MHz schafft.

 

IMG_0657[1]Dies ist die Platine für den Würfel.

Links oben kommt das Flachbandkabel von den digitalen Pins des uC und die Stromversorgung. Links unten die Anschlüsse für die Ebenensteuerung inklusive Vorwiderstände für die Transistoren der Ebenen (BC 639) die sich unter den LEDs befinden. Ich habe BC 639 verwendet da die einen Strom von kontinuierlich 0,5A schalten können.
Wenn man bedenkt dass jede Ebene nur 1/3 der Zeit leuchtet muss man den 3-fachen Strom durchschicken damit die Helligkeit subjektiv gleich bleibt. (Auf den max. Spitzenstrom der LED im Datenblatt achten!!!) Daher rechnet man 0,02A (pro LED) * 3 (3-facher Strom) * 9 (Anzahl der LEDs in einer Ebene die gleichzeitig leuchten können) = 0,54A
Es wird womöglich Leute geben die sich fragen, weshalb ich die Transistoren für die Säulen (BC 337) eingebaut habe. Das hab ich gemacht weil ja pro LED 0,02A * 3 = 60mA benötigt werden, der PIC pro Ausgang aber nur 25mA schafft. Man könnte jetzt natürlich sagen dass der Strom auch nur 1/3 der Zeit benötigt wird und dass das deshalb dem PIC nichts ausmachen wird… Dennoch wollte ich das Risiko nicht eingehen da es viel Arbeit ist eine Lochraster-Platine umzulöten. Ein Fehler ist mir dennoch aufgefallen. Für die Transistoren der Säulen hab ich keine Vorwiderstände. Dass dies trotzdem funktioniert halte ich für Glück. Die Widerstände die man nach den Transistoren sieht sind die Vorwiderstände für die LEDs die benötigt werden um den Strom durch die LEDs auf 60mA zu begrenzen. (zum Testen vielleicht stattdessen nur Vorwiderstände für 20mA verwenden – Nicht dass bei einem Fehler alle LEDs durchbrennen…) Desweiteren sieht man rechts unten einen Taster der die Animationen durchschalten kann sowie ein Potentiometer mit dem man die Animationsgeschwindigkeit regeln kann.

 

IMG_0658[1]Hier der komplette Test-Aufbau.

Oben sieht man noch eine Platine mit 7-Segment-Anzeigen die ich nachträglich noch eingebaut habe die mir die Nummer der aktuellen Animation 2-stellig anzeigt. Die 7-Segment-Anzeige hab ich zuerst ohne Würfel entwickelt und getestet. Es handelt sich um 2 ganz normale LED Anzeigen die mittels zweier 74HC164N Schieberegister und serieller Übertragung angesteuert werden…
(meine ersten Erfahrungen mit SPI)

 

Die Software

Natürlich braucht man jetzt noch eine Software die man auf den PIC programmiert.
Ich kann hier niemandem beibringen wie man programmiert. Dazu gibt es bereits genug Dokus im Netz und in Büchern. Hier aber trotzdem ein paar Eckpunkte zur Realisierung des Programms.

Grundsätzlich gibt es im Programm 2 Timer die Interrupts auslösen. Einen der die Ebenen zuverlässig zur richtigen Zeit durschaltet und einen der die Dauer eines Bildes festlegt (gesteuert durch das Potentiometer). Ein großes Problem war das Speichern der Animationen. In diesem ersten Programm hab ich die Animationen mit Einzelbildern erstellt. Dies endete bei langen Animationen in riesigen Arrays. Ein Array ist ein zusammenhängender Speicherblock. Wenn man sich eine Zeit mit Compilern auseinandergesetzt hat, weiß man dass in einem Linker-File Spezifikationen zu bestimmten Chips stehen. Das Linker-File das beim MPLAB von Microchip benötigt wird sieht ebenfalls vor dass die Speicherbereiche auf dem PIC in Blöcke unterteilt sind. Überschreitet nun die Größe eines Arrays die Größe so eines Speicherblocks gibt es Fehler beim Kompilieren des Programms. Man muss nun das Linker-File dementsprechend bearbeiten dass ein größerer zusammenhängender Speicherblock zur Speicherung der Animationen zur Verfügung steht. Das hat verdammt viel Zeit gekostet das herauszufinden.

imageAußerdem hab ich mir die Arbeit gemacht und mir ein Programm in VB.net geschrieben, mit dem ich in einer grafische Oberfläche Animationen planen kann. Danach bekommt man das fertige Array präsentiert und kann es über die Zwischenablage einfach ins MPLAB einfügen.

 

 

 

 

Das MPLAB-Projekt inklusive Linker-File, persönlichen Notizen und Animationen sowie dem VB.net 2010-Programm biete ich euch hier zum DOWNLOAD an.
Speichern mit Rechtsklick—>Speichern unter
Es ist eine ZIP-Datei die ich zu PDF umbenannt habe damit man sie über WordPress laden kann.

 

Fertig – Der Würfel in Aktion

 

3x3x3 Single Color Cube in Aktion (noch ohne 7-Segment-Anzeige)

 

Bis hier hin hat es schon viel Zeit benötigt. Man darf dabei auch nicht vergessen dass ich eine Lehre als Nachrichtenelektroniker habe. Man muss fairerweise aber auch dazusagen dass ich seit der Lehre sehr wenig mit der Materie zu tun hatte.

Beruflich hab ich die erste Zeit Kabelbäume & Platinen in Druckern getauscht und später war ich im PC-Support und Hotline. Jetzt bin ich Netzwerk-Administrator.

Von Elektronik auf dieser Ebene keine Spur. Dennoch bin ich zumindest im Hobby zu den Wurzeln zurückgekehrt.

Wer Fragen hat, findet im Blog sicher eine Möglichkeit diese zu stellen.
Ich werde antworten sofern möglich. Nur bitte nicht vergessen dass ich nebenbei auch noch ein “echtes” Leben habe. *smile*

 

Euer

Tekknologgy