Hallo,
möchte dieses kleine Projekt noch in BASCOM fertig bekommen und dann auf
C umsteigen. Aber nun zu meinem eigentlichen Problem. Ich möchte mir
einen kleinen Küchentimer bauen. Gesteuert von einem Attiny2313 mit 20
LEDs die mit Charlieplexing angesteuert werden.
Mein Code bis jetzt ist so:
1 | $regfile = "attiny2313.dat"
|
2 | $hwstack = 32
|
3 | $swstack = 32
|
4 | $crystal = 8000000
|
5 | $baud = 9600 ' nur für DEBUG
|
6 |
|
7 |
|
8 | '////Variablen deklarieren\\\\
|
9 | Dim Steps As Byte
|
10 | Dim Tmp As Byte
|
11 | Dim Tmp1 As Byte
|
12 | Dim Lights As Long
|
13 | Dim Atime as Byte
|
14 |
|
15 |
|
16 | '////Timer konfigurieren\\\\
|
17 | Config Timer0 = Timer , Prescale = 8
|
18 | On Timer0 Charlieplexing
|
19 |
|
20 | Enable Timer0
|
21 | Enable Interrupts
|
22 |
|
23 |
|
24 | '////Taster deklarieren\\\\
|
25 | T1 Alias Pind.3
|
26 | Config Portd.3 = Input
|
27 | Portd.3 = 1 'interner Pullup aktiv
|
28 |
|
29 | T2 Alias Pind.4
|
30 | Config Portd.4 = Input
|
31 | Portd.4 = 1 'interner Pullup aktiv
|
32 |
|
33 | T3 Alias Pind.5
|
34 | Config Portd.5 = Input
|
35 | Portd.5 = 1 'interner Pullup aktiv
|
36 |
|
37 |
|
38 | '////Variablen initialisieren\\\\
|
39 | Lights = &B0001
|
40 | Atime = 1
|
41 |
|
42 |
|
43 | '////Hauptprogramm\\\\
|
44 | Do
|
45 |
|
46 |
|
47 | If T1 = 0 Then
|
48 | Do
|
49 | 'nichts tun bis Taster wieder losgelassen wird
|
50 | Loop Until T1 = 1
|
51 | Atime = Atime + 1
|
52 | If Atime = 100 Then Atime = 1
|
53 | Lights = Lookup(Atime , Numbers)
|
54 | End If
|
55 |
|
56 |
|
57 | Loop
|
58 |
|
59 |
|
60 | '////Timer für Charlieplexing\\\\
|
61 | Charlieplexing:
|
62 | Portb = &B00000000
|
63 | Tmp1 = 0
|
64 | Tmp1.steps = 1
|
65 | Tmp = Tmp1
|
66 | Select Case Steps
|
67 | Case 0:
|
68 | Tmp.1 = Lights.0
|
69 | Tmp.2 = Lights.2
|
70 | Tmp.3 = Lights.4
|
71 | Tmp.4 = Lights.6
|
72 | Case 1:
|
73 | Tmp.0 = Lights.1
|
74 | Tmp.2 = Lights.8
|
75 | Tmp.3 = Lights.10
|
76 | Tmp.4 = Lights.12
|
77 | Case 2:
|
78 | Tmp.0 = Lights.3
|
79 | Tmp.1 = Lights.9
|
80 | Tmp.3 = Lights.14
|
81 | Tmp.4 = Lights.16
|
82 | Case 3:
|
83 | Tmp.0 = Lights.5
|
84 | Tmp.1 = Lights.11
|
85 | Tmp.2 = Lights.15
|
86 | Tmp.4 = Lights.18
|
87 | Case 4:
|
88 | Tmp.0 = Lights.7
|
89 | Tmp.1 = Lights.13
|
90 | Tmp.2 = Lights.17
|
91 | Tmp.3 = Lights.19
|
92 | End Select
|
93 | Ddrb = Tmp
|
94 | Portb = Tmp1
|
95 | If Steps = 4 Then
|
96 | Steps = 0
|
97 | Else
|
98 | Incr Steps
|
99 | End If
|
100 | Return
|
101 |
|
102 | End
|
103 |
|
104 |
|
105 | '////Bytemuster für Zahlen\\\\
|
106 | Numbers:
|
107 |
|
108 | Data &B00000010000000000000 '1
|
109 | Data &B00001000100000000000 '2
|
110 | Data &B00001010100000000000 '3
|
111 | Data &B00101000101000000000 '4
|
112 | Data &B00101010101000000000 '5
|
113 | Data &B00111000111000000000 '6
|
114 | Data &B00111010111000000000 '7
|
115 | Data &B00111101111000000000 '8
|
116 | Data &B00111111111000000000 '9
|
117 | Data &B00000000000000000000 '0
|
118 | Data &B00000000000000010000 '10
|
119 | Data &B00000000000001000100 '20
|
120 | Data &B00000000000001010100 '30
|
121 | Data &B00000000000101000101 '40
|
122 | Data &B00000000000101010101 '50
|
123 | Data &B00000000000111000111 '60
|
124 | Data &B00000000000111010111 '70
|
125 | Data &B00000000000111101111 '80
|
126 | Data &B00000000000111111111 '90
|
Die LEDs sollen dann nach dem Bytemuster aufleuchten. Möchte dann bei
zum Beispiel 44 das Bytemuster 40 und 4 addieren und dann ausgeben. Mein
Problem ist jedoch, dass BASCOM was anderes aus der Tabelle holt, als
ich möchte.
Wenn ich schreibe Lookup(0, Numbers) dann leuchtet auch eine LED, wie es
sein soll. Wenn ich jedoch Lookup(1, Numbers) schreibe, dann leuchten
nicht 2 LEDs sondern 5 LEDs.
Wollte einfach mal nachfragen, vielleicht hab ich irgendwo einen groben
Schnitzer drin und sehe ihn nicht. ;)