Hallo ! Habe eine alte Flüssigkristallanzeige ( ohne Prozessor . Nur die Anzeige ) mit der ich experimentieren will ( 2 x 5 Anschlüsse ) . Erinnere mich , daß man zum Ansteuern eine Wechselspannung vollkommen ohne Gleichspannungsanteil benötigt um Elektrolyse zu verhindern . Stimmt das ? Wie groß sind sinnvolle Werte für U und f ? M.f.G
Servo3 schrieb: > Wie groß sind sinnvolle Werte für U und f ? Ich messe hier gerade an einem Schnurlostelefon, wobei Siemens mit etwa +/- 1,5V ansteuert und das ganze mit etwa 30 Hz taktet. Ich erinnere mich an eine Appliction Note von AVR, bei dem die normalen Portpins per Spannungsteiler auf 1/2 Vcc vorgespannt wurden und dann entweder als Out- oder als Input konfigurierten. Zieht man auf Low, sieht das LCD -0,5Vcc und bei High sinds dann +0,5Vcc. Das ganze war dann recht idiotensicher und minimierte das Risiko von Elektrolyse. Das geht natürlich auch mit PICs etc. Als erstes solltest du das Glas auf Belegung durchklingeln, falls noch nicht geschehen und entscheiden, ob du Multiplexen musst. Toggeln musst du aber in jedem Fall.
Perfekt . Herzlichen Dank ! Werde die 0,5Vcc über Kondensatoren machen um den Gleichspannungsanteil auszuschalten .
Servo3 schrieb: > Habe eine alte Flüssigkristallanzeige ( ohne Prozessor . Nur > die Anzeige ) mit der ich experimentieren will ( 2 x 5 Anschlüsse ) Eventuell 3 Backplanes a 7 Segmente oder 2 Backplanes a 2 Segmente Musst du mal mit Rechtecksignal aus einem Funktionsgenerator durchtesten. > . Erinnere mich , daß man zum Ansteuern eine Wechselspannung vollkommen > ohne Gleichspannungsanteil benötigt um Elektrolyse zu verhindern . > Stimmt das ? Ja. > Wie groß sind sinnvolle Werte für U und f ? ca. 3V (es gibt LCD für 1.5V und welche für 5V) und ca. 2-4 Millisekunden pro Digit/Backplane. Ohne speziellen Ansteuerchip kannst du nur a) 1/2 bias mit 1 uC-Ausgang pro LCD-Pin https://www.nxp.com/docs/en/application-note/AN3219.pdf (eine etwas einfachere und stromsparendere Schaltung wäre:
1 | ------+ +----------- |
2 | uC-Pin|-----+------------| Backplane1 |
3 | | | | |
4 | uC-Pin|-----(--+---------| Backplane2 |
5 | | | | | LCD-Glas |
6 | uC-Pin|-----(--(--+------| Backplane3 |
7 | | | | | | |
8 | uC-Pin|-----(--(--(--+---| Backplane4 |
9 | ------+ | | | | +----------- |
10 | 100k R R R R |
11 | | | | | |
12 | GND --100n--+--+--+--+ |
b) 1/3 bias mit 2 uC-Ausgängen pro LCD-Pin
1 | ------+ |
2 | uC-Pin|--100k--+ |
3 | | | |
4 | uC-Pin|--47k---+---|LCD Pin (jeder, nicht nur Backplanes) |
5 | ------+ |
c) 1/5 bias mit 2 uC-Ausgängen pro LCD-Pin
1 | VCC |
2 | | |
3 | 100k |
4 | ------+ | |
5 | uC-Pin|--100k--+ |
6 | | | |
7 | uC-Pin|--33k---+---|LCD Pin (jeder, nicht nur Backplanes) |
8 | ------+ | |
9 | 100k |
10 | | |
11 | GND |
machen. Die AVR AppNote http://ww1.microchip.com/downloads/en/AppNotes/doc8103.pdf funktioniert MEISTENS NICHT weil die nur 100% Spannung an das LCD gibt, es würden nur solche funktionieren deren threshold zufällig zwischen VCC und VCC/2 liegt, meistens sind LCD aber empfindlicher und alles wird schwarz. Man MUSS die (programmierbare, versorgungsspannungsabhängige und temperatureinfluesskorrigierte) Pause nach einer Segmentansteuerung machen. Am einfachsten beim AVR: Nimm dir einen Timer, z.B. Timer0. Lass ihn in 2ms rumlaufen, also bis 256 mit Vorteiler von 8 bei 1MHz internem Takt. Nimm den Overflow Interrupt um eine neue Phase für eine neue Backplane zu beginnen, und nimm den Counter Interrupt um die Phase zu beenden und alle Pins auf HIGH (oder LOW, je nach Phjase) zu legen. Nur so kannst du eine mittlere RMS Spannung bekommen, die auch mal den Threashold der LCD trifft. Und nach jedem Interrupt kann er wieder in sleep gehen um Strom zu sparen, schliesslich sollen (und können) uC mit nacktem LCD-Glas von Knopfzellen jahrelang laufen. Grob zusammenkopiert (muss also nicht funktionieren) für eine 4-backplane LCD:
1 | #define SEGMENTS 11
|
2 | #define BACKPLANES 4
|
3 | uint8_t phase; |
4 | uint8_t bp; // current backplane |
5 | int segbits[BACKPLANES]; // which segments are ON on a certain backplane |
6 | uint8_t plane; |
7 | uint8_t bppin[BACKPLANES]={A0,A1,A2,A3}; // backplane-pin |
8 | uint8_t segpin[SEGMENTS]={2,3,4,5,6,7,8,9,10,11,12}; // segment-pin |
9 | |
10 | ISR (TIMER0_COMPA_vect) // timer 0 compare, clear display to reduce rms voltage |
11 | {
|
12 | for(uint8_t i=0;i<SEGMENTS;i++) digitalWrite(segpin[i],phase); |
13 | }
|
14 | |
15 | ISR (TIMER0_OVF_vect) // timer 0 overflow, setup next phase |
16 | {
|
17 | pinMode(bppin[bp],INPUT); |
18 | bp+=phase; |
19 | bp&=3; |
20 | phase=!phase; |
21 | digitalWrite(bppin[bp],phase); |
22 | uint8_t i=0; |
23 | for(int segs=segbits[bp];i<SEGMENTS;i++,segs>>=1) digitalWrite(segpin[i],(segs&1)^phase); |
24 | pinMode(bppin[bp],OUTPUT); |
25 | }
|
:
Bearbeitet durch User
Servo3 schrieb: > Werde die 0,5Vcc über Kondensatoren machen > um den Gleichspannungsanteil auszuschalten. Das ist grober Unfug.
Servo3 schrieb: > Warum ? Es ist einfach unnötig und du kämpfst dann mit den Ladungen in den Kondensatoren. Das niemand in der LCD Welt sowas macht, sollte dir auch zu Denken geben. So ein LCD verhält sich auch schon in guter Näherung wie ein Kondensator, da hier praktisch nur umgeladen wird. Finde jetzt erstmal raus, wie dein LCD belegt ist und mach dir dann ein sinnvolles Portschema für den gewählten MC. (z.B. Segmente auf einen Port, Backplanes auf einen anderen).
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.