PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bacom LCD teilweise Aktualisieren



rauf81
20.09.2011, 12:32
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






$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

Rone
20.09.2011, 14:40
Hallo!

Ganz einfach: Wenn neuer Wert <> alter Wert dann aufs LCD schreiben.

Und das Cls raus aus der Hauptschleife!!


MfG

rauf81
20.09.2011, 14:59
Hi

Na klar.....
Danke für den Tip

Grüße Flo