Tja, so etwa im Januar 2009 hatte ich dann mal Muße und Lust, mir Gedanken über einen PIC-Würfel zu machen, nachdem ich in früheren Zeiten bereits einige elektronische Varianten von Würfeln zusammen gebaut hatte.
Heraus gekommen ist dabei diese Schaltung
(Click auf das Bild für größere Darstellung)
und das zugehörige Layout
das, mit Eagle3D und Povray verwurstelt, einen Eindruck des späteren Aussehens vermittelt
Im richtigen Leben sah die Platine vor dem Versuch der ersten Programmierung so aus
und wartet jetzt auf die belebenden Innereien in Form von ausführbarem Code.
Ich habe die Platine einseitig entworfen und bei MME fertigen lassen. Der Batteriehalter für die Knopfzelle sitzt auf der Unterseite, die Anschlüsse werden auf der Oberseite
angelötet.
Die drei rechteckigen Pads sind die Kontakte für die Programmierung des PIC, zusätzlich sind Masse und ggf. 5V zu verbinden. Die Batterie muss dann natürlich entfernt werden.
Jede LED hat ihren eigenen Vorwiderstand, was die kreuzungsfreie Leiterführung deutlich erleichtert bzw. überhaupt erst möglich gemacht hat.
Die Designunterlagen im Eagle 5.2-Format können hier geladen werden.
Ich habe natürlich ein paar Ideen zu den Funktionen des Würfels entwickelt, ohne allerdings abschätzen zu können, ob das alles in den verwendeten kleinen PIC 12F629 passt. Das wird mir aber der Compiler sicherlich verraten, wenn das Programm erst mal existiert.
Ich plane, den Würfel in C oder BASIC zu programmieren und verwende dafür die Freeware-Versionen von mikroElektronika, die es erlauben, 2k Code zu erzeugen. Das reicht für den 12F629 dicke aus, der hat nur 1k Speicher.
Die Fallback-Strategie lautet natürlich Assembler, sollten die Compiler zu umfangreichen Code erzeugen.
Hier mein Lastenheft für den PIC-Würfel:
Wenn der Würfel tut was er soll, werde ich den Code hier veröffentlichen.
Die ersten Gehversuche in Sachen Würfel-Code habe ich hinter mir. Das Lastenheft ist bisher nur sehr rudimentär erfüllt, sprich, ich habe erst mal nur einen (Pseudo-) Zufallszahlengenerator und eine Anzeigeroutine implementiert, um die Schaltung mit Leben zu erfüllen.
Nach ein paar Wochen Ruhe auf meinem Schreibtisch hat sich der Taster übrigens drastisch verschlechtert und prellt was das Zeug hält. Ich muss also noch eine Entprellroutine vorsehen.
Die Programmierung erfolgte mit dem ICD2-Nachbau über nur für diesen Zweck an den vorgesehenen Pads angelöteten Drähte. Wenn der Code steht, kommen die natürlich wieder weg.
Bei der Programmierung habe ich dann auch gelernt, dass ich die Pinbelegung ändern muss, da der Reset für die Programmierung erhalten bleiben muss und nicht als Ausgang verwendet werden kann. Außerdem benötigt der Reset auch noch einen PullUp-Widerstand und ich habe einen Blockkondensator spendiert. Im Schaltbild und im abgebildeten Layout ist das bereits berücksichtigt.
Zu diesem Zeitpunkt war die Schaltung aber schon fertig aufgebaut, so dass ich die Änderungen durch Kratzen und zusätzliche Drähte einbringen musste. Der Blockkondensator und der PullUp hängen in der zweiten Ebene.
In Orignalgröße sieht das Ganze etwa so aus (zumindest auf meinem Monitor), man hat also tunlichst eine ruhige Hand, gute Augen (oder alternativ eine gute Brille ;-), eine
spitze Pinzette und einen ebensolchen Lötkolben.
Eine Lupe mit Ringleuchte ist in diesem Zusammenhang ebenfalls kein Fehler.
Nicht ganz trivial, aber es hat funktioniert. Besser ist natürlich die Verwendung des korrigierten Layouts ;-)
Ich habe vor lauter Begeisterung auch noch eine Variante des SMD-Würfels mit einem Atmel ATtiny13 entworfen, dessen Layout auf Grund anderen Pinnings und besserer Features etwas aufgeräumter wirkt.