PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit CD4543



Unregistriert
14.02.2017, 20:14
Guten Abend zusammen,
ich habe ein kleines Problem mit der Ansteuerung eines CD4543 (Digital zu 7-Segment wandler).

Für einen Timer habe ich 3 7-Sement anzeigen mittels Arduino angesteuert.
Die 4 Signale zum angeben der Záhl werden auf jeden CD4543 geführt,
und mittels Latch nacheinander ausgegeben.
Wenn beim Ablauf des Timers Stellen weg fallen (100 -> 99; 10 -> 9), möchte ich nicht benötigte
Anzeigeelemente ausschalten, da 009 blöd aussehen würde.

Der Eifachheit halber wollte ich statt der nutzung des blanking Pins einfach eine ungültige Zahl ausgeben,
da lt. Datenblatt die Anzige dann ausgeschalten wird.

Mein Problem ist jetzt, egal ob ich die Anzeige mittels blanking oder mit einer ungültigen Eigangskombination ausschalte,
werden keine weiteren Eingaben mehr angenommen. Sprich habe ich einmal die Azeige aus, ist es mir nicht mehr möglich,
eine andere Zahl anzeigen zu lassen. (Ich muss alles von der Spannung trennen und wieder verbinden, damit es wieder funltioniert).

Ist das so gewollt, mache ich etwas falsch und wie kann ich das Problem beheben?

Mit freundlichen Grüßen

- - - Aktualisiert - - -

Guten Abend zusammen,
ich habe ein kleines Problem mit der Ansteuerung eines CD4543 (Digital zu 7-Segment wandler).

Für einen Timer habe ich 3 7-Sement anzeigen mittels Arduino angesteuert.
Die 4 Signale zum angeben der Záhl werden auf jeden CD4543 geführt,
und mittels Latch nacheinander ausgegeben.
Wenn beim Ablauf des Timers Stellen weg fallen (100 -> 99; 10 -> 9), möchte ich nicht benötigte
Anzeigeelemente ausschalten, da 009 blöd aussehen würde.

Der Eifachheit halber wollte ich statt der nutzung des blanking Pins einfach eine ungültige Zahl ausgeben,
da lt. Datenblatt die Anzige dann ausgeschalten wird.

Mein Problem ist jetzt, egal ob ich die Anzeige mittels blanking oder mit einer ungültigen Eigangskombination ausschalte,
werden keine weiteren Eingaben mehr angenommen. Sprich habe ich einmal die Azeige aus, ist es mir nicht mehr möglich,
eine andere Zahl anzeigen zu lassen. (Ich muss alles von der Spannung trennen und wieder verbinden, damit es wieder funltioniert).

Ist das so gewollt, mache ich etwas falsch und wie kann ich das Problem beheben?

Mit freundlichen Grüßen

- - - Aktualisiert - - -

Hallo Gast, laut Datenblatt sehe ich da keine Besonderheit.
Falsche oder andere Werte als 0..9 werden nicht dargestellt und da gibt es meiner Meinung nach auch keine spezielle Funktion.
Ich vermute das Problem in deiner Software.

- - - Aktualisiert - - -

Wie soll es ein Problem der Software sein,
wenn ich nur 4 Bits ausgebe, welche ich umwandeln lasse,
und dann über eine Treiberstufe das Segment ansteuere.

Es funktioniert alles reibungslos, bis ich einmal eine Kombination die nicht 0-9 ergibt anlege.
Ab dann geht nichts mehr...

Mit freundlichen Grüßen

Peter(TOO)
14.02.2017, 21:28
Hallo,

Du machst da etwas falsch oder hast etwas falsch verdrahtet.

MfG Peter(TOO)

Unregistriert
15.02.2017, 12:13
Dann würde ja alles andere nicht gehen, oder?

https://www.dropbox.com/s/7ede4bfarrj0ne3/Timer.T3001?dl=0

Das ist die Target-Datei mit Schaltplan und Laout.
Ich denke nicht, dass da etwas falsch ist, lasse mich aber gerne eines besseren belehren.



