Hallo zusammen,
ich habe ein Problem mit einem Schieberegister (4094). Für die
Ansteuerung eines LCD-Displays mittels SPI über einen Raspberry Pi habe
ich diese Schaltung nachgebaut:
74HC4094
1 | +--------------+
|
2 | | |
|
3 | MOSI o-------------------------------------------------------| D QP0 |-------------o DB0
|
4 | | |
|
5 | SCLK o---------+-----------------------------------+---------| CP QP1 |-------------o DB1
|
6 | | | | |
|
7 | CE0 o------+ | | Vcc o---| OE QP2 |-------------o DB2
|
8 | | | | | |
|
9 | | | 74HC4040 | | QP3 |-------------o DB3
|
10 | | | +--------------+ | | |
|
11 | | | | | | | QP4 |-------------o DB4
|
12 | | | | Q0 |-- | | |
|
13 | | | | | | | QP5 |-------------o DB5
|
14 | | | | Q1 |-- | | |
|
15 | | | | | | | QP6 |-------------o DB6
|
16 | | | | Q2 |- 8bit --+---|---------| STR |
|
17 | | | | | | | | QP7 |-------------o DB7
|
18 | | | | Q3 |- 16bit --+ | | |
|
19 | | | | | | | | |
|
20 | | | | Q4 |-- | | | QS1 |-----+
|
21 | | | | | | | | | |
|
22 | | | | Q5 |-- | | | QS2 |-- |
|
23 | | +----| CP | | | | | |
|
24 | | | Q6 |-- | | +--------------+ |
|
25 | +-------| MR | | | |
|
26 | | | Q7 |-- | | +--------------------------+
|
27 | | | | | | |
|
28 | | | Q8 |-- | | | 74HC4094
|
29 | | | | | | | +--------------+
|
30 | | | Q9 |-- | | | | |
|
31 | | | | | | +-----| D QP0 |-------------o DB8
|
32 | | | Q10 |-- | | | |
|
33 | | | | | +---------| CP QP1 |-------------o DB9
|
34 | | | Q11 |-- | | |
|
35 | | | | | Vcc o---| OE QP2 |-------------o DB10
|
36 | | +--------------+ | | |
|
37 | | | | QP3 |-------------o DB11
|
38 | | | | |
|
39 | | | | QP4 |-------------o DB12
|
40 | | | | |
|
41 | | | | QP5 |-------------o DB13
|
42 | | | | |
|
43 | | | | QP6 |-------------o DB14
|
44 | | +-------------| STR |
|
45 | | | | QP7 |-------------o DB15
|
46 | | | | |
|
47 | | | | |
|
48 | | | | QS1 |--
|
49 | | | | |
|
50 | | | | QS2 |--
|
51 | | | | |
|
52 | | | +--------------+
|
53 | | |
|
54 | | | 74HC04
|
55 | | +-------------------|>o--------------------o WR
|
56 | |
|
57 | | Vcc o--o RD
|
58 | |
|
59 | +-----------------------------------------------------------------------------o CS
|
60 |
|
61 | 'dc' o------------------------------------------------------------------------------------o DC/RS
|
Da das Display sich nicht rührt, habe ich die Signale mit einem
Logicanalyzer begutachtet und festgestellt, dass Bit 6 ab und zu aus der
Reihe tanzt: ein Register soll den Wert 0x2B00 erhalten, auf den
Datenleitungen liegt aber imme 0x2B40 an.
Wie die angehängte Datei zeigt, bleibt Bit 6 (D6, rot markiert) einfach
auf "1" hängen, obwohl es beim nächsten Takt eigentlich auf "0" schalten
muss. Bei Bit 7 klappt das auch - was auch bestätigt, dass es nicht an
STR liegen kann - sonst wären ja alle Bits eingefroren.
D15 zeigt die Datenleitung (warum der Pi immer eine kurze "1" erzeugt,
ist mir ein Rätsel, dürfte aber angesichts der übrigen Bits keine Rolle
spielen), D14 ist clock. D13 ist die per 4040 erzeugte STR-Leitung (CLK
/ 8) unmittelbar am 4040, D12 zeigt den Zustand von STR. D11-D8 sind vom
zweiten 4094 (unteres Nibble der oberen 8 Bits).
Gibt es - außer einem Defekt (?!) des 4094 eine andere Erklärung für
diesen Phänomen? Der Effekt ist nachvollziehbar, er betrifft auch nur
das 6. Bit. Allerdings nicht immer - andere Werte werden korrekt
abgebildet. Die Init-Sequenz lautet auszugsweise:
0x0000, 0x0001
0x0003, 0xA8A4
0x000C, 0x0000
0x000D, 0x080C
0x000E, 0x2B00
...
Die ersten Werte werden koorekt ausgegeben, erst bei 0x2B00 erscheint
"0x2b40" am Ausgang.
Was tun?
Danke,
Sebastian