PIC-Würfel
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

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:
- Da Batteriebetrieb vorgesehen ist (1x CR1632), muss die Schaltung absolut Strom sparend sein, d.h. der PIC muss im SleepMode sein, solange die Taste nicht gedrückt wird.
- Die LEDs müssen ggf. gepulst angesteuert werden um Strom zu sparen.
- Durch Tastendruck wird der PIC geweckt und misst sofort die Zeitdauer des Tastendrucks.
- Wird die Taste einmal kurz (z.B. kürzer als 400 ms) gedrückt, muss eine Zufallszahl zwischen 1 und 6 erzeugt werden (Huch? ;-)
- Die Zahl wird blinkend 2 bis 3mal angezeigt, danach wieder SleepMode.
- Wird die Taste lang gedrückt (z.B. länger als 1/2 Sekunde), wird die zuvor gewürfelte(n) Zahl(en) noch mal angezeigt.
- Wird die Taste mehrfach kurz gedrückt, (mehrfach jeweils kürzer als z.B. 400 ms) wird je Druck eine Zufallszahl ermittelt und reihum angezeigt (Simulation mehrerer Würfel).
- Wird Quatsch gemacht (mehrmals drücken aber mal kürzer, mal länger) geht der PIC sofort wieder in den SleepMode.
Wenn der Würfel tut was er soll, werde ich den Code hier veröffentlichen.
... etwas später...
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.