Forum: Mikrocontroller und Digitale Elektronik MSP430 Segment-LCD Ghosting reduzieren


von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hallo miteinander

Ich verwende einen MSP430FR4131, um eine kleine LCD-Segmentanzeige 
anzusteuern. Leider habe ich Probleme mit der Lesbarkeit bzw. mit dem 
Kontrast. Die Segmente, die hell sein sollten, sind etwas dunkler als 
der Hintergrund (siehe Bild).

Nun hoffe ich das irgendwie in Software beheben zu können, da sonst eine 
neue PCB-Revision nötig wäre. Ich habe auch noch nicht so viel Erfahrung 
mit MSP430ern, weshalb ich besser nochmals nachfrage.

Ich habe ein Launchpad mit dem gleichen uC und einem anderen LCD, wo 
dieses Ghosting nicht auftritt. Ich befürchte also, dass es an meiner 
Hardware bzw. dem verwendeten LCD liegt.

An LCDCAP0/1 sind 100n angeschlossen. R13, R23, R33 sind unbelegt.

Ich habe auch mit unterschiedlichen Prescalern herumgespielt (LCD- und 
Ladungspumpen-Frequenz), das hat aber keine grosse Wirkung bezüglich 
Kontrast gezeigt.

Was könnte ich sonst noch machen?

Code:
1
#include <msp430.h>
2
#include <stdbool.h>
3
#include <stdint.h>
4
5
#define pm5_unlock() (PM5CTL0 &= ~LOCKLPM5)
6
#define lcd_mem_clr()   (LCDMEMCTL |= LCDCLRM)
7
8
const uint8_t lcd_segment_map[] = {
9
        0xd7,
10
        0x06,
11
        0xe3,
12
        0xa7,
13
        0x36,
14
        0xb5,
15
        0xfd,
16
        0x07,
17
        0xf7,
18
        0xb7
19
};
20
21
void lcd_init ()
22
{
23
        LCDCTL0 = 0x0000; // LCD_E module off
24
25
        /* LCD clock is VLOCLK,
26
         * mux rate is 4-mux,
27
         * prescaler 1 */
28
        LCDCTL0 = (LCDSSEL1 | LCDMX0 | LCDMX1 | LCDSON);
29
30
        /* enable charge pump,
31
         * R33 is supplied from Vcc internally */
32
        LCDVCTL |= (LCDCPEN | LCDSELVDD);
33
34
        lcd_mem_clr();
35
36
        /* Pin definitions */
37
        LCDPCTL0 = 0x0f00;
38
        LCDPCTL1 = 0xff0f;
39
        LCDPCTL2 = 0x0000;
40
41
        LCDCSSEL0 = 0x0f00;
42
        LCDCSSEL1 = 0x0000;
43
        LCDCSSEL2 = 0x0000;
44
45
        LCDM4 = 0x21; // common pins
46
        LCDM5 = 0x84;
47
48
        LCDCTL0 |= LCDON; //LCD_E module on
49
}
50
51
void lcd_put_temp (uint16_t n)
52
{
53
        uint8_t digits [4];
54
55
        /* separate number into digits */
56
        for (uint8_t i = 3; i > 0; i--){
57
                digits[i] = n % 10;
58
                n /= 10;
59
        }
60
        digits[0] = n % 10;
61
62
63
        lcd_mem_clr();
64
65
        LCDM4 = 0x21; // common pins
66
        LCDM5 = 0x84;
67
68
        LCDM8 = 0x80; // degree symbol
69
70
        /* least significant digit */
71
        LCDM9 = lcd_segment_map[digits[3]]&0x07;
72
        LCDM13 = (lcd_segment_map[digits[3]]&0xf0) >> 4;
73
74
        LCDM14 = lcd_segment_map[digits[2]]|0x08;
75
76
        LCDM15 = lcd_segment_map[digits[1]]&0xf7;
77
78
        /* most significant digit */
79
        LCDM12 = lcd_segment_map[digits[0]]&0xf0;
80
        LCDM13 |= (lcd_segment_map[digits[0]]&0x07) << 4;
81
}
82
83
void main (void)
84
{
85
        /* use VLO as MCLK and SMCLK source,
86
         * use REFO as ACLK */
87
        CSCTL4 = (SELA | SELMS0 | SELMS1);
88
89
        /* FLL reference is REFOCLK */
90
        CSCTL3 = (SELREF0);
91
92
        lcd_init();
93
        pm5_unlock();
94
        while (1){
95
                lcd_put_temp(1234);
96
                for (uint16_t i = 0; i < 0xfff; i++);
97
        }
98
}

