Forum: Mikrocontroller und Digitale Elektronik Lauflichtgeschwindigkeit per Taster ändern


von Chris (Gast)


Lesenswert?

Hallo,
ich habe ein Lauflicht programmiert mit verschiedenen Licht-Modi´s
jetzt möchte ich da noch 2 taster mit einbauen die die geschwindigkeit 
ändern können...
Kann mir dabei jemand helfen ?

Hier mal der Code vom Lauflich:
1
$regfile = ""
2
$crystal = 8000000
3
$hwstack = 32
4
$swstack = 10
5
$framesize = 40
6
'--------------------------------------------------
7
Config Timer0 = Timer , Prescale = 64
8
Config Portb = Output
9
10
11
12
Taster_modi Alias Pind.2
13
Config Taster_modi Alias = Input
14
15
Taster_geschwindigkeit_plus Alias Pind.3
16
Config Taster_geschwindigkeit_plus = Input
17
18
Taster2_geschwindigkeit_minus Alias Pind.4
19
Config Taster2_geschwindigkeit_minus = Input
20
21
Dim Teiler As Byte
22
Dim Status As Byte
23
Dim Modus As Byte
24
25
26
Teiler = 0
27
Status = 1
28
Modus = 0
29
30
Enable Timer0
31
Enable Interrupts
32
33
Portd.2 = 1
34
Portd.3 = 1
35
Portd.4 = 1
36
37
38
39
40
On Ovf0 Tim0_isr
41
42
43
44
45
Do
46
  Debounce Taster_modi , 0 , Incmodus , Sub
47
Loop
48
49
50
' ***************************************************
51
Incmodus:
52
  If Modus < 5 Then
53
    Modus = Modus + 1
54
    Status = 0
55
  End If
56
57
58
  Return
59
60
' ***************************************************
61
Tim0_isr:
62
  Teiler = Teiler + 1
63
  If Teiler > 5 Then
64
    Teiler = 0
65
66
    Status = Status + 1
67
    If Status = 16 Then
68
      Status = 0
69
    End If
70
71
72
'----------------------------------------------------------
73
74
    Elseif Modus = 0 Then
75
      If Status = 0 Then Portb = &B00000000
76
      If Status = 1 Then Portb = &B00000000
77
      If Status = 2 Then Portb = &B00000000
78
      If Status = 3 Then Portb = &B00000000
79
      If Status = 4 Then Portb = &B11111100
80
      If Status = 5 Then Portb = &B11111100
81
      If Status = 6 Then Portb = &B11111100
82
      If Status = 7 Then Portb = &B11111100
83
      If Status = 8 Then Portb = &B11111100
84
      If Status = 9 Then Portb = &B11111100
85
      If Status = 10 Then Portb = &B11111100
86
      If Status = 11 Then Portb = &B00000000
87
      If Status = 12 Then Portb = &B00000000
88
      If Status = 13 Then Portb = &B00000000
89
      If Status = 14 Then Portb = &B00000000
90
      If Status = 15 Then Modus = 2
91
92
'----------------------------------------------------------
93
94
    Elseif Modus = 1 Then
95
      If Status = 0 Then Portb = &B10000000
96
      If Status = 1 Then Portb = &B11000000
97
      If Status = 2 Then Portb = &B11100000
98
      If Status = 3 Then Portb = &B01110000
99
      If Status = 4 Then Portb = &B00111000
100
      If Status = 5 Then Portb = &B00011100
101
      If Status = 6 Then Portb = &B00001100
102
      If Status = 7 Then Portb = &B00000100
103
      If Status = 8 Then Portb = &B00000100
104
      If Status = 9 Then Portb = &B00001100
105
      If Status = 10 Then Portb = &B00011100
106
      If Status = 11 Then Portb = &B00111000
107
      If Status = 12 Then Portb = &B01110000
108
      If Status = 13 Then Portb = &B11100000
109
      If Status = 14 Then Portb = &B11000000
110
      If Status = 15 Then Portb = &B10000000
111
112
'----------------------------------------------------------
113
114
   Elseif Modus = 2 Then
115
      If Status = 0 Then Portb = &B00000000
116
      If Status = 1 Then Portb = &B00110000
117
      If Status = 2 Then Portb = &B01111000
118
      If Status = 3 Then Portb = &B11111100
119
      If Status = 4 Then Portb = &B11001100
120
      If Status = 5 Then Portb = &B10000100
121
      If Status = 6 Then Portb = &B00000000
122
      If Status = 7 Then Portb = &B00000000
123
      If Status = 8 Then Portb = &B00000000
124
      If Status = 9 Then Portb = &B00000000
125
      If Status = 10 Then Portb = &B10000100
126
      If Status = 11 Then Portb = &B11001100
127
      If Status = 12 Then Portb = &B11111100
128
      If Status = 13 Then Portb = &B01111000
129
      If Status = 14 Then Portb = &B00110000
130
      If Status = 15 Then Portb = &B00000000
131
132
'----------------------------------------------------------
133
134
   Elseif Modus = 3 Then
135
       If Status = 0 Then Portb = &B10000000
136
       If Status = 1 Then Portb = &B10000000
137
       If Status = 2 Then Portb = &B11000000
138
       If Status = 3 Then Portb = &B11100000
139
       If Status = 4 Then Portb = &B11110000
140
       If Status = 5 Then Portb = &B11111000
141
       If Status = 6 Then Portb = &B11111100
142
       If Status = 7 Then Portb = &B11111100
143
       If Status = 8 Then Portb = &B11111100
144
       If Status = 9 Then Portb = &B11111100
145
      If Status = 10 Then Portb = &B11111000
146
      If Status = 11 Then Portb = &B11110000
147
      If Status = 12 Then Portb = &B11100000
148
      If Status = 13 Then Portb = &B11000000
149
      If Status = 14 Then Portb = &B10000000
150
      If Status = 15 Then Portb = &B10000000
151
152
'----------------------------------------------------------
153
154
   Elseif Modus = 4 Then
155
      If Status = 0 Then Portb = &B00000000
156
      If Status = 1 Then Portb = &B11100000
157
      If Status = 2 Then Portb = &B00000000
158
      If Status = 3 Then Portb = &B11100000
159
      If Status = 4 Then Portb = &B00000000
160
      If Status = 5 Then Portb = &B00011100
161
      If Status = 6 Then Portb = &B00000000
162
      If Status = 7 Then Portb = &B00011100
163
      If Status = 8 Then Portb = &B00000000
164
      If Status = 9 Then Portb = &B11100000
165
      If Status = 10 Then Portb = &B00000000
166
      If Status = 11 Then Portb = &B11100000
167
      If Status = 12 Then Portb = &B00000000
168
      If Status = 13 Then Portb = &B00011100
169
      If Status = 14 Then Portb = &B00000000
170
      If Status = 15 Then Portb = &B00011100
171
172
'----------------------------------------------------------
173
174
175
176
177
178
    Elseif Modus = 5 Then
179
      Modus = 0
180
181
    End If
182
183
184
  End If
185
186
187
  Return
188
189
190
191
End


Wie schaffe ich es da jetzt die geschwindigkeit hoch oder runter zu 
setzen ?

Gruß
Chris

von Karl H. (kbuchegg)


Lesenswert?

>   Teiler = Teiler + 1
>   If Teiler > 5 Then

Dazu machst du hier den Grenzwert (die 5), ab wann du dein Lauflicht um 
1 Stelle weiterschaltest variabel und veränderst damit die 
Geschwindigkeit. Und diesen Grenzwert erhöhst/verringerst du mit dem 
Tastendruck

Momentan regeln bei dir die 5 die Geschwindigkeit des Lauflichtes. Wenn 
du die 5 durch 10 ersetzt, läuft dein Lauflicht langsamer. Ersetzt du 
sie durch 2, dann läuft es schneller. Setzt du anstelle einer fixen Zahl 
eine Variable ein, kannst du daher mit dieser Variablen die 
Geschwindigkeit einstellen.

von Chris (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Lass den Timer schneller laufen

also den Prescale erhöhen ?

und wie stell ich das mit der variabel an ?

von Chris (Gast)


Lesenswert?

Ok, das mit der fixen zahl hab ich verstanden...

aber wie mach ich das nun zu ner variabel ?

von Chris (Gast)


Lesenswert?

1
Dim Var1 As Byte
2
3
Var1 = 5
4
5
6
---------------------
7
8
Debounce Taster_geschwindigkeit_plus , 0 , Decmodus1 , Sub
9
10
Decmodus1:
11
          Var1 + 1
12
  Return
13
14
15
Debounce Taster_geschwindigkeit_minus , 0 , Decmodus2 , Sub
16
17
Decmodus2:
18
          Var1 - 1
19
  Return
20
21
22
23
Tim0_isr:
24
  Teiler = Var1

so etwa ?

von Karl H. (kbuchegg)


Lesenswert?

Chris schrieb:

> so etwa ?

Nenn die Variable aber nicht Var1.
Die Bedeutung des Wertes in dieser Variablen ist die 'Geschwindigkeit'. 
ALso solltest du die Variable auch irgendwie so nennen. 'Speed' wäre zb 
ein schön kurzer Begriff.


Du hast ja eine andere Variable ja auch 'Modus' genannt und nicht Var5

von Chris (Gast)


Lesenswert?

ok....das ja kein problem :)

aber der rest würde so stimmen ?

von Karl H. (kbuchegg)


Lesenswert?

Chris schrieb:
> ok....das ja kein problem :)
>
> aber der rest würde so stimmen ?

Na ja
Du hast es ja nur skizziert und von der Grundidee sind das ja 
überachaubare Änderungen :-)

Wie heißt es so schön: Versuch macht Kluch.

von Karl H. (kbuchegg)


Lesenswert?

Halt, Kommando retour

Was soll das denn sein?
1
Tim0_isr:
2
  Teiler = Var1


geplant war doch den Grenzwert zu verändern, ab wann ein Teilerwert zur 
Weiterschaltung des Lauflichts führt
1
Tim0_isr:
2
  Teiler = Teiler + 1
3
4
  If Teiler > Var1 Then
5
    Teiler = 0
6
7
    ....

von Chris (Gast)


Lesenswert?

Klasse antwort....
jetzt bin ich schlauer...

man findet im netz nix dazu... :-(
nur wie man das mit nem poti machen kann...aber das will ich nicht

von Chris (Gast)


Lesenswert?

Ok...

und wie sieht es mit dem ansatz der tastern aus ???
stimmte das wenigstens so ?

von Karl H. (kbuchegg)


Lesenswert?

Chris schrieb:
> Klasse antwort....
> jetzt bin ich schlauer...

Weißt du.

Ich denke mir: Du hast doch den anderen Taster auch alleine eingebaut 
und mit dem die Modusumschaltung gemacht.

Wenn das jetzt das große Totschlag-Problem für dich ist in die 
Hauptschleife noch 2 Tasterabfragen mit einzubauen, ...
1
Do
2
  Debounce Taster_modi , 0 , Incmodus , Sub
3
  Debounce Taster_geschwindigkeit_plus , 0 , IncSpeed , Sub
4
  Debounce Taster_geschwindigkeit_minus , 0 , DecSpeed , Sub
5
Loop
... dann muss ich davon ausgehen, dass das "Ich habe dieses Programm 
..." (mit der Betonung auf ICH)  ganz einfach gelogen war.

von Chris (Gast)


Lesenswert?

Es war nicht gelogen...
ich hab aber nirgendwo geschrieben, das ich das alleine programmiert 
habe...ich hatte dabei hilfe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.