- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 34

Thema: Eine RGB-Led und ein AtTiny13

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Das hier:

    Code:
    If Modus = 0 Then
          If State = 0 Then
             Incr C_r
             Decr C_b
             If C_r = 255 Then State = 1
          End If
          If State = 1 Then
             Decr C_r
             Incr C_g
             If C_g = 255 Then State = 2
          End If
          If State = 2 Then
             Decr C_g
             Incr C_b
             If C_b = 255 Then State = 0
          End If
       End If
       If Modus = 1 Then
          If State = 0 Then
             If C_r < 255 Then Incr C_r
             If C_r = 255 Then State = 1
          End If
          If State = 1 Then
             If C_b < 255 Then Incr C_b
             If C_b = 255 Then State = 2
          End If
          If State = 2 Then
             If C_g < 255 Then Incr C_g
             If C_g = 255 Then State = 3
          End If
          If State = 3 Then
             If C_r > 1 Then Decr C_r
             If C_g > 50 Then Decr C_g
             If C_b > 1 Then Decr C_b
             If C_r = 1 Then State = 4
          End If
          If State = 4 Then
             If C_g < 255 Then Incr C_g
             If C_b < 255 Then Incr C_b
             If C_b = 255 Then State = 5
          End If
          If State = 5 Then
             If C_g > 1 Then Decr C_g
             If C_b > 1 Then Decr C_b
             If C_g = 1 Then State = 0
          End If
       End If
    Kannst du z.B. so umändern:

    Code:
    If Modus = 0 then
    Select Case State
    Case 0 : Incr C_r
             Decr C_b
             If C_r = 255 Then State = 1
    Case 1 : Decr C_r
             Incr C_g
             If C_g = 255 Then State = 2
    Case 2 : Decr C_g
             Incr C_b
             If C_b = 255 Then State = 0
    End Select
    Und für Modus = 1 ersetzt du die ganzen If-Abfragen ebenfalls durch Select-Case. Ob es das Programm nun wirklich kleiner macht weiß ich nicht aber auf jedenfall wird es übersichtlicher.
    Den Rest wüsste ich nun nicht wie man den noch optimieren kann. Das Hauptprogramm beinhaltet nicht soviel Code, wobei ich die ISR vom Timer noch schlanker machen würde. In etwa so:

    Code:
    ISR_Timer0:
    
    Interruptflag_Timer0 = 1
    
    Return
    Und dann im Hauptprogramm:

    Code:
    Do
    If Interruptflag_Timer0 = 1 then
       If Pwm_count = 255 Then Pwm_count = 0       'PWM-Variable bei 255 resetten
       Incr Pwm_count                       'PWM-Variable erhöhen
       If Div = 10000 Then                  'Teilervariable bei 10000 resetten
          Div = 0
          Gosub Fading                      'Springe bei 10000 zu Fading
       End If
       Incr Div                             'Teilervariable erhöhen
    End if
    Loop
    End
    Dies machst du aus dem Grund, weil man eine ISR möglichst kurz halten sollte (gut in deinem Programm macht das nun nichts aus, weil du nur eine ISR hast).
    Weil wenn du mehrere Interruptquellen in einem Programm hast können eventuell Interrupts verschluckt werden, weil deine ISRs zu lang sind.
    Deswegen mach ich das immer so das ich in den ISRs (wenn möglich) nur ein Bit setze, weil das schön schnell geht.
    Wenn du in ISRs sowas wie "Print" Befehle o.ä. reinknallst kann es gut sein, dass der Controller beim ausführen der ISR einen anderen Interrupt ignoriert, weil so ein "Print" Befehl richtig viel Zeit braucht.
    So würde ich das optimieren....ich weiß allerdings nicht in wie weit das eine Optimierung ist, weil ich selber nicht so der eingefleischte Programmierer bin
    Aber das Select-Case macht das Programm auf jedenfall überschaubarer.

    Edit: Hab gerade gesehen, dass du von der ISR in ein Unterprogramm springst.....versuch sowas zu vermeiden
    Wie gesagt nutze die Methode wo du in den ISR einfach nur Bits setzt und die Auswertung macht dann das Hauptprogramm.
    Geändert von Kampi (08.03.2012 um 08:38 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. Samarai: Eine Drohne wie eine Ahornfrucht
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 15.08.2011, 15:20
  2. ATTiny13 PWM
    Von Jacob2 im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 13.05.2009, 18:08
  3. attiny13
    Von epos im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 05.10.2007, 21:39
  4. Antworten: 5
    Letzter Beitrag: 02.02.2007, 10:03
  5. Antworten: 7
    Letzter Beitrag: 17.10.2006, 16:10

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress