Forum: Mikrocontroller und Digitale Elektronik Atmega16 - Led leuchtet nicht immer gleich stark


von TheChriis (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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'.

von TheChriis (Gast)


Lesenswert?

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
48
49
50
51
 Loop                                                       'Ende Hauptschleife
52
End                                                         'Ende Programm
53
54
'--------------------------------------------------------------------------
55
Auswahl:                                                    'SubProgramm Auswahl
56
  Zahl = Zahl + 1                                           'Der Zahl 1 dazurechnen
57
Return                                                      'Zurück zum Startpunkt

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von TheChriis (Gast)


Lesenswert?

Ahhh.....stimmt!!!! Vielen Dank
Wede es Morgen umänder / ausprobieren

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.