Hallo
Ich habe eine Frage. Ich habe ein ATMega 16 mit Bascom progrmmiert. Wenn
ein Taster gedrückt wird, wird ein grünes Led eingeschalten, durch
nochmaliges drücken das gelbe und danach das rot Led.
inetwa so (habe den Code gerade nicht zur Hand):
debounce taster,0,Zahl, sub
If I = 1 then Led grün=1
If I = 2 then Led grün,gelb=1
If I =3 then Led grün,gelb,rot=1
Zahl:
I=I+1
return
Theoretisch sollte ja das grüne Led immer schön hell leuchten. Das Led
wird ja 3 mal "neu" eingeschaltet. Jedoch leuchtet das grüne Led erst
richtig hell (wie normal) wenn das gelbe und rote Led auch eingeschaltet
ist. Das genau gleiche mit dem gelben. Das leuchtet auch nur in voller
Leuchtstärke wenn auch das rote brennt.....
Vom Pin der Led's habe ich einen Transistortreinber eingelötet.
Betrieben wird das ganze mit 5V.
Kann mir jemand erklären warum das so ist?!??
Vielen dank
TheChriis schrieb:> inetwa so (habe den Code gerade nicht zur Hand):
Bitte nicht 'inetwa Code' ....
>> debounce taster,0,Zahl, sub>> If I = 1 then Led grün=1> If I = 2 then Led grün,gelb=1> If I =3 then Led grün,gelb,rot=1>>> Zahl:> I=I+1> return
... denn dieser Code ist ziemlicher Nonsense. Es kommt immer auf die
Details an und die sieht man in 'inetwa-Code' nun mal nicht.
PS: Es heißt 'die' Led.
Led steht für 'light emitting diode' oder auf deutsch 'licht
emittierende Diode'. Und der korrekte Artikel für Diode ist nun mal
'die' und nicht 'das'.
Okey hier ist der richtige Code. Es ist nur ein ausschnitt des
Programmes.
Und oben habe ich mich noch verschrieben ,denn es ist ein Atmega 8 nicht
16!
1
Starten:
2
Do ' Hauptschleife
3
4
Debounce Taster_auswahl , 0 , Auswahl , Sub
5
Debounce Taster_start , 0 , Start_programm , Sub
6
Debounce Taster_auf , 0 , Aufsteigen , Sub
7
Debounce Taster_ab , 0 , Absteigen , Sub
8
9
10
If Zahl = 1 Then 'Wenn Zahl = 1 dann
11
Set Ledgruen
12
Set Ledgruengross
13
'Ledgruen an
14
Else 'oder
15
Reset Ledgruen
16
Reset Ledgruengross 'Ledgruen aus
17
End If
18
19
If Zahl = 2 Then 'Wenn Zahl = 2 dann
20
Set Ledgruen 'ledgruen und Ledgelb an
21
Set Ledgruengross
22
Set Ledgelb
23
Set Ledgelbgross
24
Else 'Ledgrün und Ledgelb aus
25
Reset Ledgruen
26
Reset Ledgruengross
27
Reset Ledgelb
28
Reset Ledgelbgross
29
End If
30
31
If Zahl = 3 Then 'wenn Zahl = 3 dann
32
Set Ledgruen
33
Set Ledgruengross ' Ledgrün, Ledgelb und Ledrot an
34
Set Ledgelb
35
Set Ledgelbgross
36
Set Ledrot
37
Set Ledrotgross
38
Else
39
Reset Ledgruen
40
Reset Ledgruengross 'Ledgrün, Ledgelb, Ledrot aus
41
Reset Ledgelb
42
Reset Ledgelbgross
43
Reset Ledrot
44
Reset Ledrotgross
45
End If
46
47
If Zahl = 4 Then Zahl = 0 ' Wenn Zahl = 4 dann Zahl = 0
Es spielt keine Rolle welches grüne Led (ob ledgruen oder
ledgruengross). Sie verhalten sich gleich.
Sry. Ich dachte es heisst das Led. Nunja man lernt nie aus!
TheChriis schrieb:> Okey hier ist der richtige Code. Es ist nur ein ausschnitt des> Programmes.
Dachte ich mirs doch
> If Zahl = 1 Then 'Wenn Zahl => 1 dann> Set Ledgruen> Set Ledgruengross> 'Ledgruen an> Else 'oder> Reset Ledgruen> Reset Ledgruengross 'Ledgruen> aus> End If
Wenn Zahl 2 ist, dann wird hier das else ausgeführt. Das bedeutet aber
auch, dass die LED jedesmal ausgeschaltet wird. Um dann kurz darauf vom
IF Zahl = 2 wieder eingeschaltet zu werden. Deine Led leuchtet nicht
dunkler, sie blinkt sehr schnell. Und das sieht man dann eben.
Du musst deine Strategie ändern:
Welche LED muss eingeschaltet werden, wenn Zahl gleich 1 ist? Welche
muss ausgeschaltet werden? Du musst hier ohne else auskommen. Wohl aber
kannst du ELSEIF sinnvoll nutzen.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.