- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: LED Dimmen per Software | Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.03.2008
    Ort
    Leipzig
    Beiträge
    33

    LED Dimmen per Software | Problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich möchte gerne 1 LED per Software dimmen. Per Hardware ist nicht möglich weil die Ports schon belegt sind.

    Ich wollte das ganze mit einen Timer machen.

    So weit bin ich schon gekommen:

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 14745600
    $baud = 9600
    
    Config Portc.7 = Output
    led Alias Portc.7
    
    '#####Timer############
    
    Config Timer1 = Timer , Prescale = 8
    On Timer1 Int_timer1
    
    Const Timervorgabe = 47104 ' 100 Hz
    
    Enable Timer1
    Enable Interrupts
    
    Timer1 = Timervorgabe
    
    Do
    
    Loop
    
    
    Int_timer1:
    
         Timer1 = Timervorgabe
         Toggle led
    
    Return
    
    End
    Wie muss ich den Code so erweitern das die LED dynamisch von hell zu dunkel und umgekehrt leuchtet?

    Ich würde mich freuen wenn mir einer weiter helfen kann.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113

    Re: LED Dimmen per Software | Problem

    Hallo,
    probier es mal so:
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 14745600
    $baud = 9600
    
    Config Portc.7 = Output
    led Alias Portc.7
    
    '#####Timer############
    
    Config Timer1 = Timer , Prescale = 8
    On Timer1 Int_timer1
    
    Const Timervorgabe = 65352 ' ~10 KHz
    Dim Schwellwert As Byte, Level As Byte, Offset As Byte
    Schwellwert=0
    Offset=1
    
    Enable Timer1
    Enable Interrupts
    
    Timer1 = Timervorgabe
    
    Do
    
    Loop
    
    
    Int_timer1:
    
         Timer1 = Timervorgabe
         Incr Level
         If Level=0 Then                                      'Level läuft etwa 40 mal je Sekunde über, dann wird Schwellwert angepasst
            Schwellwert=Schwellwert+Offset
            If Schwellwert=255 Then Offset=-1
            If Schwellwert=0 Then Offset=1
         Endif
         If Level>Schwellwert Then 
            Set Led
         Else 
            Reset Led
         Endif
    
    Return
    
    End
    Weder compiliert noch getestet.
    Sollte in etwa 6 Sekunden von ganz hell nach aus wechseln und umgekehrt.

    Gruß

    Rolf

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.03.2008
    Ort
    Leipzig
    Beiträge
    33
    Danke für die schnelle Antwort.

    Ich habe es gleich getestet, es funktioniert auch so weit nur leider flackert die Lampe stark. Kann man das noch irgendwie unterbinden?

    //EDIT

    Hab jetzt einfach mal die Timervorgabe auf 65522 gestellt jetzt flackert die LED nicht mehr.

    Kann man jetzt noch einstellen das die LED nicht so schnell gedimmt wird? Also das ein Durchlauf ungefähr 30sek dauert?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    17.03.2008
    Ort
    Leipzig
    Beiträge
    33
    Kann man das Programm so erweitern das man eine Variable definiert kann zwischen 0% und 100% und dadurch die LED so gedimmt wird?


    //EDIT

    Ich habe es jetzt so gemacht, ich hoffe das dies nicht so sehr das Hauptprogramm beeinflusst.

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 14745600
    $baud = 9600
    
    Config Portc.7 = Output
    
    Config Timer1 = Timer , Prescale = 1
    Enable Timer1
    On Timer1 Timer1_int
    Enable Interrupts
    
    Timer1 = 65530
    
    Dim Zaehler As Byte                                         '<- wichtig, dass es byte ist
    Dim Trigger As Byte
    Dim Taste As Byte
    
    Trigger = 0
    
    Do
    Taste = Inkey()
    
    If Taste > 0 Then
        Select Case Taste
          Case 43                                               'Das ist der ASCII Code für Taste +
             Trigger = Trigger + 1
             Print Trigger
    
          Case 45                                               'Das ist der ASCII Code für Taste -
             Trigger = Trigger - 1
             Print Trigger
    
       End Select
    End If
    
    Loop
    
    Timer1_int:
       Timer1 = 65530
    
       If Zaehler > Trigger Then
             Set Portc.7
          Else
             Reset Portc.7
          End If
    
       Zaehler = Zaehler + 1
    
    Return

Berechtigungen

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

Labornetzteil AliExpress