Mit freundlichen Grüßen

Peter(TOO)
15.02.2017, 15:41
Das ist die Target-Datei mit Schaltplan und Laout.
Ich denke nicht, dass da etwas falsch ist, lasse mich aber gerne eines besseren belehren.
Doch :-)

Ich kann das Target-Format nicht lesen und habe auch keine Lust Target zu installieren!

Unregistriert
15.02.2017, 21:51
Dann hilft mir dein "Doch" auch nicht viel weiter....

https://www.dropbox.com/s/ueiutwd4jz0jm10/Screenshot%202017-02-15%2022.48.58.png?dl=0
https://www.dropbox.com/s/k30sn0bsnbt5w18/Screenshot%202017-02-15%2022.49.31.png?dl=0

Ich habe mal einen Screenshot vom Schaltplan und Layout gemacht.
Vielleicht kannst du mir ja so helfen.



Mit freundlichen Grüßen

Peter(TOO)
15.02.2017, 23:37
Dann hilft mir dein "Doch" auch nicht viel weiter....
Naja, wenn du alles richtig gemacht hättest, würde es funktionieren :-)

Grundsätzlich sehe ich keinen wirklichen Fehler in der Schaltung.
Was ist mit der Software? Eine Variante wäre, dass du versehentlich die Arduino-Ausgänge als Eingänge umschaltest. Durch die Pull-Ups kannst du dann 0x0f, also einen ungültigen Wert ausgeben...

Hilft ein Hardware-Reset oder muss die Spannung weg?
Hast du einmal gemessen, welchen Strom die Schaltung aufnimmt, wenn sie blockiert ist?
Durch Spannungsspitzen (siehe Layout), kann ein Latch-Up entstehen:
https://de.wikipedia.org/wiki/Latch-Up-Effekt
Aus diesem Zustand kommt man nur durch abschalten der Spannung wieder raus, allerdings nimmt die Schaltung dann einen entsprechend hohen Strom auf.


Also zum Layout:
1. Da sind mehr Stecker im Layout als im Schema.
2. Leiterbahnen für GND und V+ können nie zu breit sein! Du hast 7 Segmente mit je 20mA, das sind 140mA. Wenn deine Leiterbahn 1 Ohm hat, erzeugt dies Spannungsschwankungen von 0.14V, dies hat du dann als zusätzlichen Eingangspegel an den Eingängen. Neben dem Ohmschen Widerstand hat jeder gerade Draht auch eine Induktivität, dies erhöht den Widerstand für schnelle Strom/Spannungsänderungen. Flankensteilheiten von 10ns entsprechen 100MHz, also schon ganz viel Hochfrequenz!
3. Die Leiterbahnführung ist grundsätzlich schlecht. Du musst jede Leiterbahn als Widerstand betrachten, je nach Strom hast du deinen Spannungsabfall. Die 140mA fliessen durch Pin 9 von IC1. Dies erzeugt einen Spannungsabfall zwischen diesem Punk und Pin 8 von X5. Dieser Spannungsabfall addiert sich dann aber zu den Eingangsspannungen an IC1. Wenn du diese Verbindung auftrennst und von Pin 9 von IC1 senkrecht nach unten fährst, fällt dieser Effekt raus. Allerdings hast du immer noch das selbe Problem mit der GND des Arduino und den Eingängen von X1.
4. Da der CD4543 Flip-Flops enthält, kann das genügen dies umzuwerfen. Es fehlen also noch Blockkondensatoren. So 100-220nF Keramik mit möglichst kurzen Leiterbahnen an X5 zwischen VSS und VDD. Ein Elko um die 140mA-Sprünge zu puffern, ist auch nicht falsch!
5. Bei 3 Stellen, ist der maximale Stromspung 3*140mA = 420mA.
6. Oft bestimmt nur die Verdrahtung ob eine Schaltung funktioniert oder eben nicht, auch wenn alle richtigen Punkt miteinander verbunden sind. Wer mal analoge Audio-Verstärker gebaut hat, kennt das Problem als hörbaren Brumm. Da hört man dann den Unterschied zwischen einer sauberen Sternmesse und einer wirren Verdrahtung. Selbiges gilt auch für die Versorgungsspannung.

