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 | }
|