Servus,
ich habe am Sonntag einmal für meinen Neffen ein Spielboard auf die Schnelle gebastelt. Ist eigentlich ganz nett und denke auch eine gute Anregung für eigene Ideen.
Dazu habe ich aus dem Keller eine alte Bremsleuchte genholt und diese eben als LED-Zeile auf das Brett montiert. Die vier Segmente haben je einen Transistor und sind somit direkt nach geringer Modifikation am AVR betriebsfähig. Weiterhin habe ich vorne vier Digi-Taster angebracht welche die Eingabe darstellen. Diese sind durch 1N4148 gegen Fremdspannung geschützt und eben intern gepullupt (siehe Software). Einen Festplattenmotor habe ich aus Jux eben auch noch aufgeschraubt. Dieser läßt sich in Drehzahl und Richtung schalten. Ein altes VU-Meter aus einer Technics-Anlage habe ich auch aufgesetzt. diese ist einfach mit 10k Vorwiderstand am AVR-Oit angeschlossen und wird PWM-Generiert gepulst zum entsprechenden Ausschlag. Als µC habe ich einen DIL20-µC verwendet, einen Tiny2313 und als IDE BASCOM.
Das Programm beginnt zu Anfang mit einer auf/abblendenden LED-Zeile welches die Ausganssituation anzeigt. Wird Programm 1 angewählt, wird die Sequenz gespeichert und immer wiederholt wiedergegeben. Drückt man weitere Tasten werden diese getoggelt in das laufende Pattern implementiert und ebenfalls wiedergegeben. Bei drücken vom Taste 2 wird eben das selbe gemacht, nur eben die gedrückte Tastensequenz wie ein Pappagei verzögert ausgegeben. Programm 3 hat sechs verschiedene Programme die eben fest programmiert sind die in Geschwindigkeit direkt verändert werden können (wie ein Lichtcomputer eben). Programm 4 ist die Ansteuerung des Festplattenmotors. Weil keine Kontrolle der Phasen erfolgt ist das ein kniffliges Spiel mit dem Speed den Motor auf Drehzahl zu bekommen ohne das er die Synchronisation verliert.
Ein kleines Video im AVI-Format mit der DigiCam habe ich einmal aufgezeichnet unter www.mds-5.de/temp/RMOV0862.AVI weiterhin ist das Programm hierzu das folgende:
Grüße WolfgangCode:$Regfile = "2313def.dat" $Crystal = 8000000 VuMeter Alias PortD.5 Ph1 Alias PortD.0 Ph2 Alias PortD.1 Ph3 Alias PortD.2 Led4 Alias PortB.0 Led2 Alias PortB.1 Led3 Alias PortB.2 Led1 Alias PortB.3 Taster1 Alias PinD.3 Taster2 Alias PinB.4 Taster3 Alias PinD.6 Taster4 Alias PinD.4 Dim i As Byte Dim Speed As Byte Dim Prog As Byte Dim TmpByte As Byte Dim TmpWord As Word Dim Taste As Byte Dim Led As Byte Dim Pat(96) As Byte Dim PatPntr As Byte WaitMs 200 'DDRD = 00100111 'DDRB = 00001111 'PortD = 01011000 PortB.4 = 1 DDRD.5 = 1 DDRD.0 = 1 DDRD.1 = 1 DDRD.2 = 1 DDRB.0 = 1 DDRB.1 = 1 DDRB.2 = 1 DDRB.3 = 1 PortD.6 = 1 PortD.4 = 1 PortD.3 = 1 Main: Ph1 = 0 Ph2 = 0 Ph3 = 0 VuMeter = 0 GoSub ReadTasten If Taste > 0 Then GoTo Main MainLoop: Incr TmpByte If TmpByte.7 = 0 Then ' Aufblenden For i = 0 To 127 If i < TmpByte Then Led = 15 VuMeter = 1 Else Led = 0 VuMeter = 0 End If GoSub ProgWeiche WaitUs 100 Next i Else ' Abblenden For i = 255 To 128 Step -1 If i > TmpByte Then Led = 15 VuMeter = 1 Else Led = 0 VuMeter = 0 End If GoSub ProgWeiche WaitUs 100 Next i End If Goto MainLoop ProgWeiche: GoSub SetLeds GoSub ReadTasten If Taste.0 = 1 Then GoTo Programm1 If Taste.1 = 1 Then GoTo Programm2 If Taste.2 = 1 Then GoTo Programm3 If Taste.3 = 1 Then GoTo Programm4 Return Programm1: ' Programm löschen For PatPntr = 1 To 96 Pat(PatPntr) = 0 Next PatNr PatPntr = 1 Do ' LED's anzeigen Led = Pat(PatPntr) GoSub SetLeds ' Taster einlernen GoSub ReadTasten If Taste.0 = 1 Then If Pat(PatPntr).0 = 0 Then Pat(PatPntr).0 = 1 Else Pat(PatPntr).0 = 0 End If End If If Taste.1 = 1 Then If Pat(PatPntr).1 = 0 Then Pat(PatPntr).1 = 1 Else Pat(PatPntr).1 = 0 End If End If If Taste.2 = 1 Then If Pat(PatPntr).2 = 0 Then Pat(PatPntr).2 = 1 Else Pat(PatPntr).2 = 0 End If End If If Taste.3 = 1 Then If Pat(PatPntr).3 = 0 Then Pat(PatPntr).3 = 1 Else Pat(PatPntr).3 = 0 End If End If ' Bei Drücken aller Tasten beenden If Taste = 15 Then Exit Do ' Weiterschalten im Speicher Incr PatPntr If PatPntr > 96 Then PatPntr = 1 ' VU-Anzeige GoSub VuMeterTakt ' Wartezeit WaitMs 50 Loop GoTo Main Programm2: ' Programm löschen For PatPntr = 1 To 96 Pat(PatPntr) = 0 Next PatNr PatPntr = 1 Do ' LED's anzeigen Led = Pat(PatPntr) GoSub SetLeds ' Taster einlernen GoSub ReadTasten Pat(PatPntr) = Taste ' Bei Drücken aller Tasten beenden If Taste = 15 Then Exit Do ' Weiterschalten im Speicher Incr PatPntr If PatPntr > 96 Then PatPntr = 1 ' VU-Anzeige GoSub VuMeterTakt ' Wartezeit WaitMs 50 Loop GoTo Main VuMeterTakt: ' VU-Anzeige TmpByte = PatPntr Mod 8 If TmpByte < 2 Then VuMeter = 1 Else VuMeter = 0 End If Return Programm3: PatPntr = 0 Speed = 10 Prog = 0 Do ' Programm ausgeben TmpByte = Prog * 16 TmpByte = TmpByte + PatPntr TmpByte = Lookup(TmpByte, Patterns) Led = TmpByte GoSub SetLeds ' Weiterschalten Incr PatPntr PatPntr = PatPntr And &h0F ' Taster einlesen und auswerten Taste = Taste * 16 GoSub ReadTasten ' Bei Drücken aller Tasten beenden If Taste = 15 Then Exit Do TmpByte = Taste And &h0F If TmpByte = 0 Then If Taste.4 = 1 Then Incr Speed If Taste.5 = 1 Then Decr Speed If Prog > 0 Then If Taste.6 = 1 Then Decr Prog End If If Prog < 5 Then If Taste.7 = 1 Then Incr Prog End If End If TmpByte = Speed * 10 WaitMs TmpByte Loop GoTo Main Programm4: ' Taster 1: Speed - ' Taster 2: Speed + ' Taster 3: Links ' Taster 4: Rechts Speed = 20 TmpByte = 0 Do If i = 0 Then If TmpByte = 2 Then TmpByte = 0 Else Incr TmpByte Else If TmpByte = 0 Then TmpByte = 2 Else Decr TmpByte End If ' Motor ansteuern Ph1 = 0 Ph2 = 0 Ph3 = 0 If TmpByte = 0 Then Ph1 = 1 If TmpByte = 1 Then Ph2 = 1 If TmpByte = 2 Then Ph3 = 1 ' Taster einlesen und auswerten GoSub ReadTasten If Speed < 255 Then If Taste.0 = 1 Then Speed = Speed + 1 End If If Speed > 2 Then If Taste.1 = 1 Then Speed = Speed - 1 End If If Taste.2 = 1 Then i = 0 If Taste.3 = 1 Then i = 1 ' Bei Drücken aller Tasten beenden If Taste = 15 Then Exit Do WaitMs Speed Loop GoTo Main ReadTasten: Taste.0 = Not Taster1 Taste.1 = Not Taster2 Taste.2 = Not Taster3 Taste.3 = Not Taster4 Return SetLeds: Led1 = Led.0 Led2 = Led.1 Led3 = Led.2 Led4 = Led.3 Return Patterns: Data &b10001001 ' 1 Data &b10001001 Data &b01000110 Data &b01000110 Data &b00100110 Data &b00100110 Data &b00011001 Data &b00011001 Data &b00011001 Data &b00011001 Data &b00100110 Data &b00100110 Data &b01000110 Data &b01000110 Data &b10001001 Data &b10001001 Data &b00000001 ' 2 Data &b00000001 Data &b00000010 Data &b00000010 Data &b00000100 Data &b00000100 Data &b00001000 Data &b00001000 Data &b00000001 Data &b00000001 Data &b00000010 Data &b00000010 Data &b00000100 Data &b00000100 Data &b00001000 Data &b00001000 Data &b00001111 '3 Data &b00000111 Data &b00000011 Data &b00000001 Data &b00000000 Data &b00000000 Data &b00000000 Data &b00000000 Data &b00001111 Data &b00000111 Data &b00000011 Data &b00000001 Data &b00001000 Data &b00000100 Data &b00000010 Data &b00000001 Data &b00001000 '4 Data &b00000001 Data &b00000100 Data &b00000010 Data &b00000100 Data &b00000010 Data &b00000100 Data &b00000010 Data &b00000100 Data &b00000010 Data &b00000100 Data &b00000010 Data &b00001000 Data &b00000001 Data &b00000010 Data &b00000100 Data &b00001000 '5 Data &b00000000 Data &b00000100 Data &b00000000 Data &b00000010 Data &b00000000 Data &b00000001 Data &b00000000 Data &b00000001 Data &b00000000 Data &b00000010 Data &b00000000 Data &b00000100 Data &b00000000 Data &b00001000 Data &b00000000 Data &b00001111 '6 Data &b00000000 Data &b00000110 Data &b00000000 Data &b00001111 Data &b00000000 Data &b00000110 Data &b00000000 Data &b00000110 Data &b00000000 Data &b00001001 Data &b00000000 Data &b00000110 Data &b00000000 Data &b00001000 Data &b00000000







Zitieren
Lesezeichen