-         

Ergebnis 1 bis 7 von 7

Thema: LED AN/AUS Programm funktioniert nicht.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263

    LED AN/AUS Programm funktioniert nicht.

    Anzeige

    Hallo,
    Ich habe zum Testen mal ein Programm für mein ATMega16 geschrieben:
    Code:
    Ddra = &B0000010
    Porta = &B0000001  
    
    Dim Zustand As Bit
    Zustand = 0
    Do
     If Pina.0 = 0 Then                       'Wenn Taster gedrückt den Zustand Invertieren
                   Toggle Zustand
      End If
    
    If Zustand = 1 Then                    'Wenn Zustand = 1 LED an, ansonsten LED aus
    
                   Porta.1 = 1
    Else
     Porta.1 = 0
    End If
    
    Loop

    Das Programm soll die LED mit nach Tastendruck so lange zum leuchten Bringen bis ein erneuter Tastendruck erfolgt.
    Funktioniert soweit auch, allerdings sehr schlecht, da:

    -Die LED beim gedrücktgehaltenen Taster dunkel leuchtet
    - Das ganze nur manchmal funktioniert weil die LED nach dem Tastendruck wieder ausgeht.
    -Die LED beim ein und aus gehen den Anschein erweckt als sei sie mit einer PWM gedimmt, die geht also nicht sofort aus bzw an.

    Hat jemand ne Ahnung wieso das nicht richtig funktioniert?

    Gibt es vielleicht irgendwo ein fertiges "Memory Programm"??

    Im Voraus bedankt sich,

    Alex

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.07.2006
    Alter
    24
    Beiträge
    138
    1. liegt daran, weil der Tastendruck der LED Strom wegnimmt, Abhilfe schafft ein stärkeres Netzteil.
    2. liegt daran, dass du den Taster nicht entprellt hast, das bedeutet, der Kontakt des Tasters prellt auf den anderen Kontakt, und so bekommt der AVR statt einer huntderte Flanken. Dazu findest du bestimmt im RN-Board und -Wissen und bei Google einiges.
    3. liegt glaube ich auch an der fehlen den Entprellung.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    <<<Mist geschrieben und wieder gelöscht... ich sollte ins Bett gehen>>>

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Hallo,

    Das mit der LED liegt nicht an der Spannung, die ist Konstant bei 4,97V
    Ich habe mal einen Hallsensor angeschlossen, damit funktioniert es auch nicht besser (Die sind doch Prellfrei??)
    Müsste ich dann den Tastendruck als solchen (Pina.0 = 0) durch die Bedingung dass er eine Mindestzeit gedrückt sein muss (zb 5ms) ersetzen??
    Damit köntne man ja die Prellung unmgehen?

    Ichv ermute eher dass es an dem sporadischem Programm liegt.

    Edit: @uwegw In der Tat..

    Gruss

    Alex

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    Mal schnell zusammengeklatscht:

    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    
    Ddra = &B0000010
    Porta = &B0000001
    
    Do
    Debounce Pina.0 , 1 , Label
    
    Label:
    Toggle Porta.1
    loop
    PinA.1 wird entprellt und sobald der Taster gedrück wurde (=High) springt das Programm zum Label und geht durch den Loop zurück zum Debounce

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Hallo,
    Danke für den Tip.
    Wusste nicht dass man den Pin automatisch entprellen kann.
    Funktioniert aber trotzdem nicht wesentlich besser
    Sonst noch jemand eine Idee?
    Es soll später eine Prozedur an und aus geschaltet werden (mehrere LEDs sollen blinken) und nicht bloß der LED Ausgang Invertiert werden.


    Gruss

    Alex

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Hallo,
    folgendes Programm funktioniert jetzt:
    Code:
    Ddra = &B0000010
    Porta = &B0000011
    
    
    Dim Zustand As Bit
    Dim Vorher As Bit
    Debounce Pina.0 , 1 , Label
    Debounce Pina.0 , 0 , Label
    Config Debounce = 25
    Porta.1 = 0
    Zustand = 0
    
    Label:
    Do
    
     If Pina.0 = 0 Then
    
                   If Zustand = 0 Then
                                  Toggle Porta.1
                                  Zustand = 1
    
                   End If
     Else
     Zustand = 0
     End If
    
    Loop
    End
    Gruss

    Alex

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •