2-Ziffern Mini-LCD

2-Ziffern LCD GDC02693

Dieses kleine 2-ziffrige LCD-Panel wird -laut Hersteller- speziell für E-Zigaretten hergestellt und kann Ziffen mit einer 7-Segment-Technik darstellen. Zusätzlich ist auch ein Punkt möglich.
Vorsicht: Das Gehäuse des LCDs besteht aus Glas!

Spezifikationen laut Hersteller

Teile-Nr.: GDC02693
Display-Modus: 2-Ziffern / TN² (reflektiv)
Betriebsspannung: 3V
Betriebstemperatur: -20°C bis 70°C
Abmessungen: 7,5mm×10mm×1,1mm (5,5mm×4,0mm)

²): TN steht für Twisted Nematic (engl. "verdrehte Flüssigkristalle") und bezeichnet eine bestimmte Art der Anordnung von Flüssigkristallen in LCD-Anzeigen. Ihr Aufbau ist recht simpel: Im Ruhezustand ist auf dem Display nichts zu sehen. Fließt Strom, so ordnen sich die Flüssigkristalle anders an und die Schicht wird lichtundurchlässig. Das entsprechende Segment erscheint dann schwarz.

Verwendete Bauteile

Pin- und Verwendung des LCD-Segmente

Pin-Belegung und -benutzung des GDC02693 LCDs

Adapter fürs Breadboard

Da die Pins des GDC02693 nicht mit der üblichen Pin-Breite des Breadboard kompatibel sind, habe ich mir vor dem Test einen Adapter mit einem SOP4-28-Adapter gebaut:

Abb.: Breadboard-Adapter für LCD GDC02693

Test mit ESP32

Da ich keine passende Library gefunden habe, die die Ansteuerung dieses LCDs übernimmt, habe ich versucht, selbst das Display anzusteuern:

#define PIN_1   15
#define PIN_2   2
#define PIN_3   4
#define PIN_4   16
#define COM_1   17
#define COM_2   5
#define COM_3   18
#define COM_4   19

#define LCD_DELAY 75
#define lmillis() ((long)millis())

const byte lcdPins[8] = {COM_4, COM_3, COM_2, COM_1, PIN_4, PIN_3, PIN_2, PIN_1};

void setup()
{
    for (byte i = 0; i < 8; i++) {
        pinMode(lcdPins[i], OUTPUT);
    }
    Serial.begin(9600);
}

void loop()
{
    displayDigit(8.4);

    /*
        displayDigit(-0.1);
        delay(2000);

        displayDigit(101.0);
        delay(2000);

        for (float f = 0.0; f < 10.0; f += 0.1) {
            displayDigit(f);
            delay(200);
        }
        for (float f = 10.0; f < 100.0; f += 1.0) {
            displayDigit(f);
            delay(200);
        }
    */
}

void displayDigit(float number)
{
    static long nextAction = 0;

    if (lmillis() - nextAction < 0) {
        return;
    }
    nextAction = lmillis() + LCD_DELAY;

    for (byte i = 0; i < 8; i++) {
        digitalWrite(lcdPins[i], LOW);
    }

    if (number < 0.0) {
        // TODO display "_ . _"
        return;
    }
    if (number > 99.0) {
        // TODO display "^ . ^"
        return;
    }

    byte digit1, digit2 = 0;
    if (number < 10.0) {
        digit1 = (int)number % 10;
        digit2 = (int)((number - (int)number) * 10);
    } else {
        digit1 = (int)number / 10;
        digit2 = (int)number % 10;
    }

    Serial.print(digit1);
    Serial.print(" ");
    Serial.println(digit2);

    byte enablePins = 0;
    switch (digit1) {
        case 0: enablePins = B00000000; break;
        case 1: enablePins = B01000110; break;
        case 2: enablePins = B11001111; break;
        case 3: enablePins = B11001111; break;
        case 4: enablePins = B10001000; break;
        case 5: enablePins = B00000000; break;
        case 6: enablePins = B00000000; break;
        case 7: enablePins = B00000000; break;
        case 8: enablePins = B11101111; break;
        case 9: enablePins = B00000000; break;
    }

    switch (digit2) {
        case 0: enablePins &= B01000110; break;
        case 1: enablePins &= B01000110; break;
        case 2: enablePins &= B11001111; break;
        case 3: enablePins &= B11001111; break;
        case 4: enablePins &= B00111110; break;
        case 5: enablePins &= B00000000; break;
        case 6: enablePins &= B00000000; break;
        case 7: enablePins &= B00000000; break;
        case 8: enablePins &= B00000000; break;
        case 9: enablePins &= B00000000; break;
    }

    for (byte i = 0; i < 8; i++) {
        if (bitRead(enablePins, i) == 1) {
            digitalWrite(lcdPins[i], (digitalRead(lcdPins[i])+1)%2);
            Serial.print(digitalRead(lcdPins[i]));
        }
    }
    Serial.println("");
}

Resultat

Wie man an den folgenden Bildern sieht, ist das Resultat leider nicht die gewünschte Ziffer, sondern teilweise wahllose und manchmal sogar hin- und her flackernde Segmente des LCDs. 😢

Nach etlichen Versuchen habe ich es zunächst aufgegeben, dieses kleine LCD anzusprechen, da ich aktuell keine dringende Verwendung dafür habe.
Für jeden sachdienlichen Hinweis für die richtige Ansteuerung bin ich immer dankbar.

zurück