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!
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.
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:
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("");
}
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.