Wordclock13         

von  Heinz D.                       
Elektronik-Labor  Projekte   AVR   T13-Contest


Mehr als 20 LED kann man an einen Tiny13 nicht anschliessen (Charlieplexing, n*n-n, 5*5-5=20). Die LED in einer Reihe können gleichzeitig leuchten. Zum schnellen scannen sind nur 5 Befehlsgruppen (DDR/Port) erforderlich. So kann das Feld wie ein Bildschirm genutzt werden.



Die mechanische Anordnung der LED kann so zusammengeschoben werden, dass ein rechteckiges Feld entsteht. Die Verdrahtung muss dann aufmerksam erfolgen. Die Widerstände richten sich nach Vcc, LED-Farbe und Helligkeit und betragen dann >=120R bis 1k.

Ohne Quarz läuft die 'Wordclock13' nicht genau. Als Gimmik reicht es, bis die Batterie leer ist. Die Einminuten.Anzeige in Reihe L8 ist noch ungenauer (53,33s), soll nur etwas Leben hinein bringen und kann entfernt werden. In der Interrupt-Routine kann der Wert 'Timer0=12' um je ~1s/5min. plus/minus eingestellt werden.



Die Maske sorgt dafür, dass die Worte nicht 'offen sichtlich' sind. Durch Pappstreifen wird ein überstrahlen verhindert. Mit den Tasten wird die Uhr gestellt.



Die Maske sollte spiegelverkehrt gedruckt werden, sodass außen nur weiß zu sehen ist. Sprüht man die Maske mit Lack, Öl oder Haarspray ein, werden die Zeichen diffus transparent.  Die Vorlage befindet sich auch im Zip:

Download: Wordclock13-bas-hex-bin.zip


' Oster-Contest, Wordclock13, ausser Konkurenz weil zu gross
'
' es geht los mit 10 vor halb eins
'
' die Uhr ist ungenau, kann in ISR justiert werden
'
' o----------o----------o----------o---------o---------------o PB.4
' FÜNF | ZEHN | VOR | NACH | ___ | /
' o--|<|--o o--|<|--o o--|<|--o o--|<|--o o-|___|-o--o o--o +h
' | L16-1 | L16-2 | L16-4 | L16-8 | R4 T4 |
' | o--|-------o--|-------o--|-------o-|-------o-------|-------o PB.3
' | eins | | zwei | | vier | | ___ | | HALB | / |
' o--|<|--o o--|<|--o o--|<|--o o-|___|-o o--|<|--o--o o--o -h
' | L8-1 | L8-2 | L8-4 | R3 | L8-16 T3 |
' | o--|-------o--|-------o--|-------o-|-------o-------|-------o PB.2
' | EINS | | ZWEI | | ___ | | DREI | | VIER | / |
' o--|<|--o o--|<|--o o-|___|-o o--|<|--o o--|<|--o--o o--o +5min
' | L4-1 | L4-2 | R2 | L4-8 | L4-16 T2 |
' | o--|-------o--|-------o--|-------o-|-------o-------|-------o PB.1
' | FÜNF | | ___ | | SECHS | | SIEBEN| | ACHT | / |
' o--|<|--o o-|___|-o o--|<|--o o--|<|--o o--|<|--o--o o--o -5min
' | L2-1 | R1 | L2-4 | L2-8 | L2-16 T1 |
' | o--|-------o--|-------o--|-------o-|-------o-------|-------o PB.0
' | ___ | | NEUN | | ZEHN | | ELF | | ZWÖLF | / | ___
' o-|___|-o o--|<|--o o--|<|--o o--|<|--o o--|<|--o--o o--o-|___|-| GND
' R0 L1-2 L1-4 L1-8 L1-16 T0 >120R
'
' Die LED-Bezeichnung ist 'L port-ddr+'; z.B. L4-2: PortB=4 : DDRB=6 (4+2)
'
' alle LED der unteren Reihe: PortB=1 : DDRB=1+2+4+8+16=31
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat"
$prog &HFF , &H6A , &HFF , &H00
$crystal = 1200000 ' 9,6MHz/8
$hwstack = 8

Config Timer0 = Timer , Prescale = 1024 '1,2MHz / 1024 = 1171,875 Hz
On Ovf0 Int_t0 : Enable Timer0 : Start Timer0 : Enable Interrupts

