Forum: Mikrocontroller und Digitale Elektronik Schieberegister (4094) hängt 3. Bit falsch.


von Sebastian V. (voitzsch)


Angehängte Dateien:

Lesenswert?

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

von 6A66 (Gast)


Lesenswert?

Hallo Sebastian,

das sieht mir eher nach einem Kurzschluss am Ausgang der Schieberegister 
aus.
Du kannst auch die beiden Schieberegisteer tauschen sofern gesockelt, 
ich halte aber einen Defekt eher für unwahrcheinlich da die anderen Bits 
ja richtig ankommen. Notfalls mit scope mal den Pegel des Bits 
anschauen.

rgds

von c-hater (Gast)


Lesenswert?

Sebastian Voitzsch schrieb:

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

Mit welchem SPI-Takt betreibst du das?

Der 4094 ist (wie die gesamte klassische CMOS-Serie) nicht gerade 
schnell, jedenfalls nach heutigen Maßstäben.

Wenn du das Teil übertaktest, können die seltsamsten Probleme auftreten, 
auch solche, wie du sie hier beschreibst.

von Markus (Gast)


Lesenswert?

Hat wohl nichts mit dem Problem direkt zu tun, aber ist sichergestellt, 
dass an Pin WR der LOW-Pegel sicher ereicht wird nach der Diode. 
Pull-Down Widerstand vorhanden?
Und sonst noch, das Übliche, sind Abblock-Kondensatoren an den ICs dran?

von Sebastian V. (voitzsch)


Lesenswert?

Hallo zusammen,

vielen Dank für Eure Anmerkungen. Es lag tatsächlich an einem 
Kurzschluss, den man auf dem beigefügten Bild sogar sehen kann: DB6 und 
DB8 waren am Display-Steckverbinder kurzgeschlossen (40-pin 2.54mm, ich 
habe DB6 zwischen zwei anderen Pins durchgeroutet...). Nach dem 
Entfernen der Brücke läuft das Display nun einwandfrei.

Taktfrequenz sind bisher 12 MHz, darüber gibt es Bildstörungen. 
Allerdings betreibe ich mein Board, was als Aufsteckboard für den 
Raspberry gedacht ist, zwecks einfacherer Fehlersuche noch an ca. 10cm 
langen Leitungen, direkt aufgesteckt ist evtl. noch etwas mehr drin. 
Soll aber sowieso nicht zum Video schauen verwendet werden, dafür taugt 
die Ansteuerung nicht, das ist mir klar. Aber als einfache Bildausgabe 
für "autarke" Raspberry-Anwendungen sind die 3,2" schon ganz in Ordnung.

Kondensatoren etc. sind dran, die Diode an WR ist ein Inverter, der 
Pegel ist also passend.

Schönen Sonntag,
Sebastian

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.