PCF8576, schaltet nicht alle Segmente im Multiplex Betrieb an, aber im Static Modus

OP #3108372
Lesenswert?

Hallo,

ich möchte einen PCF8576 LCD Treiber/Controller verwenden um ein LCD 
Display mit 3 Backplanes und 33 Segmenten zu betreiben. Als µC nutze ich 
einen Atmega128, programmiert wird in C und es wird die i2c Lib von 
Peter Fleury zur Vereinfachung genutzt. Der PCF8576 wurde auch schon 
einmal ausgetauscht, das selbe Problem...

Wenn ich das Display im Static Modus betreibe, dann werden alle 
Segmente, je nach Datenbytes an bzw. ausgeschaltet. Bei einem gesetzten 
Bit sind 3 Segmente an -> ok.

Wenn ich den Controller nun in den richtigen Modus setze, also 3 
Backplanes, sind bei 4 x 5 Bytes mit dem Wert 0 alle Segmente aus -> ok. 
Das gleiche Spiel mit 4 x 5 Bytes mit dem Wert 255, jetzt fehlen mir ca. 
10 Segmente. Das ist nicht das erhoffte Ergebnis. :-( (Ich habe auch 
schon versucht mit mehr Bytes nachzuhelfen, das ändert nichts...)

Bei einem gesetzten Bit leuchtet auch wie erwartet 1 Segment. :-|

Sieht jemand meinen Fehler oder hat eine Idee?

Mein Quellcode:
1
/*
2
avrdude -p atmega128 -P /dev/ttyACM0 -c stk500v2 -v -Uefuse:w:0xFF:m -U hfuse:w:0xC9:m -U lfuse:w:0xDF:m
3
*/
4

5
#define F_CPU 18432000UL
6

7
#include <avr/io.h>
8
#include <util/delay.h>
9
#include <avr/interrupt.h>
10
#include <i2cmaster.h>
11

12
int main(void)
13
{
14
  i2c_init();
15
  _delay_ms(10);            // aufwaermen, laut Datenblatt soll min. 1 ms gewartet werden, ansonsten wird der Reset nicht richtig durchgefuehrt
16
  i2c_start_wait(112);      // Adresse, alle Adressleitungen sind auf 0 UND das R/W Bit!
17
  i2c_write(224);           // Device Select 0
18
  /*
19
  Aufbau MODE Befehl:
20
  0. Bit        : 1 noch mehr Befehle  
21
                  0 Ende der Befehle
22
  1. - 2. Bit   : 10 (Erkennung für Mode)
23
  3. Bit        : Power Saving
24
                  0 Normal
25
                  1 Power Save
26
  4. Bit        : Display Status
27
                  0 Disabled
28
                  1 Enabled
29
  5. Bit        : BIAS
30
                  0 1/3 Bias
31
                  1 1/2 Bias
32
  6. - 7. Bit   : 0 1 Static 
33
                  1 0 1:2 2 Backplanes
34
                  1 1 1:3 3 Backplanes
35
                  0 0 1:4 4 Backplanes
36
  */
37
 
38
  i2c_write(207);         // 1100 1111 (1/2 Bias, 1:3 Betrieb)
39
  i2c_write(240);         // kein Blinken
40
  i2c_write(0);           // Adresszeiger auf Pos.0 schieben
41

42
  i2c_write(255);
43
  i2c_write(255);
44
  i2c_write(255);
45
  i2c_write(255);
46
  i2c_write(255);
47

48
  i2c_write(255);
49
  i2c_write(255);
50
  i2c_write(255);
51
  i2c_write(255);
52
  i2c_write(255);
53

54
  i2c_write(255);
55
  i2c_write(255);
56
  i2c_write(255);
57
  i2c_write(255);
58
  i2c_write(255);
59

60
  i2c_write(255);
61
  i2c_write(255);
62
  i2c_write(255);
63
  i2c_write(255);
64
  i2c_write(255);
65

66
  i2c_stop();
67
  while(1)
68
  {
69
  }
70
  return 0;
71
}
OP #3108488
Lesenswert?

Ja,

habe ich.

Dann ist das Verhalten richtig, wenn alle 4 x 5 Bytes auf 0 sind 
leuchtet nichts, bei 255 leuchten alle. Kontrast ist natürlich komisch.

Irritierend ist, das erst beim 2. Bit (Dezimal 2) ein Segment angeht, 
beim 1. Bit geht keins an. Und es ist keins der 3 Segmente die beim 1. 
Bit im statischen Modus angehen.

Hmmm...
OP #3108983
Lesenswert?

So,

ein 1. Lichtblick.

Habe meinen Logikanalysator angeklemmt und sehe das die i2c 
Schnittstelle vom Atmega nur Quatsch überträgt. Als ob er immer 
dauerhaft versucht etwas zu senden...

Ich nehme nun einmal in Ruhe den Code auseinander.

Ich melde mich wieder wenn das auf dem Analyzer schön aussieht. :-)
OP #3109674
Lesenswert?

So,

ich denke ich habe die Ursache gefunden.

Im Datenblatt vom PCF8576C auf Seite 22 steht es.

Ein Byte im Speicher:

1. Bit: 1 Segment, 1 BP
2. Bit: 1 Segment, 2 BP
3. Bit: 1 Segment, 3 BP

4. Bit: 2 Segment, 1 BP
5. Bit: 2 Segment, 2 BP
6. Bit: 2 Segment, 3 BP

7. Bit: 3 Segment, 1 BP
8. Bit: 3 Segment, 2 BP
(3 Segment, 3 BP ist unbeschrieben!!)

Beim 2. Byte geht es dann mit dem 4. Segment weiter...

Ich muss also, um die fehlenden Segmente zu erreichen den Datenpointer 
richtig hinschieben...

So, frohe Ostern!

Grüße & Danke von André

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren