- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: Spiel-Board

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    48
    Beiträge
    851

    Spiel-Board

    Anzeige

    Praxistest und DIY Projekte
    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:

    Code:
    $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
    Grüße Wolfgang

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Schönes Projekt!
    Wie lange hast du dafür gebrauchst (Std.)?
    Dass man so etwas auf die schnelle basteln kann... Hätte ich nie gedacht.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    48
    Beiträge
    851
    Hi Jon,

    hab das am Sonntag gebaut. Dachte ien kleiner 2313 ist da ganz nett und ausreichend für den Job. Glaub von Mittag bis Nachts ca. 22:00 hab ich gebastelt, dann wars soweit fertig. AVR auf Streifenraster und auch alles andere. Ätzen war mir dafür zu langwierig und nicht nötig. Die Platine misst nun ca. 30x40mm und passt in ein kleines Platikgehäuse das ich auch auf das Brett geschraubt habe.


    Grüße Wolfgang

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.01.2005
    Ort
    Bayern
    Alter
    35
    Beiträge
    161
    das hast du aber schön zusammengewieselt
    (-_-)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    09.12.2006
    Alter
    32
    Beiträge
    84
    Wie viele Kontakte hatte den der Festplattenmotor und wie hast die ihn angesteuert?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    48
    Beiträge
    851
    Den Motor steure ich mit den drei Phasen mit eionem gedoppelten Ausgang eines ULN2003 an mit gemeinsamem Widerstand (22 Ohm) gegen Plus.

    So siehts aus: http://www.mds-5.de/temp/RMOV0859.AVI

    Es gab allerdings zwischenzeitlich in den Tests auch einen "toten" ULN2003, der ist komplett abgebrannt (Strangwiderstand bei ca. 0,8Ohm).

    Bild hier  
    Bild hier  

    hier noch vom ersten Aufbau ein Foto mit dem Motor ohne Mini-CD aufmontiert:

    Bild hier  

    Grüße Wolfgang

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus