Sparrow-Schachuhr
von Heinz D.
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
'-------------------------------------------------------------------------------