Hallo zusammen.

Mein RGB LED Fader ist soweit fertig.
Hard und Software stehen. Allerdings habe ich noch ein lästiges
Problem mit meinem LCD Display 20x4.
Da ich den Fadingwert eines jeden Farbkanals angezeigt bekomme, möchte ich auch,
das nur dieser aktualisiert wir. Das passiert alle 100ms.
Nachteil ist das der Befehl "CLS" das gesamte Display löscht, und dadurch
ein unangenehmes Flackern erzeugt.

Ist es möglich nur Teilbereiche aktualisieren zu lassen,
oder gibt es da eine andere Möglichkeit?

Ich schicke den Quellcode noch mit und hoffe Ihr könnt mir weiter helfen

Grüße Flo

Code:


$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Ddrb = &HFF
Ddrd = &HFF
Ddrc = &HFF

Ddra = &H00

Porta.3 = 1
Porta.4 = 1
Porta.5 = 1

Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 20 * 4

Enable Interrupts


Dim Adc_rot As Word
Dim Adc_grün As Word
Dim Adc_blau As Word

Dim Pwm_rot As Word
Dim Pwm_grün As Word
Dim Pwm_blau As Word

Dim Status As Bit
    Status = 0

Dim Zähler_rot As Integer
Dim Zähler_grün As Integer
Dim Zähler_blau As Integer
      Zähler_rot = 0
      Zähler_grün = 0
      Zähler_blau = 0

Dim Plusminus_rot As Integer
   Plusminus_rot = 1
Dim Plusminus_grün As Integer
   Plusminus_grün = 1
Dim Plusminus_blau As Integer
   Plusminus_blau = 1

Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256

Config Adc = Single , Prescaler = Auto , Reference = Avcc






Do


Debounce Pina.5 , 0 , Taster3 , Sub
Debounce Pina.4 , 0 , Taster2 , Sub
Debounce Pina.3 , 0 , Taster1 , Sub


If Status = 0 Then

Cls

   Locate 1 , 1
   Lcd "Motion Control @ RAU"

      Locate 2 , 1
      Lcd "<ROT>   "
      Locate 2 , 14
      Lcd " Fading"


      Locate 3 , 1
      Lcd "<GRUEN> "
      Locate 3 , 14
      Lcd " Fading"


      Locate 4 , 1
      Lcd "<BLAU>  "
      Locate 4 , 14
      Lcd " Fading"

     Adc_rot = Getadc(2)
     Adc_grün = Getadc(1)
     Adc_blau = Getadc(0)


      Locate 2 , 9
      Pwm_rot = Adc_rot / 4
      Lcd Pwm_rot


      Locate 3 , 9
      Pwm_grün = Adc_grün / 4
      Lcd Pwm_grün

      Locate 4 , 9
      Pwm_blau = Adc_blau / 4
      Lcd Pwm_blau



      Ocr0 = Pwm_rot
      Ocr1a = Pwm_grün
      Ocr1b = Pwm_blau



      If Adc_rot < 25 Then
      Adc_rot = 0
      End If
      If Adc_grün < 25 Then
      Adc_grün = 0
      End If
      If Adc_blau < 25 Then
      Adc_blau = 0
      End If

Else

      Zähler_rot = Zähler_rot + Plusminus_rot
      If Zähler_rot = 85 Then Plusminus_rot = -1
      If Zähler_rot = 1 Then Plusminus_rot = 1

      Zähler_blau = Zähler_blau + Plusminus_blau
      If Zähler_blau = 170 Then Plusminus_blau = -1
      If Zähler_blau = 1 Then Plusminus_blau = 1

      Zähler_grün = Zähler_grün + Plusminus_grün
      If Zähler_grün = 255 Then Plusminus_grün = -1
      If Zähler_grün = 1 Then Plusminus_grün = 1

      Ocr0 = Zähler_rot
      Ocr1a = Zähler_grün
      Ocr1b = Zähler_blau

End If


Waitms 100

Loop

End


Taster3:

   If Status = 0 Then
   Status = 1
   Else
   Status = 0
   End If

Return

Taster2:
Return

Taster1:
Return