Beleuchtungssteuerung von Standard-LCD und EA DIPS082

Bisweilen kann der Wunsch bestehen, z.B. bei mobilen Geräten, die LCD-Hintergrundbeleuchtung nur dann einzuschalten, wenn Taster betätigt werden. Mit einer bestimmten Verzögerung soll sich die Beleuchtung dann wieder abschalten. Das lässt sich mit einer vergleichbaren Mimik verwirklichen, wie sie auch zur Erkennung eines kurzen bzw. langen Tastendrucks verwendet wird, ohne der Hintergrundbeleuchtung einen zusätzlichen Ein-/Aus-Schalter zu spendieren.

1  Schaltung

LCD control schematics

Abb. 1: Mögliche Beleuchtungssteuerungen.

Im oberen Beispiel schaltet der PNP-Transistor die +5V an LED A (Anode) durch, wenn die Basis, also PC2, low ist. Im unteren Beispiel schaltet der NPN-Transistor LED K (Kathode) nach Masse, wenn PC2 high ist. Mit RD wird der Stromverbrauch, damit die Helligkeit der Hintergrundbeleuchtung, festgelegt. MOSFETs gehen hier natürlich auch.

Die obere Variante kann z.B. zur Beleuchtungssteuerung eines EA DIPS082-HNLED verwendet werden. Mit einem kleinen Umbau lässt sich dieses LCD auch dazu überreden, die sonst ständige Hintergrund-beleuchtung bei Bedarf abzuschalten.

EA DIPS082 backplane

Abb. 2: Rückseite des EA DIPS082-HNLED.

R5 (15Ω) wird ausgelötet. Für die offenen Lötpads "R7" gibt es zwei Möglichkeiten: entweder wird R5 dort aufgelötet oder R7 wird überbrückt. In beiden Fällen kann nun an Anschluss 7 (D0) die positive Spannung für die Hintergrundbeleuchtung angelegt werden. RD in Abb. 1 oben muss mindestens 15Ω sein, wenn R7 überbrückt wurde. Das Schaltbild macht das deutlicher. "A" und "K" sind Anode bzw. Kathode der Beleuchtungs-LED.

EA DIPS082 schematics

Abb. 3: Leitungsführung im EA DIPS082-HNLED schematisch.

Dieser Umbau funktioniert nur im 4 Bit-Modus, wenn also D0 bis D3 nicht angesteuert werden. Im Übrigen ist das EA DIPS082, anders als z.B. das EA DIP204, voll HD44780-kompatibel, in BASCOM also Standard-Config, auch mit "Config Lcd = 16 * 2", auch wenn dies nur ein 8x2-LCD ist.

2  Software

Die Timer0_isr nach der Dannegger-Methode wird wie aus den vorhergehenden Beispielen mit den gleichen Variablen verwendet. Zur Steuerung der Hintergrundbeleuchtung brauchen wir einen AVR-Ausgang, hier z.B. PC2, und ein paar zusätzliche Variablen.

DDRC.2 = 1                                        'PC.2 = output, LCD backlight
bitLight Alias PortC.2

Dim bitActive As Bit                              '=1: in operation, =0: idle
Const On = 1                                      'Positive logic
Const Off = 0
'Const On = 0                                      'Negative logic
'Const Off = 1
Dim wrdTimer0_light As word                       'Counter for LCD backlight

Je nach verwendeter Schaltung (Abb. 1) mit negativer bzw. positiver Logik sind die ON/OFF-Bedingungen vertauscht.

Vor der Do...Loop wird erst einmal in den Stromsparmodus geschaltet:

wrdTimer0_light = 0
bitLight = Off                                    'LCD backlight off
bitActive = 0                                     'No operation

Wenn irgendein Taster betätigt wurde, ist das Byte "bytKey_press" aus der Timer0_isr ungleich Null. Dann also "Spot an".

If bytKey_press = 0 Then                          'Nothing happened
   bitActive = 0
Else                                              'Any key pressed
   bitActive = 1
   bitLight = ON                                  'LCD backlight on
End If

Die Umschaltung von "nichts los" (bitActive = 0) nach "aktiv" (bitActive = 1) und umgekehrt kann natürlich stattdessen mit bestimmten Tastern und zugehörigen Operationen verbunden werden. Es ist dabei immer darauf zu achten, dass nach Auswertung eines Tastendrucks bytKey_press sogleich genullt wird. Entweder das ganze Byte oder nur die entsprechenden Taster-Bits, z.B. bytKey_press.2, Bit/Taster 2.

Die Nachlaufsteuerung der LCD-Beleuchtung erfolgt in der Timer0_isr.

Timer0_isr:
'Interrupt Service Routine for Timer0 (Keys)
'
'...
'
   If bitLight = On Then                          'LCD backlight is on
      If bitActive = 0 Then                       'Operation finished
         If wrdTimer0_light < 600 Then            'Wait to turn off backlight
            Incr wrdTimer0_light
         Else
            bitLight = Off                        'Now turn backlight off
            wrdTimer0_light = 0                   'Reset counter
         End If
      End If
   End If

Der letzte Tastendruck macht das Licht aus. Die Nachlaufzeit lässt sich, abhängig vom Timing der Timer0_isr, mit " If wrdTimer0_light < 600 Then" einstellen. Bei einem Timer0-Timing von z.B. 12 msec ergäbe sich mit dem o.a. Counter 600 eine Nachlaufzeit von 0,012*600=7,2 sec.