MfG Peter(TOO)

Unregistriert
16.02.2017, 15:03
Danke für deine Umfangreiche Antwort.

Zum Programm:
Die Ansteuerung der Ausgänge ist immer gleich, werden also nicht als Eingänge definiert.

void digi7()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);

}
void digi8()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
}
void digi9()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
}
void digiO() <-------- Ausschalten
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
}




Was meinst du mit Hadware Reset?
Ich muss die Spannung abtrennen um das Ganze wieder zum Laufen zu bringen.
Der Arduino gibt weiterhin die Signale aus, aber die Ausgänge des CD4535 sind alle auf 0.


Im Zustand dass nichts mehr weiter geht, nimmt die Schaltung 46mA auf.



Mit freundlichen Grüßen

Peter(TOO)
16.02.2017, 15:41
Im Zustand dass nichts mehr weiter geht, nimmt die Schaltung 46mA auf.

Wie, Wo, Was hast du genau gemessen?

Wie viele deine Module sind angeschlossen?

Wie ist die ganze Stromversorgung aufgebaut?

MfG Peter(TOO)

Unregistriert
16.02.2017, 16:12
Ich verwende ein 9V Netzteil.
An dieses sind alle Bauteile angeschlossen.
(Arduino, 7-Segment Anzeige, CD4543, ULN48)

Ich habe einen Anschluss des Netzteiles getrennt und habe dort den Strom gemessen.

Oder soll ich nur den des CD4543 messen?



Mit freundlichen Grüßen

- - - Aktualisiert - - -

Ich habe derzeit 1 Modul angeschlossen

Peter(TOO)
16.02.2017, 17:30
Der Arduino läuft mit 5V oder 3.3V?

An welcher Spannung ist der CD4543 angeschlossen?

Unregistriert
16.02.2017, 19:31
Der Arduino hat einen internen Spannungsregler (5V),
ist also auch an die 9V angeschlossen.

Der CD4543 liegt an 9V.

Habe mir auch schon überlegt, dass das Problem sein könnte,
habe aber im Datenblatt nichts dazu gesehen dass Versorgung = High sein muss.

Mit freundlichen Grüßen

Peter(TOO)
16.02.2017, 21:28
Der Arduino hat einen internen Spannungsregler (5V),
ist also auch an die 9V angeschlossen.

Der CD4543 liegt an 9V.

Habe mir auch schon überlegt, dass das Problem sein könnte,
habe aber im Datenblatt nichts dazu gesehen dass Versorgung = High sein muss.

Doch, dies ergibt sich über die Pegeldefinition!

Die Ausgangspegel für 0 und 1 des Arduino stehen im Datenblatt.
0 ist <0.7V und 1 >4.2V.

Die für die CD4000er stehen auch im Datenblatt, sind aber abhängig von der Versorgungsspannung.
Bei 10V VDD ist eine 0 <3V und eine 1 >7V.

Die Werte sind Worst Case, unter, bzw. über den angegeben Spannungen wird garantiert, dass der Pegel richtig erkannt wird. Was dazwischen passiert ist Zufall und Glückssache!

- - - Aktualisiert - - -


Der Arduino hat einen internen Spannungsregler (5V),
ist also auch an die 9V angeschlossen.

Der CD4543 liegt an 9V.

Habe mir auch schon überlegt, dass das Problem sein könnte,
habe aber im Datenblatt nichts dazu gesehen dass Versorgung = High sein muss.

Doch, dies ergibt sich über die Pegeldefinition!

Die Ausgangspegel für 0 und 1 des Arduino stehen im Datenblatt.
0 ist <0.7V und 1 >4.2V.

Die für die CD4000er stehen auch im Datenblatt, sind aber abhängig von der Versorgungsspannung.
Bei 10V VDD ist eine 0 <3V und eine 1 >7V.

