LED Würfel

Der LED-Würfel ist ein kleineres Wochenendprojekt, welches ich vor einigen Jahren gemacht habe.

Die erste Variante, die ich gebaut hatte besitzt zwei Würfel. Diese lassen sich unabhängig voneinander würfeln. Zum Einsatz kam ein Mikrocontroller der Firma Atmel – ein ATmega8. Damit das ganze besser aussieht habe ich eine Auslaufanimation einprogrammiert, welche man im Video ganz gut sieht:

Die zweite Version unterscheidet sich eigentlich nur darin, dass ein anderes Gehäuse zum Einsatz kommt. Dieses wurde mit FreeCAD konstruiert und anschließend auf meinem 3D-Drucker gedruckt. Das Gehäuse hat eine Würfelform, bei dem der Würfel auf der Spitze steht.

Es besteht aus drei Einzelteilen: dem Sockel, dem Würfelgrundgehäuse und dem Würfeldeckel mit den LEDs. Das Würfelgrundgehäuse ist mit dem Sockel verschraubt (wurden nachträglich Löcher gebohrt, da kleben nicht so gut geklappt hat). Der Deckel ist nur gesteckt. Der Vorteil an diesen drei Einzelkomponenten war, dass kein Support benötigt wurde. Als Material wurde PLA genommen.

Die Platine wurde im Würfelgrundgehäuse verstaut. Im Sockel befindet sich nur der Taster und das Verbindungskabel zur Platine.


neue Variante


Platine und LEDs

Der Schaltplan ist eigentlich absolut nichts besonderes. Es ist ein Spannungsregler verbaut, damit das ganze mit einem Steckernetzteil höherer Spannung (z.B. 7,5V) versorgt werden kann. Der Schaltplan ist die Variante mit einem Würfel. Für die Variante mit zwei Würfeln kann man die Pinzuordnung aus der io_label.h erfahren/anpassen.

Der Quelltext wurde in C geschrieben. Als Entwicklungsumgebung diente das Atmel Studio.

Der Code ist mittlerweile über 9 Jahre alt. Heute würde ich auch einiges anders machen. Vieles ist hier nicht wirklich optimal gelöst. Z.B. mit einer sauberen Schrittkette bzw. einem Zustandsautomaten. Aber dafür funktioniert der Code einwandfrei.

main.c

timer.h

Hier wird letztendlich nur die Hardware initialisiert.

timer.c

Hier läuft das Hauptprogramm ab. Sobald der Taster gedrückt wird, leuchten die LEDs des entsprechenden Würfels. Solange der Taster gedrückt wird, zählt der µC die Zahlen 1-6 kontinuierlich hoch. Damit wird ein Zufall simuliert. Lässt man den Taster los, so läuft der Würfel langsam aus.

Das ganze funktioniert mit zwei virtuellen Prescalern:

  • prescaler_pressed_led_g – wenn dieser überläuft, dann wird der Würfel eins nach oben gezählt. Dieser Prescaler ist variabel und wird durch prescaler_pressed_led_grenze_g angepasst.
  • prescaler_grenze_verschieben_g – wenn dieser überläuft, dann wird die Geschwindigkeit des überlaufen von prescaler_pressed_led_g verringert (durch Erhöhung des Maximalwertes, bevor Prescaler überläuft – über die Variable prescaler_pressed_led_grenze_g), vorausgesetzt, die langsamste Stufe wurde noch nicht erreicht. Dieser Prescaler ist fix.

Wenn die langsamste Geschwindigkeit erreicht wurde, dann wird alles resettet und die Zahl bleibt stehen.

#include <avr/io.h>

struct bits {
  uint8_t b0:1;
  uint8_t b1:1;
  uint8_t b2:1;
  uint8_t b3:1;
  uint8_t b4:1;
  uint8_t b5:1;
  uint8_t b6:1;
  uint8_t b7:1;
} __attribute__((__packed__));

#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin)


#define true 1
#define false 0
Hilfskonstrukt, damit den einzelnen I/Os Namen zugeordnet werden können (siehe io_label.h).

wuerfel.h

wuerfel.c

Mit diesen Funktionen werden die I/Os der beiden Würfel den entsprechenden Zahlen zugeordnet. “-1” dient dazu alle LEDs anzuschalten.

io_label.h

Die Namens-Zuordnungen zu den einzelnen I/Os.

Deckel

Download

Gehäuseteil 1

Download

Gehäuseteil 2

Download


Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information