Wochenend-Projekt: elektronischer Würfel v1.01

Das Krippenlicht muss warten. Nachdem mein Board so gut funktioniert hat, wollte ich ein lange von mir geplantes Projekt starten, – einen elektronischen Würfel. Das Programm und die Platine sind recht trivial und meinen Elektronik- und Programmierkenntnissen entsprechend. Aber er funktioniert! Das Programm in seiner ursprünglichen Form war mit einer Switch() Auswahl, welche ich aber den ganzen Samstag nicht zum laufen bekommen habe. Sogar der Debugger von meinem Entwicklungsstudio ist mit Programmfehler ausgestiegen, so dass das ich den Debugger im Windows immer wieder neu starten musste. Am Abend hatte ich die Nase voll, weil ich weder den Fehler finden konnte noch mit dem Debugger irgend etwas herausfinden konnte. Ich setzte mich mit einem Arbeitskollegen in Verbindung (der beruflich embedded Code schreibt) und zusammen konnten wir die Fehler mit dem Switch() nicht finden. So dann haben wir das Problem mit vielen IF() Anweisungen gelöst.

Kurze Erklärung:
In einer Endlosschleife wird bei jedem Durchlauf ein Zähler (i) um Eins (i++) erhöht und ein Input abgefragt. Wenn der Zähler 5 hat (Augenzahl 0 bis 5 sind 6) wird der Zähler auf 0 gesetzt. Wenn es einen Input gibt (Switch gedrückt) Wird der Zähler i ausgewertet und je nachdem welchen Wert i beim drücken des Switches hatte die dementsprechenden LEDs eingeschaltet. Der Zufallsgenerator ist sozusagen der Mensch, der den Switch drückt, – weil er nicht wissen kann wie hoch i in dem Moment des Drückens ist.

Weitere Anmerkung:
ich hatte als Widerstände nur 330 Ohm und habe diese genommen. Da auf manchen Ausgängen zwei LEDs sind, wären hier niedriger Widerstände besser um das Leuchten der LEDs gleichmäßiger zu bekommen. Als Batterie kann von 3,3Volt bis 5 Volt genommen werden (ich habe 4,5v (3xAA)).

 

Bild von der Schaltung:

El. Würfel

 

/*
* Attiny13_Wuerfel_v1_01.c
*
* Created: 04.03.2018 09:57:00
* Author : Bernd
*/

#include <avr/io.h>
#include <util/delay.h>



int main(void)
{
DDRB = 0b00010111; // Datenrichtungsbit 1 = Ausgang
PORTB =0b00001000; // Pullup Wiederstand 1 = Ein (für Eingang)

int i=0; // einfacher Zähler für Würfel Augenanzahl

while (1){ // Endlos Schleife

if(PINB != 0b00001000) // Abfrage ob Switch gedrückt
{

_delay_ms(60); // kurze Pause

if (i==0) // i Auswerten
{
// Zahl 1 --> i=0
PORTB =0b00000001;

}
if (i==1)
{
// Zahl 2 --> i=1
PORTB =0b00000100;

}
if (i==2)
{
// Zahl 3 --> i=2
PORTB =0b00000101;

}
if (i==3)
{
// Zahl 4 --> i=3
PORTB =0b00010100;

}
if (i==4)
{
// Zahl 5 --> i=4
PORTB =0b00010101;

}
if (i==5)
{
//Zahl 6 --> i=5
PORTB =0b00010110;

}
_delay_ms(1000); // kurze Pause, damit Würfel angezeigt wird
PORTB =0b00001000; // nach Pause alle LEDs wieder ausschalten



}
i++; // bei jedem Schleifendurchlauf i Erhöhen
if (i==6) // Wenn i = 6 dann i wieder auf 0 setzen
{
i=0;
}

}
return (0);
}
Source zu AtTiny13_Wuerfel_v1_01
Dieser Beitrag wurde unter Elektronik, Microcontroller, Wochenend Projekte veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar