Sparrow-Schachuhr                 

von  Heinz D.                                     
      
Elektronik-Labor  Projekte  AVR  Sparrow  Contest          




Bei diesem Wetter ist man häufiger draußen. Ein Magnetschach passt in die Hosentasche, die normale Schachuhr nicht.  Aus dem Sparrow wird schnell eine kleine Schachuhr.

Bedienung: Nach dem Einschalten oder Erwachen aus Powerdown haben Sie eine Sekunde Zeit eine Spieldauer zu wählen:

keine Taste = max. 5min+5min = Blitzschach, es leuchten dann beide LEDs,
S1 = max. 30min pro Spieler, es leuchtet grün dauerhaft,
S2 = max. 120min+120min = Normal-Schach, die rote Led leuchtet.

Nun wartet der Sparrow auf den Spielbeginn:

Spieler1 tippt S1 und die 'rote' Uhr2 läuft, die eigene 'grüne' Uhr1 wird gestoppt.
Oder Spieler2 tippt auf S2 und die 'grüne' Uhr1 läuft (weiter), die eigene Uhr2 wird gestoppt. 
Die LEDs blinken dann im 2s-Takt. Überschreitet ein Spieler seine Bedenkzeit, dann leuchtet seine Uhr für ~30s dauerhaft.
Danach geht der Sparrow in den Powerdown-Mode.

Durch kurzes oder langes (>1s) tippen auf S1 oder S2 wacht er wieder auf und die Bedenkzeit wird gewählt, wie oben.
Eine Knopfzelle sollte einen Sommer halten.

Download:  Sparrow-Schachuhr-bas-hex.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Schachuhr.html


' Sparrow-Schachuhr
'
' nach Reset/Wakeup:
' ohne Taste=5+5min -> beide Led leuchten
' S1=30+30min -> grüm leuchtet
' S2=120+120min -> rot leuchtet
'
' warten auf Spielbeginn:
' S1= die rote Uhr läuft (blinkt) und die grüne Uhr wird angehalten
' S2= die grüne Uhr läuft (blinkt) und die rote Uhr wird angehalten
'
' wird die Bedenkzeit überschritten, leuchtet die rote/grüne Uhr für 30s dauernd
' um danach in Powerdown zu wechseln.
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16                                               '8
$swstack = 16                                               '4
$framesize = 16                                             '4

Stop Watchdog : Stop Ac : Stop Adc                          'Sprit sparen
Green Alias Portb.1 : Red Alias Portb.3
S1 Alias Pinb.0 : S2 Alias Pinb.2

Mcucr = &B00110010                                          'sleep enable, powerdown enable, pin falling enable
Pcmsk = &B00000101                                          'für PCINT0+PCINT2
Gimsk = &B00100000                                          'PCIE

Config Timer0 = Timer , Prescale = 1 :                      '1,2MHz/256/1 ~4687,5Hz
On Ovf0 Tim0_isr : Enable Timer0 : Enable Interrupts : Start Timer0

Const 1sekunde = 4687
Const 5min = 300                                            'Blitzschach max.300s+300s
Const 30min = 1800                                          '1800s
Const 120min = 7200                                         'normal Schach 7200s

Dim Delayms As Word
Dim Uhr1 As Word
Dim Uhr1max As Word
Dim Uhr2 As Word
Dim Uhr2max As Word
Dim Spieler As Byte

Init:
   Ddrb = &B01010 : Portb = &B00101                         'aux, red, S2, green, S1 : pullup

   Spieler = 0
   Uhr1 = 0
   Uhr2 = 0
   Wait 1                                                   'eine von 3 Zeiten wählen

   If S1 = 0 Then
      Green = 1
      Uhr1max = 30min
      Uhr2max = 30min
   Else
      If S2 = 0 Then
         Red = 1                                            'Normal-Schach
         Uhr1max = 120min
         Uhr2max = 120min
      Else
         Green = 1 : Red = 1                                'Blitzschach
         Uhr1max = 5min
         Uhr2max = 5min
      End If
   End If
   Do : Loop Until S1 = S2                                  'warte auf Taste losgelassen
   Waitms 199                                               'entprellen
   Do : Loop Until S1 <> S2                                 'warte auf Taste Spielbegin
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Begin:
   If S1 = 0 Then                                           'grün stop, rot start
      Green = 0 : Red = 1
      Spieler = 2
      Delayms = 0
   End If

   If S2 = 0 Then                                           'rot stop, grün start
      Red = 0 : Green = 1
      Spieler = 1
      Delayms = 0
   End If

   Do : Loop Until S1 = S2                                  'warte auf Taste losgelassen

   If Spieler = 1 Then
      If Delayms > 1sekunde Then
         Delayms = 0
         Incr Uhr1
         Toggle Green                                       'Uhr läuft
      End If
      If Uhr1 > Uhr1max Then
         Green = 1                                          'verloren
         Goto Schlafein
      End If
   End If

   If Spieler = 2 Then
      If Delayms > 1sekunde Then
         Delayms = 0
         Incr Uhr2
         Toggle Red                                         'Uhr läuft
      End If
      If Uhr2 > Uhr2max Then
         Red = 1                                            'verloren
         Goto Schlafein
      End If
   End If
   Goto Begin
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Schlafein:
   Delayms = 0 : Do : Loop Until Delayms > 65534            '~15s
   Delayms = 0 : Do : Loop Until Delayms > 65534            '~15s

   Portb = 5                                                'pullup für S1+S2
   Ddrb = 0 :                                               'Licht aus
   sleep                                                    'ab ins Bett
   nop                                                      'wach geworden ?
Goto Init
'-------------------------------------------------------------------------------
Tim0_isr:
   Incr Delayms
Return
'-------------------------------------------------------------------------------



Elektronik-Labor  Projekte  AVR  Sparrow Contest