www.mikrocontroller.net

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


Autor: TheChriis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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'.

Autor: TheChriis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
Starten:
 Do                                                         ' Hauptschleife

  Debounce Taster_auswahl , 0 , Auswahl , Sub
  Debounce Taster_start , 0 , Start_programm , Sub
  Debounce Taster_auf , 0 , Aufsteigen , Sub
  Debounce Taster_ab , 0 , Absteigen , Sub


  If Zahl = 1 Then                                          'Wenn Zahl = 1 dann
    Set Ledgruen
    Set Ledgruengross
                                      'Ledgruen an
  Else                                                      'oder
    Reset Ledgruen
    Reset Ledgruengross                                     'Ledgruen aus
  End If

  If Zahl = 2 Then                                          'Wenn Zahl = 2 dann
    Set Ledgruen                                            'ledgruen und Ledgelb an
    Set Ledgruengross
    Set Ledgelb
    Set Ledgelbgross
    Else                                                    'Ledgrün und Ledgelb aus
    Reset Ledgruen
    Reset Ledgruengross
    Reset Ledgelb
    Reset Ledgelbgross
  End If

  If Zahl = 3 Then                                          'wenn Zahl = 3 dann
    Set Ledgruen
    Set Ledgruengross                                       ' Ledgrün, Ledgelb und Ledrot an
    Set Ledgelb
    Set Ledgelbgross
    Set Ledrot
    Set Ledrotgross
  Else
    Reset Ledgruen
    Reset Ledgruengross                                     'Ledgrün, Ledgelb, Ledrot aus
    Reset Ledgelb
    Reset Ledgelbgross
    Reset Ledrot
    Reset Ledrotgross
  End If

  If Zahl = 4 Then Zahl = 0                                 ' Wenn Zahl = 4 dann Zahl = 0



 Loop                                                       'Ende Hauptschleife
End                                                         'Ende Programm

'--------------------------------------------------------------------------
Auswahl:                                                    'SubProgramm Auswahl
  Zahl = Zahl + 1                                           'Der Zahl 1 dazurechnen
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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TheChriis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhh.....stimmt!!!! Vielen Dank
Wede es Morgen umänder / ausprobieren

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.