Dim Minute5 As Byte '* 5 min.
Dim Temp As Byte 'temp
Dim Freq_5hz As Word '4,8Hz
Dim Ddr As Byte 'ddrb
Dim Minute As Byte 'optional 54s

Do 'Hauptprogramm
Main:
Ddrb = 0 : Portb = 31 : Temp = Pinb 'Taste ?
Do : Loop Until Pinb = 31 'warte bis keine Taste
If Temp = 16 Then Minute5 = Minute5 + 1 '+5 min.
If Temp = 8 Then Minute5 = Minute5 -1 '-5 min.
If Temp = 4 Then Minute5 = Minute5 + 12 '+1 stunde
If Temp = 2 Then Minute5 = Minute5 - 12 '-1 stunde
If Minute5 > 143 Then Minute5 = 0 'fehler

'L16-x -------------------------------------------------------------------------
Temp = Minute5 Mod 12 ' rest 0..11*5 Minuten
Ddrb = 0
Select Case Temp
Case 0 : Ddrb = 22 '16+ zehn(+2) vor(+4) (halb)
Case 1 : Ddrb = 21 '16+ fünf(+1) vor(+4) (halb)
' Case 2 : Ddrb = 0 ' (halb)
Case 3 : Ddrb = 25 '16+ fünf(+1) nach(+8) (halb)
Case 4 : Ddrb = 26 '16+ zehn(+2) nach(+8) (halb)
Case 5 : Ddrb = 23 '16+ fünf(+1) zehn(+2) vor(+4)
Case 6 : Ddrb = 22 '16+ zehn(+2) vor(+4)
Case 7 : Ddrb = 21 '16+ fünf(+1) vor(+4)
' Case 8 : Ddrb = 0 ' (voll)
Case 9 : Ddrb = 25 '16+ fünf(+1) nach(+8)
Case 10 : Ddrb = 26 '16+ zehn(+2) nach(+8)
Case 11 : Ddrb = 27 '16+ fünf(+1) zehn(+2) nach(+8)
End Select
Portb = 16 'PB.4
Waitms 1 'helligkeit
Portb = 31 'LED aus

'L8-x --------------------------------------------------------------------------
Ddr = 8
Ddr = Ddr Or Minute
If Minute5 >= 0 Then :
If Minute5 < 5 Then Ddr = Ddr Or 16 : End If 'halb
Ddrb = Ddr
Portb = 8 'PB.3
Waitms 1 'helligkeit
Portb = 31 'LED aus

'L4-x, L2-x, L1-x --------------------------------------------------------------
Temp = Minute5 / 12 'Stunden
Select Case Temp
Case 0 : Ddrb = &B00101 'L4-1
Case 1 : Ddrb = &B00110 'L4-2
Case 2 : Ddrb = &B01100 'L4-8
Case 3 : Ddrb = &B10100 'l4-16
Case 4 : Ddrb = &B00011 'L2-1
Case 5 : Ddrb = &B00110 'L2-4
Case 6 : Ddrb = &B01010 'L2-8
Case 7 : Ddrb = &B10010 'L2-16
Case 8 : Ddrb = &B00011 'L1-2
Case 9 : Ddrb = &B00101 'L1-4
Case 10 : Ddrb = &B01001 'L1-8
Case 11 : Ddrb = &B10001 'L1-16
End Select
Select Case Temp
Case 0 To 3 : Portb = 4 'L4-x
Case 4 To 7 : Portb = 2 'L2-x
Case 8 To 1 : Portb = 2 'L1-x
End Select
Waitms 1 'helligkeit
Loop 'nochmal
'-------------------------------------------------------------------------------
' 9,6MHz / 8 / 1024 = 1171,875Hz = 853,333 us
' * 244 = 208,2133 ms
' * 1440 ~ 299,8272s (Fehler = 0,06%)
Int_t0:
Timer0 = 12 '244=256-12
If Freq_5hz <= 1438 Then '1440 * 0,2s
Freq_5hz = Freq_5hz + 1
Else
Freq_5hz = 0
Minute5 = Minute5 + 1 'nach 5 min. = 300s
End If
Minute = High(freq_5hz) 'optionale anzeige = 53s
Return
' End Program



Elektronik-Labor  Projekte   AVR   T13-Contest