'Titel : BerlinUhr
'Name : BerlinUhr.bas
'Autor : Arno Schweißinger
'Datum : 18.04.2009
'MicroController : AtMega16 1MHz interner Takt
'Compiler : Bascom
'Hardware : Viele LEDs 7 rote und 16 grüne eine gelbe
' Quarz 32768Hz an Pin TOSC1/2
' 3x 74HC374, 24 x 100 Ohm
'Stromversorgung: : 5V für Logik und LEDs
'Besonderes : RC5-IR zum Zeitstellen
Hier das Original am Europacenter.
Die Schaltung habe ich auf einer Lochrasterplatine 160mm x 100mm aufgebaut.
Die drei ICs 74HC374(8 Bit D-Zwischenspeicher) sind noch nicht gesteckt.
Die Platine ist mit Kupferlackdraht von 0.3mm Stärke verdrahtet.
Der Lautsprecher ist für das Stundensignal. Über den IR-Empfänger wird die Uhrzeit gestellt.
Das ist einfacher, als mühsam die Zeit über zwei Taster zu stellen.
Verdrahtung der LEDs
Skizze der Anschlussbelegung.
Achtung: In der Schaltung ist der ATMega16 und nicht wie geplant der ATMega8.
Die Ports und Beschaltung muss angepasst werden!
Dim I AsByte
' Dim J As Byte ' Zählschleife Dim Led_sec AsByte , Led_min AsByte , Led_hour AsByte Dim Temp AsByte Dim Port AsByte , Led AsByte Dim Address AsByte , Command AsByte 'reserve space for variables Dim S AsString * 1 ' sendecode Dim Zeit AsString * 8 Dim Datum AsString * 8 Dim Togglebit AsBit Dim Togglealt AsBit Date$ = "26.11.07" Time$ = "00:00:01"
Sub Led_updat If _sec = 0 Then If _min = 0 Then If _hour = 0 ThenCall Led_stunden_aus Call Led_minuten_aus EndIf EndIf
Porta = 0
Temp = Led_sec And 1 If Temp = 1 ThenSet Porta.0 ' LED im zwei Sekundentakt
Temp = Led_min / 5 If Temp > 10 ThenSet Porta.7 ' LED Minuten If Temp > 09 ThenSet Porta.6 If Temp > 08 ThenSet Porta.5
Temp = Temp * 5
Temp = Led_min - Temp If Temp > 3 ThenSet Porta.4 ' LED 5er Minuten If Temp > 2 ThenSet Porta.3 If Temp > 1 ThenSet Porta.2 If Temp > 0 ThenSet Porta.1
Set Portb.0 Waitus 10 Reset Portb.0
Porta = 0
Temp = Led_min / 5 If Temp > 7 ThenSet Porta.7 ' LED 5er Minuten If Temp > 6 ThenSet Porta.6 If Temp > 5 ThenSet Porta.5 If Temp > 4 ThenSet Porta.4 If Temp > 3 ThenSet Porta.3 If Temp > 2 ThenSet Porta.2 If Temp > 1 ThenSet Porta.1 If Temp > 0 ThenSet Porta.0
Set Portb.1 Waitus 10 Reset Portb.1
Porta = 0
Temp = Led_hour / 5 If Temp > 3 ThenSet Porta.7 ' LED 5er Stunden If Temp > 2 ThenSet Porta.6 If Temp > 1 ThenSet Porta.5 If Temp > 0 ThenSet Porta.4
Temp = Temp * 5
Temp = Led_hour - Temp If Temp > 3 ThenSet Porta.3 If Temp > 2 ThenSet Porta.2 ' LED 1er Stunden If Temp > 1 ThenSet Porta.1 If Temp > 0 ThenSet Porta.0
Set Portb.2 Waitus 10 Reset Portb.2
EndSub
Sub Stundensignal If _sec = 0 Then If _min = 0 Then
' Sound Soundpin , 80 , 400 Sound Soundpin , 30 , 400 Waitms 500 EndIf EndIf EndSub
Sub Zeitstellen
Led_sec = 1 For I = 0 To 05 Step 5
Led_min = I Call Led_updat Getrc5(address , Command) If Command <> 0 ThenExitFor ' Timeout Next I
If Command = 0 ThenExitSub ' Eingabe Stunden Minuten
Zeit = "" For I = 1 To 4
Togglealt = Togglebit While Togglealt = Togglebit Gosub Getziffer Wend Sound Soundpin , 10 , 40 ' Bereitschaftston Call Bestaetigung
Zeit = Zeit + S If I = 2 Then Zeit = Zeit + ":" Next I
Zeit = Zeit + ":00" Time$ = Zeit EndSub
Sub Getziffer Do Getrc5(address , Command) If Address <> 255 Then If Command > 127 Then ' bx0000000 (Bit 7)
Togglebit = 1 ' Togglebit merken Else
Togglebit = 0 EndIf
Command = Command And &B00111111 ' clear the toggle bit
S = Lookupstr(command , Asciidaten ) EndIf
Temp = Asc(s) If Temp > &H2F Then If Temp < &H3A ThenExitDo EndIf Loop EndSub
Sub Led_lauflicht Restore Lauflicht
Porta = 0 ' alle LEDs aus
Portb = 7 Waitus 1
Portb = 0 For I = 1 To 24 ' Lauflicht Read Port ' Port Read Led ' LED Call Set_led Next I EndSub
Sub Led_stunden_aus
Port = 2
Led = 127 Call Set_led
Led = 63 Call Set_led
Led = 31 Call Set_led
Led = 15 Call Set_led
Led = 7 Call Set_led
Led = 3 Call Set_led
Led = 1 Call Set_led
Led = 0 Call Set_led EndSub
Sub Led_minuten_aus
Port = 0
Led = 126 Call Set_led
Led = 62 Call Set_led
Led = 30 Call Set_led
Port = 1
Led = 127 Call Set_led
Led = 63 Call Set_led
Led = 31 Call Set_led
Led = 15 Call Set_led
Led = 7 Call Set_led
Led = 3 Call Set_led
Led = 1 Call Set_led
Led = 0 Call Set_led
Port = 0
Led = 14 Call Set_led
Led = 6 Call Set_led
Led = 2 Call Set_led
Led = 0 Call Set_led EndSub
Sub Set_led
Porta = Led Set Portb.port Waitms 100 Reset Portb.port EndSub
Lauflicht: Data 0 , 2 Data 0 , 6 Data 0 , 14 Data 0 , 30 Data 1 , 1 Data 1 , 3 Data 1 , 7 Data 1 , 15 Data 1 , 31 Data 1 , 63 Data 1 , 127 Data 1 , 255 Data 0 , 62 Data 0 , 126 Data 0 , 254 Data 2 , 1 Data 2 , 3 Data 2 , 7 Data 2 , 15 Data 2 , 31 Data 2 , 63 Data 2 , 127 Data 2 , 255 Data 0 , 255