von Wolle G. (wolleg)


Lesenswert?

Patrick schrieb:
> Was könnte ich sonst noch machen?

Ich würde sagen, dass man hier noch etwas an der Kontrasteinstellung 
rumspielen sollte.

von Patrick (Gast)


Lesenswert?

Es gibt die VLCDx-Bits, das so wie ich das verstehe, die Spannung für 
die interne Ladungspumpe festlegt. Das ist aber leider bereits auf das 
Minimum von 2.60 V gesetzt.

Sonst sehe ich keine Möglichkeit, den Kontrast einzustellen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick schrieb:
> Das ist aber leider bereits auf das Minimum von 2.60 V gesetzt.
Und die ist dann tatsächlich auch so, wenn du sie misst? Wie passen die 
anderen Spannungen dazu? Hast du da die Pegel, die das Datenblatt 
angibt? Oder ist da ein "etwas ungerader" Pegel im gemuxten Signal?

Dazu gibt es im Kapitel 4.4 der Appnote SLAA654 bei den optionalen 
externen Widerständen ein paar Worte zum Thema "If contrast is not even 
across all segments".

Patrick schrieb:
> Leider habe ich Probleme mit der Lesbarkeit bzw. mit dem Kontrast.
Sieht doch für so ein (S)TN-Display gar nicht sooo schlecht aus.
Welchen Kontrast verspricht das Datenblatt des Glases?

: Bearbeitet durch Moderator
von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Und die ist dann tatsächlich auch so, wenn du sie misst? Wie passen die
> anderen Spannungen dazu? Hast du da die Pegel, die das Datenblatt
> angibt? Oder ist da ein "etwas ungerader" Pegel im gemuxten Signal?

Danke für den Tipp, habe beim Messen meinen Fehler bemerkt:
Ich habe mit LCDSELVDD=1 V_LCD auf VCC gelegt (Mode 2). Daher auch der 
zu hohe Kontrast. Die VLCDx-Bits hatten gar keinen Einfluss. Kapitel 
17.2.7.1 und 17.2.8 im User Guide beschreiben das.

Mir war nicht klar, dass die Kondensatoren an R13, R23, R33 für die 
Ladungspumpe zwingend nötig sind; ich dachte, 100n an LCDCAP0/1 reichen, 
weshalb sie auch auf dem PCB fehlen. Im Mode 3 (Ladungspumpe mit V_LCD 
!= VCC), bleiben alle Segmente aus ohne die Kondensatoren. Die 
Ladungspumpe hat also vorher auch nicht funktioniert.

Ich habe sie nun mit Fädeldraht hingemurkst und nun ist der Kontrast im 
Mode 3 viel besser, und vorallem mit den VLCDx-Bits tatsächlich 
einstellbar. Auch die Signale sehen jetzt für mich gut aus.

Lothar M. schrieb:
> Appnote SLAA654

Danke, irgendwie übersehe ich immer die wichtigen App Notes... Wo 
findest Du die? Produktseite von TI oder Suchmaschine?

von Clemens L. (c_l)


Lesenswert?

Patrick schrieb:
> irgendwie übersehe ich immer die wichtigen App Notes... Wo
> findest Du die? Produktseite von TI oder Suchmaschine?

Oft (aber nicht immer) sind sie in der Liste auf der Produktseite:
https://www.ti.com/product/MSP430FR4131#tech-docs

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.