Die Werte sind Worst Case, unter, bzw. über den angegeben Spannungen wird garantiert, dass der Pegel richtig erkannt wird. Was dazwischen passiert ist Zufall und Glückssache!

Den CD4543 musst du mit 5V betreiben, den Treiber und die LEDs kannst du an den 9V lassen.

Unregistriert
17.02.2017, 00:08
Ok, dann habe ich das wohl überlesen.
Ich werde es morgen abend mal umbauen und testen.


Mit freundlichen Grüßen

Peter(TOO)
17.02.2017, 05:42
Hallo,

Das gilt für die ganzen Logik-Familien.
Ausser ein paar speziellen Funktionen, verhalten sich alle Eingänge gleich.
Bei den CD4000er sind die Pegel gedrittelt.
0 entspricht GND bis 1/3VDD
1 entspricht VDD bis "/3VDD
Zwischen 1/3VDD bis 2/3VDD ist der Pegel unbestimmt. Manche einzelne Gatter lassen sich in diesem Bereich sogar als analog Verstärker verwenden.

TTL-Logik verwendet
0 = <0.8V
1 = >2V
Entsprechend liefert ein TTL Ausgang <0.4V für eine 0 und >2.4V für eine 1.
Somit bleiben mindestens 0.4V für Störsignale, welche den logischen Pegel nicht verändern.


Ohne eine Pegel-Anpassung kann man normalerweise keine Logik-Bausteine mit unterschiedliche Betriebsspannungen mischen.

Auf den ersten Blick scheint man einen TTL-Eingang mit 10V CMOS ansteuern zu können, doe 10V liegen eindeutig über den geforderten 2V :)
Allerdings gibt es eine Eingangs-Schutzschaltung in den ICs. Im Allgemeinen besteht diese aus zwei Dioden, welche gegen GND und V+ geschaltet sind. Übersteigt die Eingangsspannung V+ + 0.7V leitet die Diode und es fliesst ein Strom nach V+. Der maximale zulässige Strom durch diese Dioden liegt im Bereich von 10-20 mA und steht im Datenblatt. Bei grösseren Strömen kann es zu einem Latch-Up kommen. Lässt sich der Zustand nicht vermeiden, dass die Eingangsspannung >V+ werden kann, muss man dafür sorgen, dass der Strom begrenzt wird.
Gerade bei verkabelten unabhängigen Geräten kommt dieser Zustand öfters vor: Das gerät mit den Ausgängen ist eingeschalte und dasjenige mit den Eingängen ist Aus.

MfG Peter(TOO)

Unregistriert
17.02.2017, 15:35
Ja gut die Eingangsspannung ist ja bei mir auf keinen Fall höher,
da ich ja 9V V+ und 5V Eingangsspannung habe.

Ich habe eben den CD4543 an 5V angeschlossen, es ergab sich aber leider keine Besserung...


Mit freundlichen Grüßen

Peter(TOO)
17.02.2017, 17:13
Hallo,

Bei deinem Program vermisse ich die Ansteuerung des LD-Eingangs ...
Und im Schema sehe ich auch nicht wie der angesteuert wird.

Und hast du die Kondensatoren eingebaut?

MfG Peter(TOO)

Unregistriert
17.02.2017, 17:30
Über eine Schraubklemme wird mit einer Leitung direkt die Platine der jeweiligen Anzeige verbunden.

void digiWrite(int i)
{
if (i == 1)
{
digitalWrite(le1, LOW);
delay(50);
digitalWrite(le1, HIGH);
}
else if (i == 10)
{
digitalWrite(le10, LOW);
delay(50);
digitalWrite(le10, HIGH);
}
else if (i == 100)
{
digitalWrite(le100, LOW);
delay(50);
digitalWrite(le100, HIGH);
}
}


1, 10, bzw 100 ist die Stelle

Die Anschlüsse liegen an Pin 8, 7 und 6



Mit freundlichen Grüßen