Forum: Mikrocontroller und Digitale Elektronik 7 Segmentanzeige falsch eingekauft, reagiert nur auf low.


von Jochen (Gast)


Lesenswert?

Guten Abend,

ich habe mir versehentlich eine 7 Segmentanzeige gekauft, die über ein 
low Signal zum leuchten kommt. Ich brauche aber eine, die über ein high 
Signal leuchtet. Zur Ansteuerung benutze ich den 4056.
Hat er eine Funktion, wo man einstellen kann, welche Art von 
Segmentanzeige man hat? Aus dem Datenblatt werde ich leider nicht 
schlau.

Danke
Jochen

von Otto (Gast)


Lesenswert?

Abend Jochen,

ich befürchte, daß Du ein anderes Display
benötigst - und zwar eins mit gemeinsamer
Kathode. Im Datenblatt zeigt die Wahrheits-
tabelle, daß eingeschaltete Segmente
logisch 1 sind.

Gruß Otto

von Jochen (Gast)


Lesenswert?

Hi,
ich habe rausgefunden, mann kan das bei dem IC genau umdrehen, d.h. ein 
eigentlicher high pegel ist ein low Pegel und umgekehrt.
Bei der Segmentanzeie muss das aber genau auf Masse gehen, wenn es an 
einem low Pegel anliegt, geht es nicht es muss schon auf Masse. Gibt es 
noch einen Trick?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Open-Collector-Inverter (7405) zwischen Treiber-IC und Display packen?

von Jadeclaw D. (jadeclaw)


Lesenswert?

Rufus t. Firefly wrote:
> Open-Collector-Inverter (7405) zwischen Treiber-IC und Display packen?

Würde ich auch sagen. Der 4056 ist laut Datenblatt nicht zum Treiben von 
LED-Displays geeignet. Der Innenwiderstand ist schlicht zu hoch. Bei 5mA 
fallen intern schon 5V ab. Sehr empfindliche LowCurrent-Displays könnten 
evtl. gehen. Der 4056 ist nur für LC-Displays gedacht.

Gruss
Jadeclaw.

von Peter D. (peda)


Lesenswert?

Jochen wrote:

> Bei der Segmentanzeie muss das aber genau auf Masse gehen, wenn es an
> einem low Pegel anliegt, geht es nicht es muss schon auf Masse.

???

Low = 0V
Masse = 0V

Wo ist das Problem ?


Außerdem, der 4056 ist ein LCD-Treiber, d.h. für LEDs extrem 
schwachbrüstig.

Wozu brauchst Du den überhaupt, nimm doch nen MC zum Ansteuern.


Peter

von Jochen (Gast)


Lesenswert?

Also wenn ich einen Anzeigepin auf Masse lege, leuchtet die dazugehörige 
Led in der Anzeige. Wenn ich ihn den Pin mit dem Low Pegel verbinde aber 
nicht.

Ich brauche das, weil ich vorhabe mit einen MC und externen Multiplexern 
vier 7 Segmentanzeigen anzusteurn.

von MartinS (Gast)


Lesenswert?

@Peter
> Low = 0V
> Masse = 0V

Der 2. Teil stimmt wohl, der erste nicht ganz. Das kommt auf den 
Treibenden Ausgang an. Das kann bei TTL, CMOS oder sogar bei ganz alten 
MOS ganz unterschiedlich sein. HiGH und LOW sind reine 
definitionssachen. Du könntest das auch weiter führen mit virtuellen 
Massen, dann stimmt evtl noch nicht mal mehr der zweite Teil.

von Jochen (Gast)


Lesenswert?

Also ich habe mich damit jetzt lange Zeit befasst.
Man kann an einen Eingang das anlegen, was man als low gerne haben 
würde. Wenn man da die Masse dranlegt, ist alles was auf low ist die 
Masse.

Beim 4056 kann man sowohl Anoden / als auch Kathodensegmentanzeigen 
ansteuern.

von Jochen (Gast)


Lesenswert?

... legt man an diesen speziellen Eingang nicht die Masse, ist der 
Ausgang zwar auf low, aber die Led leuchtet dann dennoch nicht

von Peter D. (peda)


Lesenswert?

Jochen wrote:
> ... legt man an diesen speziellen Eingang nicht die Masse, ist der
> Ausgang zwar auf low, aber die Led leuchtet dann dennoch nicht

Ja, bei CMOS müssen natürlich immer alle Eingänge beschaltet werden !!!


Peter

von Peter D. (peda)


Lesenswert?

Jochen wrote:

> Ich brauche das, weil ich vorhabe mit einen MC und externen Multiplexern
> vier 7 Segmentanzeigen anzusteurn.

Was meinst Du mit "externen Multiplexern" ?
LED-Multiplex-ICs (MAX7219) brauchen keine Dekoder.

Willst Du statisch ansteuern, nimm einfach nen 74HC595 pro Digit, dann 
ist auch gleich der Dezimalpunkt angeschlossen.
Die haben deutlich mehr Bums, als der schlappe 4056 (LED-Vorwiderstände 
nicht vergessen !).
Und weniger Pins (3 insgesamt) zum MC sinds auch.
Und Sonderzeichen gehen auch.


Peter

von Jochen (Gast)


Lesenswert?

Ja Danke Peter, dann werde ich das mal so versuchen.
Wobei der Max ja schon sehr teuer ist, dann evtl doch lieber einen 
zweiten MC, einen für die Stunden und einen für die Minuten oder so. Mal 
sehn..

Ich habe noch eine Frage. Ich weiß für Euch ist das eine dumme Frage, 
aber ich habe von Elektrotechnik keine Ahnung und bin froh wenn ich das 
weiß.
Ich habe ja das my AVR board und das arbeitet mit 3,6864 MHZ.
Wenn ich mir jetzt einen MC im Internet bestelle, würde ich da auch 
gerne diesen Takt aufbauen.
Was brauch ich da jetzt genau für Bauteile? Wir hatten diese Frage ja 
schon einmal aber leider war mir das zu ungenau. Ich wusste nicht, was 
ich genau bestellen soll. Und Fehlbestellungen habe ich schon so viele 
gehabt, dass ist bei den hohen Portokosten ziemlich ärgerlich. Und wenn 
ich dann einen falschen Kondensator habe, muss ich  5 Euro Porto zu 
bezahlen, nur um einen 20 Cent Kontensator zu bestellen.
Könntet ihr mir vielleicht genau sagen, was ich dazu brauche?

von Marvin M. (marvin)


Lesenswert?

Wenn Du dieses Hobby ernsthaft verfolgen möchtest, würde ich Dir 
anraten, einige Sortimente zu bestellen. Die gibt es eigentlich bei 
jedem Elektronik-Versender, z.B. bei Reichelt.de
Ein Elko-, ein Kondensator- und ein Widerstandssortiment darfs schon 
sein, denn meist ist man gerade am Basteln und könnte irgendeinen 
anderen Wert gebrauchen - und dann hat man ihn nicht...
Zu Deiner Frage: Du brauchst 2 27pF-Kondensatoren und einen 3,6864 MHz 
Quarz. Alternativ ginge auch ein entsprechender Quarzoszillator (auf die 
richtige Einstellung der Fuses achten).

von Jochen (Gast)


Lesenswert?


von dennis (Gast)


Lesenswert?

Hi,

ULN2803 oder ULN2804. 8Bit open collector darlington driver.das ist ein 
standard bauteil, den kannst du auch noch für viele weitere dinge 
nutzen.

8 leitungen reichen für die segmente a-g und den dp.

die 4 leitungen für die 4 gem Anoden der 7segmentanzeigen kannst du dann 
über 4 kleine p-channel fets zb.:bs250 schalten.

du benötigst dann 12 pins am controller und die bauteile kosten nicht 
viel, sind in hmd zu haben, lassen sich also schön verbasteln....

d.

von Hannes L. (hannes)


Lesenswert?

Und wenn Du nur Kleinmengen kaufst, dann solltest Du mal bei CSD 
(komplette Adresse in der Linksammlung oder bei Google) reinschaun. Da 
sind die Versandkosten bei Kleinmengen moderat weil die auch per Brief 
versenden. Und bei Quarzen, Kondensatoren, Widerständen und Co liegen 
die Preise teils unter Reichelt, AVRs sind auch sehr preiswert.

Dies ist keine Werbung, ich verdiene nix daran...

...

von dennis (Gast)


Lesenswert?

bei den kerkos nimm mal auch noch ein paar 22iger und 33iger, dann bist 
du schon gut gerüstet

dein quarz ist ein smd typ, es gibt den typen auch noch mit beinchen...

aus dieser reihe:

8,0000-HC49U-S

nur andere frequenz.


ULN 2804A Darlington-Arrays, DIL-18 =TD 62084AP 0,39 € 1

BS 250 TRANSISTOR 0,26 € 1

und deinen led 7 segment anzeigen. es gibt natürlich noch 100 andere 
möglichkeiten, aber hier könntest du schön etwas zum multiplexing 
lernen....

übrigens heißen die, die sich mit einem low signal ansteuern lassen, 
"mit gem Anode" da ihre +seiten alle zusammen an einem pin herausgeführt 
sind, und die die sich mit einem high signal ansteuern lassen "mit gem 
K" da alle ihre -seiten gemeinsam, an einem, aber meist zwei pins 
herausgeführt sind...

Gruß,
d.



von Jochen (Gast)


Lesenswert?

Okay, ich habe jetzt viele Bauteile bestellt.
Wie genau müsste ich die ein den MC anschließen?

von dennis (Gast)


Lesenswert?

vielleicht solltestb du nicht so schnell bestellen, und erstmal das 
schaltungsumfeld klären...

d.

von Jochen (Gast)


Lesenswert?

Ich habe es nicht abwarten können und habe heute schon mit meiener Idee 
etwas aufgebaut.

Und zwar habe ich eine kleine Schaltung gemacht.
Da sind zwei 7 Segmentanzeigen, die jeweils über  einen IC angesteuert 
werden.
Davor habe ich Multiplexer eingebaut.
Wenn den Steuereingang auf 1 lege, kann ich Anzeige 1 beschrieben.
Lege ich ihn auf 0, so kann ich Anzeige 2 beschreiben.

Dann wollte ich mir ein Assemblerprogramm machen, wo PORT C den 
Steuereingang übernimmt.
Erst wird PORTC eingeschaltet und auf den Ausgang die Zahl "1" gelegt. 
Sie sollte auf Anzeige 1 erscheinen.
Dann wird PORTC ausgeschaltet und auf den Ausgang eine "4" gelegt, die 
so auf Anzeige 2 erscheinen soll.

Das in eine Schleife gepackt und ich habe gedacht, man sieht auf Anzeige 
1 eine "1" und auf Anzeige 2 eine "4".
Wieso funktioniert das nicht, ich sehe auf beiden nichts vernünfiges.

Hier das Programm:


ldi r22, 0b00000001
out PORTC, r22
ldi r21, 0b00000001
out PORTB,r21

ldi r22, 0b00000000
out PORTC, r22
ldi r21, 0b00000100
out PORTB,r21
rjmp loop

von Jochen (Gast)


Lesenswert?

Hier das Programm komplett

.include "m8def.inc"
.def temp = r16



main:                         ; hier beginnt das Hauptprogramm

         ldi temp, LOW(RAMEND)
         out SPL, temp
         ldi temp, HIGH(RAMEND)
         out SPH, temp

         sbi DDRB,0
sbi DDRB,1
sbi DDRB,2
sbi DDRB,3
sbi DDRC, 0
loop:

ldi r22, 0b00000001
out PORTC, r22
ldi r21, 0b00000001
out PORTB,r21

ldi r22, 0b00000000
out PORTC, r22
ldi r21, 0b00000100
out PORTB,r21
rjmp loop

von Jochen (Gast)


Lesenswert?

Es leuchten immer die Segmente von der 0 etwas schwach, aber gut 
erkennbar. Ds Multiplexen scheint nicht schnell genug zu gehn. Was kann 
man machen?

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

> Was kann man machen?

Systematisch herangehen und nicht wild draufloswurschteln...

Mit "Multiplexing" meinte ich nicht den Einsatz weiterer ICs, sondern 
das softwaremäßige Multiplexen der einzelnen Anzeigen. Das bedeutet, 
dass immer nur eine Anzeige aktiv ist, die Anzeigen also der Reihe nach 
aktiviert werden, und das so schnell, dass es so aussieht, als ob alle 
gleichzeitig leuchten würden.

Dazu schaltet man die Segmentleitungen aller Anzeigen (also a,b,c,d,e,f 
und ggf. auch dp) parallel und schließt sie über Vorwiderstände 330 Ohm 
an einem Port mit 7 oder 8 Portpins an. Das wäre bei Deinem Mega8 der 
PortD, da PortB und PortC keine volle 8 Bit Breite haben (PB6 und PB7 
wird ja vom Quarz blockiert).

Dann brauchst Du für jede Anzeigestelle einen Transistor als 
Digit-Treiber. Da Du Displays mit gemeinsamer Anode pro Ziffer hast, 
müssen die Digit-Treiber die Highside (also Plus) schalten. Dazu sind 
PNP-Transistoren mit Basiswiderständen in Emitterschaltung geeignet, die 
mit L-Pegel angesteuert werden. Man kann aber auch NPN-Transistoren in 
Kollektorschaltung (als Emitterfolger) einsetzen, das spart die 
Basiswiderstände, verursacht aber einen zusätzlichen Spannungsabfall.

Die Vorgehensweise im Programm ist folgende:
Mittels Timer erzeugt man regelmäßige Interrupts. In diesen zählt man 
den Sekunden-Vorteiler runter (oder hoch), also den Zähler, der bei Dir 
den Zählumfang von 225 haben wird.
Dann zählt man einen Zähler (Zählumfang = Anzahl der angeschlossenen 
Ziffern) hoch oder runter, der bestimmt, welche Anzeige gerade dran ist.
Jetzt wird die zuvor aktive Anzeigestelle durch Abschalten Ihres 
Transistors ausgeschaltet. Danach wird der Z-Pointer auf die Tabelle mit 
den Bitmustern der Ziffern gesetzt, der BCD-Zahlenwert (0..9) der 
betreffenden Stelle zum Z-Pointer addiert und mit LPM das Bitmuster aus 
der Tabelle geholt, um es an den Port mit den Segmenten auszugeben. 
Danach wird der entsprechende Transistor eingeschaltet, worauf die 
Segmente leuchten, die L-Pegel bekommen haben.

Du musst also die anzuzeigenden Zahlen im BCD-Format vorliegen haben.

Ich hänge Dir mal ein Beispiel für den Tiny2313 an, das eine 
dreistellige Ziffernanzeige und eine 3x4-Tastenmatrix im Multiplex 
abfragt und eine Art Eieruhr darstellt. Versuche einfach mal, Teile des 
Codes nachzuvollziehen. Denn ich denke, Du gehst zu blauäugig heran und 
siehst die Probleme nicht, die noch auf Dich zukommen werden.
Der Code des Beispiels hat noch enormes Verbesserungspotential, sollte 
aber geeignet sein, Dir die Vorgehensweise zu zeigen.

...

von Karl H. (kbuchegg)


Lesenswert?

> Und zwar habe ich eine kleine Schaltung gemacht.
> Da sind zwei 7 Segmentanzeigen, die jeweils über  einen IC
> angesteuert werden.
> Davor habe ich Multiplexer eingebaut.

Was hast du genau verbaut und wie angeschlossen.

Mach mal einen Schaltplan davon bzw. ein Photo auf dem man
auch erkennen kann welche Pins du wie miteinander verbunden
hast.

> Es leuchten immer die Segmente von der 0 etwas schwach,
> aber gut erkennbar.

Deutet auf gröbere Fehler hin.

> Ds Multiplexen scheint nicht schnell genug zu gehn.

Das kann ich mir nicht vorstellen. Nicht bei deinem
Programm. Der µC schaltet die Ports geschätzte >200000
mal pro sekunde um. Wenn das nicht schnell ist, was dann?

> Was kann man machen?

Mit den Grundlagen anfangen. Und sich erst dann zu den
schwierigeren Themen vortasten, wenn die Einfachen funktionieren.

von Jochen (Gast)


Lesenswert?

Hi Hannes, danke für die ausführliche Beschreibung. Ich werde diesen Weg 
auf jeden Fall ausprobieren. Hab jetzt wie du meintest den BC337 dafür 
viermal bestellt.

Aber mal eine andere theoretische Frage:
Angenommen, ich wollte zwei Anzeigen multiplexen und zwar welche  mit 
gemeinsamer Anode.
Kann ich dann nicht beide Anoden an jeweils einen Port vom PC 
anschließen und dann so vorgehen:

Schalte ANzeige 1 ein über  das Setzen von 1 am MC.
Beschreibe Anzeige 1

Schalte ANzeige 1 aus
Schalte Anzeige 2 ein
Beschreibe Anzeige 2
Schalte Anzeige 2 aus

und alles wieder von vorne. Also die Steuerung nicht über Transistoren, 
sondern über Ports am MC vornehemen.

von Jochen (Gast)


Lesenswert?

also die Daten werden immer an beide Anzeigen geschickt aber nur die 
eingeschaltete kann sie auch darstellen.

von Jochen (Gast)


Lesenswert?

Bevor ich jetzt wieder den ganzen Tag löte würde ich gerne wissen ob das 
so funktioniert ;)

von Hannes L. (hannes)


Lesenswert?

Eine 7-Segment-Ziffernanzeige ist nix anderes als ein Gehäuse mit 7 (8) 
einzelnen LEDs. Diese sind "an einer Seite" zusammengefasst, um Pins zu 
sparen. In Deinem Fall sind die Anoden zusammengefasst. Die einzelnen 
Kathoden werden mit L-Pegel (über Widerstände, die den Strom auf 10mA 
begrenzen) angesteuert. Die gemeinsame Anode muss an Plus geschaltet 
werden. Dabei fließt der Gesamtstrom aller aktiven Segmente. Ist Dein 
AVR-Portpin in der Lage, diesen Strom direkt zu schalten? Meine AVRs 
können das nicht, deshalb benutze ich einen Transistor als 
Schaltverstärker.

...

von Jochen (Gast)


Lesenswert?

Also ich habe es versucht. Es funktioniert, aber die Segmente, die nicht 
leuchten sollte leuchten ganz schwach auf. Kann man das noch 
unterbinden?
Ich habe 2 Anzeigen testweise angeschlossen.

Port D ist der Steuerport, mit dem die Anoden geschaltet werden.
Port B ist der Port, auf dem die Zahlen ausgegeben werden.

Die Ausgänge von MC bei Port B sind mit einem 4056 verbunden, der 7 
Segmentanzeigen ansteuert. Am 4056 sind die beiden Segmentanzeigen 
angeschlossen, d.h. die Ausgänge von 4056 gehen an alle beide Anzeigen.


Das Programm sieht so aus

main:                         ; hier beginnt das Hauptprogramm

         ldi temp, LOW(RAMEND)
         out SPL, temp
         ldi temp, HIGH(RAMEND)
         out SPH, temp

         sbi DDRB,0
     sbi DDRB,1
     sbi DDRB,2
     sbi DDRB,3

     sbi DDRD,2
     sbi DDRD,3


loop:

ldi r20, 0b00000100
out PORTB, r20

ldi r21, 0b00000100
out PORTD, r21

ldi r20, 0b00000010
out PORTB, r20

ldi r21, 0b00001000
out PORTD, r21


rjmp loop



Aber wie gesagt, die Segmente, die nicht aufleuchten sollen, leuchten 
zwar sehr schwach aber sie leuchten. Kann man sie ausschalten?

von Jochen (Gast)


Lesenswert?

komischerweise ist das auch nur bei manchen Zahlen so.
Die 9 funktioniert absolut problemlos.
Bei der 2 habe ich das beschriebene Porblem.

von R. M. (rmax)


Lesenswert?

Jochen wrote:
> Aber wie gesagt, die Segmente, die nicht aufleuchten sollen, leuchten
> zwar sehr schwach aber sie leuchten. Kann man sie ausschalten?

Hehe, das erinnert mich an meine erste Multiplex-Anzeige (eine 8x16 
LED-Matrix), die ich Anfang der 90er als Azubi gebaut habe, da hatte ich 
genau den gleichen Anfängerfehler gemacht.

Da Du den Inhalt und die Stellenauswahl nicht gleichzeitig sondern nur 
nacheinander umschalten kannst, wird immer für einen kurzen Moment der 
Inhalt der einen Stelle auf dem anderen Display angezeigt. Um das zu 
umgehen gibt es zwei Möglichkeiten:

1. Laß die Schleife nicht mit maximaler Geschwindigkeit laufen, sondern 
füge an den Stellen, wo die Ausgabe "gültig" ist, Warteschleifen ein. 
Dadurch wird der korrekte Inhalt im Verhältnis viel länger angezeigt als 
die Umschalt-Artefakte, so daß man diese nicht mehr wahrnehmen kann. Die 
Schleifen kannst Du so einrichten, daß möglichst selten zwischen den 
Stellen gewechselt wird, aber noch kein Flimmern zu sehen ist, also so 
zwischen 50 und 100Hz.

2. Schalte übre PORTD jeweils alle Anzigen aus, bevor Du den Inhalt 
umschaltest, dann kannst Du weiterhin mit voller Geschwindigkeit 
multiplexen und bist trotzdem die Artefakte los.

Falls beides nicht hilft, vermute ich ein Schaltungsproblem oder 
eingeschaltete Pullup-Widerstände.

BTW, warum schaltest Du an Port B eigentlich nur die unteren vier Pins 
auf Ausgang?

von Jochen (Gast)


Lesenswert?

Ich habe die zweite Varriante von dir gemacht und sie funktioniert. Ich 
danke Dir!
Ich schalte nur die 4 Ports auf Ausgang, weil ich nur die brauche.

Allerdings ist jetzt das ganze etwas dunkler geworden und ich muss schon 
das Licht ausmachen um es erkennen zu können. Insgesamt ist es dunkler, 
wenn ich die Stromversorgung der Anzeige an den MC anschließe.
Ich habe an der Segmentanzeige um die 300 ohm Vorwinderstände. Ich denke 
mal wenn ich sie kleiner wähe, so ein paar ohm dann wird die Anzeige 
auch heller werden.

von Thomas (kosmos)


Lesenswert?

oder du nimmst einfach ein paar Latches denen übergibst du die Werte und 
fertig diese versorgen dann die LEDs selbstständig und du hast den Port 
für andere Aufgaben wieder frei. Ich habe das mal mit 74HC573N gemacht, 
aber du brauchst das ganze ja invertiert. Gibt aber bestimmt ein 
Gegenstück davon.

von Hannes L. (hannes)


Lesenswert?

> Die Ausgänge von MC bei Port B sind mit einem 4056 verbunden, der 7
> Segmentanzeigen ansteuert. Am 4056 sind die beiden Segmentanzeigen
> angeschlossen, d.h. die Ausgänge von 4056 gehen an alle beide Anzeigen.

Lies nochmal weiter oben diesen Beitrag von Peter:
Beitrag "Re: 7 Segmentanzeige falsch eingekauft, reagiert nur auf low"
Und dann entscheide Dich, ob Du Multiplexing in Software machen willst 
(dazu brauchst Du nur neben dem AVR und den Segment-Widerständen nur 
einen Transistor je Anzeigestelle) oder ob Du mit zusätzlichen ICs 
arbeiten willst (dazu brauchst Du für jede Anzeigestelle einen 
zusätzlichen IC oder einen teuren Spezial-IC). Aber dann nimm geeigneten 
ICs, siehe Link.

...

von jochen (Gast)


Lesenswert?

Also ich komme jetzt mit einem IC für alle 4 Anzeigen aus.
Und zwar schicke ich die Daten über den IC an jede Anzeige.
Dann sende ich nacheinander erst die Minuzen zehnerstelle, dann 
Minuteneinerstelle. Dann die Stunden.
Jedoch ist nur die Anzeige, die auch gerade dran ist eingeschaltet, die 
anderen sind ausgeschaltet.
Die Anoden der Anzeigen sind auch mit dem MC verbunden.
So funktioniert es problemlos, ohne weitere Transistoren. Ach die 
Helligkeit habe ich in den Griff bekommen.
Danke für Eure Tipps, hat mir viel geholfen es über das ein und 
Ausschalten der ANoden zu machen!

von jochen (Gast)


Lesenswert?

@Thmoas

Meinst du ich soll die Werte anstatt direkt auf die Anoden zu leiten 
erst in Flip Flops schicken  und die Ausgänge der FFs sind mit den 
Anoden verbunden?

von jochen (Gast)


Lesenswert?

Ich habe mir gestern Transistoren besorgt und egal ob ich mit den 
Transistoren oder dem MC schalte, die Anzeige ist schon was dunkel. Es 
funktioniert alles, aber etwas heller ist nicht schlecht.
Was meintest du mit den Latches, Thomas?
Gibt es weitere Ideen?

von Hannes L. (hannes)


Lesenswert?

jochen wrote:
> Ich habe mir gestern Transistoren besorgt und egal ob ich mit den
> Transistoren oder dem MC schalte, die Anzeige ist schon was dunkel. Es
> funktioniert alles, aber etwas heller ist nicht schlecht.

Wozu benutzt Du eigentlich den 4056? Welche Aufgabe soll er erfüllen?
Er ist nicht zum Treiben von LED-Anzeigen geeignet, er bringt die 
erforderlichen Ströme nicht, die Anzeige ist deshalb zu dunkel.

Es wird bedeutend einfacher, billiger und heller, wenn Du ihn ersatzlos 
streichst. Stattdessen solltest Du die Segmente aller 4 Anzeigen (über 
Widerstände 330 Ohm) direkt an den AVR anschließen. Um sie alle an einen 
Port zu bekommen (damit die Programmierung einfacher wird), solltest Du 
sie an PortD des Mega8 anschließen, denn von PortB blockiert der Quarz 
ja zwei Bit und PortC hat eh' nur 6 Bit. Das Prinzip, wie die Software 
funktioniert, findest Du in meinem Eieruhr-Beispiel weiter oben.

> Gibt es weitere Ideen?

Nicht mehr lange, denn es entsteht der Eindruck, dass dich die gut 
gemeinten Hinweise nicht wirklich interessieren. Da ist es eigentlich 
schade um die Zeit, die man Dir widmet.

...

von jochen (Gast)


Lesenswert?

Ich würde so gerne über meinen Ansatz zum Ziel kommen, durch das 
Beispiel oben blick ich nicht durch.
Wenn ich die Andoe an den Segmentanzeigen seperat an den Plus Pol liege, 
leuchtet die Anzeige schön hell (Dann aber leider nicht mit korrektem 
Inhalt, da sie ja zur falschen Zeit eingeschaltet ist). Ich vermute also 
einen Fehler beim Multiplexen.
Wieso kann man das Multiplexen  denn nicht so machen, wie ich 
geschrieben habe (zumindest nur mit dunkeln Anzeigen) , sondern muss so 
wie bei dir vorgehen?

von Peter D. (peda)


Lesenswert?

jochen wrote:
> Ich habe mir gestern Transistoren besorgt und egal ob ich mit den
> Transistoren oder dem MC schalte, die Anzeige ist schon was dunkel.

Ich habs doch schonmal gesagt:
"Außerdem, der 4056 ist ein LCD-Treiber, d.h. für LEDs extrem 
schwachbrüstig."


Wennn Du mir nicht glaubst, liest doch mal das Datenblatt:

Bei 10V sind max 1,6mA angegeben, bei 5V muß es also noch wesentlich 
weniger sein.


Peter

von jochen (Gast)


Lesenswert?

Klar glaub ich dir, ich kann mir nur nicht erklären warum es ohne 
Multiplexen  hell wird, auch mit diesem IC. Erst wenn ich das multiplexe 
so mache wie ich geschriben habe gibt es ja die Probleme und ich weiß 
nicht was das mit dem IC zu tun haben soll.
Wieso machst du bei der Eieruhr das Multiplexen auf diese Art und Weise 
und was spricht gegen meine Methode, das einfache umschalten zwischen 
den Anoden und ausgeben, also ohne Interrupt usw?

von Peter D. (peda)


Lesenswert?

jochen wrote:

> Wieso machst du bei der Eieruhr das Multiplexen auf diese Art und Weise
> und was spricht gegen meine Methode, das einfache umschalten zwischen
> den Anoden und ausgeben, also ohne Interrupt usw?

Ohne Interrupt hast Du keine Kontrolle über die Multiplexfrequenz.

Aber je höher die Multiplexfrequenz, umso größer der Einfluß der 
Befehlszeiten auf die Leuchtdauer und damit auf die Helligkeit. Und bei 
Treibertransistoren in Emitterschaltung kommt noch deren Schaltzeit 
(Miller-Kapazität) hinzu.


Ich hab noch nie versucht, ohne Timerinterrupt zu multiplexen. Aber ich 
hab schon diverse Versuche von anderen gesehen, um einzuschätzen, daß 
das großer Mist ist.


Peter

von jochen (Gast)


Lesenswert?

Also ich habe jetzt 18 V genommen, damit ist es auch nach meinem Weg zur 
einer hellen Anzeige gekommen, somit geht die Uhr erstmal

Natürlich möchte ich eure bessere Lösung bauen.

In Anlehnung an

"Mittels Timer erzeugt man regelmäßige Interrupts. In diesen zählt man
den Sekunden-Vorteiler runter (oder hoch), also den Zähler, der bei Dir
den Zählumfang von 225 haben wird.
Dann zählt man einen Zähler (Zählumfang = Anzahl der angeschlossenen
Ziffern) hoch oder runter, der bestimmt, welche Anzeige gerade dran ist.
Jetzt wird die zuvor aktive Anzeigestelle durch Abschalten Ihres
Transistors ausgeschaltet. Danach wird der Z-Pointer auf die Tabelle mit
den Bitmustern der Ziffern gesetzt, der BCD-Zahlenwert (0..9) der
betreffenden Stelle zum Z-Pointer addiert und mit LPM das Bitmuster aus
der Tabelle geholt, um es an den Port mit den Segmenten auszugeben.
Danach wird der entsprechende Transistor eingeschaltet, worauf die
Segmente leuchten, die L-Pegel bekommen haben."


Ich erzeuge mit einem Timer also ein Interrupt (Wieviele Timer gibt es 
beim Mega 8, ich brauche einen ja für die Uhr selebr).
Wenn dieses Interrupt erzeugt ist, bestimme ich über eine Schleife einen 
Transistor in der festgelegt wird welchet Transistor dran ist. Soweit 
auch verstanden. Was meinst du mit Sekunden Vorteiler und dem Counter 
der bei mir 255 ist, wozu soll das dienen?


von Hannes L. (hannes)


Lesenswert?

jochen wrote:
> Ich würde so gerne über meinen Ansatz zum Ziel kommen, durch das
> Beispiel oben blick ich nicht durch.

Dann schau bitte nochmal ins Datenblatt Deines 4056 und Deiner 
Ziffernanzeigen. Vergleiche dabei die Segment-Ströme.

> Wenn ich die Andoe an den Segmentanzeigen seperat an den Plus Pol liege,
> leuchtet die Anzeige schön hell (Dann aber leider nicht mit korrektem
> Inhalt, da sie ja zur falschen Zeit eingeschaltet ist). Ich vermute also
> einen Fehler beim Multiplexen.

Kann ich jetzt nicht nachvollziehen, da ich mir Deinen Codewirrwarr 
nicht antue.

> Wieso kann man das Multiplexen  denn nicht so machen, wie ich
> geschrieben habe (zumindest nur mit dunkeln Anzeigen) , sondern muss so
> wie bei dir vorgehen?

Nein, es muss nicht wie bei mir vorgehen. Mein Beispiel beruht auf einem 
Sonderfall. Die Hardware, auf der das Beispiel läuft, war nämlich schon 
vor ein paar Jahren aufgebaut worden und mit einem AT90S1200 für einen 
völlig anderen Zweck eingesetzt. Sie wird für diesen Zweck nicht mehr 
gebraucht, weshalb ich sie zum Experimentieren mit einem Tiny2313 
missbrauchte. Mein Multiplexing ist etwas komplexer, da es neben der 
Ausgabe der Ziffern noch das Einlesen der Tastenmatrix, die teilweise 
dieselben Portpins wie die Segmente nutzt, erledigt.

Du hast am Mega8 aber bedeutend mehr I/O-Pins, was das Multiplexing 
bedeutend vereinfacht.

Du hast doch 225 Timer-Interrupts pro Sekunde. Dort würde ich ansetzen. 
Das ist zwar relativ langsam, lässt aber Platz für uneffiziente 
Programmierung, die nunmal jeder Anfänger hat.

Gehen wir mal davon aus, dass Du 4 Register hast, in denen die 
Ziffernwerte der 4 Anzeigen stehen. Nehmen wir an, es ist r16, r17, r18 
und r19. Und nehmen wir an, r20 sei der Stellenzähler für das 
Multiplexing.
Dann muss zum Multiplexen im Timerinterrupt (neben den anderen Aufgaben 
des Interrupts) folgendes passieren (einfache, unkomplizierte Variante):

- alle Transistoren für die Anoden ausschalten
- Z-Pointer auf Beginn der Bitmustertabelle setzen
- Stellenzähler erhöhen, dabei den Zählumfang begrenzen (0..3)
- anhand des Stellenzählers auf eine von 4 Routinen verzweigen

Jede der 4 Routinen macht nun Folgendes:

- den Inhalt des zugehörigen Ziffernregisters zum Z-Pointer addieren
- mit LPM das Bitmuster aus der Tabelle lesen (das steht dann in r0)
- mit out das Bitmuster an die Segmente anlegen
- den Transistor für die entsprechende Anode einschalten

Wichtig (damit's nicht flimmert) ist dabei, dass Du immer zuerst den 
Transistor für die Anode (aller Anoden dürfte einfacher sein) 
ausschaltest, dann erst das neue Bitmuster ermittelst (Tabellenzugriff) 
und erst nach dem Update des Bitmusters an den Segmenten die zugehörige 
Anode einschaltest.

Noch ein paar Tips zum Verständnis meines Beispiels:
Meine Multiplex-Zeitscheibe läuft von 10 bis 1 rückwärts, hat also 10 
Zustände. In Zustand 10 wird die Tastenmatrix abgefragt. In Zustand 3, 6 
und 9 wird die Hunderter-Stelle bedient, in Zustand 2, 5 und 8 die 
Zehnerstelle und in bei 1, 4 und 7 die Einerstelle. Somit klappert das 
Anzeige-Multiplex drei mal rundherum und macht dann eine Runde Pause, in 
der die Tasten abgefragt werden. Ich hätte auch mit 4 Zuständen arbeiten 
können, wollte aber die Pause klein halten und habe so statt 25% 
Leuchtdauer jedes Segmentes 30% (3 mal 10%) Leuchtdauer. Da Du keine 
Tasten am Segment-Port hast, kannst Du mit einer Zeitscheibe von 4 
Zuständen arbeiten. Somit bekommt jede Stelle 25% Leuchtzeit.

Die Routinen multiplex1, multiplex2 und multiplex3 prüfen, ob die 
Zeitscheibe (mux) einen Zustand hat, in dem die zugehörige Routine 
multiplex1a (..2a, ..3a) zuschlagen muss. Hier wird jeweils auf 3 
Zustände geprüft, Du brauchst nur auf jeweils einen Zustand prüfen, hast 
dafür aber 4 Stellen zu bearbeiten.

Die a-Routine kopiert dann den entsprechenden Ziffernwert ins 
Arbeitsregister (wl), ruft das Unterprogramm 'setseg' auf (das die 
Segmente setzt) und schaltet nach Rückkehr aus dem Unterprogramm den 
entsprechenden Transistor für die Anode der Anzeigestelle ein. Das 
Auslagern der Decodierarbeit (BCD zu 7-Segment) in eine eigene Routine 
verkleinert den Code.

Das Unterprogramm 'setseg' setzt den Z-Pointer auf den Beginn der 
Tabelle namens 'bimu' das die Bitmuster (0 = eingeschaltet, 1 = aus) für 
die Segmente enthält. Der erste Eintrag (Offset 0) steht für die 0, dann 
folgt 1, 2, .. 9. Nun wird der in wl liegende Ziffernwert zum Z-Pointer 
addiert um den Pointer nicht mehr auf den Anfang der Tabelle, sondern 
auf das gewünschte Byte der Tabelle zu platzieren. LPM wl,z kopiert das 
Byte aus der Tabelle (die übrigens im Flash steht) in das 
Arbeitsregister wl, dabei wird zwar der Ziffernwert überschrieben, aber 
den braucht jetzt keiner mehr, es war eh' nur eine Kopie. Und dieses 
Bitmuster (in wl) wird jetzt sofort an den Port für die Segmente 
ausgegeben. Nun geht's mittels RET zurück zu der Stelle, die dieses 
Unterprogramm aufgerufen hat.

Du musst doch zugeben, dass der Softwareaufwand für das Decodieren von 
BCD zu 7-Segment (7 Befehle und 10 Bytes Flash-Tabelle) im Verhältnis 
zum Gesamtprogramm verschwindend klein ist und sich daher der Einsatz 
eines Decoder-Chips (und der damit verbundene Platinenaufwand) nicht 
gerechtfertigt ist.

Natürlich gibt es auch Anwendungen, in denen die I/O-Pins knapp sind. Da 
greift man dann gerne zur bitseriellen Ausgabe per Schieberegister. Aber 
Dein Mega8 hat für eine einfachr Uhr genügend I/O-Pins für den direkten 
Anschluss aller Komponenten.

...

von Hannes L. (hannes)


Lesenswert?

Sorry, da war ich wohl sehr langsam...

> Ich erzeuge mit einem Timer also ein Interrupt (Wieviele Timer gibt es
> beim Mega 8, ich brauche einen ja für die Uhr selebr).

Wieviele Timer der Mega8 hat, steht im Datenblatt. Dort steht auch, wie 
sie funktionieren.

Das Multiplexing übernimmt der Uhrentimer nebenbei. Es wäre unklug, 
dafür einen anderen Timer einzusetzen. Wenn alles von einem Timer 
gemacht wird, dann kann es nicht zu Interrupt-Verzögerungen kommen. Dein 
Uhrentimer schlägt alle 64*256 Takte zu, Du hast also 16k Takte Zeit. 
Dein AVR wird die meiste Zeit im Sleep verbringen können...

...

von jochen (Gast)


Lesenswert?

Hannes, vielen Dank, dass Du dir die Mühe gemacht hast und das so toll 
beschrieben hast.

Eine Sache habe ich noch nicht verstanden und zwar wie genau jetzt die 
Binärzahl in den Code für die segmentanzeigen umgerechnet wird und 
welche Rolle der Z Pointer dabei spielt.
Könntest Du mir das erklären oder hast du evtl. Links wo ich das 
nachlesen kann?

von jochen (Gast)


Angehängte Dateien:

Lesenswert?

Ich mache das dann so wie in dem Anhang in der Zeichnung ok?



Kann ich das mit einem BC337 machen, den Du in einem anderen Beitrag 
genannt hast?

von jochen (Gast)


Lesenswert?

Ich frage deshalb, weil du 2 Möglichkeiten nanntest, wie man das mit 
Transistoren machen kann und ich bin mir nicht sicher, ob der BC337 für 
meine angestrebte Lösung geeignet ist.

von Hannes L. (hannes)


Lesenswert?

Deine Zeichnung ist falsch. Sie würde auch AVR oder Transistor 
beschädigen, da der Basis-Strom des Transistors nicht begrenzt wird.

Du musst auch keine Kathode nach GND (Minus) schalten,
sondern eine Anode nach Vcc (Plus). Denn Deine Kathoden sind ja die 
Segmente, oder?

Um nun die Anoden der Displays nach Plus zu schalten, kannst Du einen 
PNP-Transistor (z.B. BC327) in Emitterschaltung betreiben, also mit 
Emitter an Plus schalten, Kollektor kommt dann an die Anode des Diaplays 
und die Basis über einen Basiswiderstand von 1k an den AVR-Portpin. Ein 
L-Pegel (eine Null) am Portpin schaltet den Transistor ein.

Du kannst aber auch einen NPN-Transistor in Kollektorschaltung (auch 
Emitterfolger genannt) einsetzen, dann kommt Kollektor an Plus, Emitter 
an die Anode des Displays und die Basis an den AVR-Portpin. Ein 
Basiswiderstand ist nicht erforderlich, wenn die Schaltung fehlerfrei 
ist. Kannst Du die fehlerfreie Schaltung nicht garantieren (z.B. beim 
"mal probieren"), solltest Du einen Basiswiderstand vorsehen, um AVR und 
Transistor vor Überstrom zu schützen. In dieser Schaltung 
(NPN-Emitterfolger) wird der Transistor mit H-Pegel (1) eingeschaltet.

Funktion des Decoders:
Du kennst eine Tabelle (Winkelfunktionen, Quadratzahlen, Logarithmus, 
...)?? Man nimmt dabei den gegebenen Wert als Index und liest den 
gesuchten Wert ab.

Oder: Man erstellt sich 10 Bitmuster, von denen jedes eine Ziffer auf 
der 7-Segment-Anzeige darstellt, also für jedes Segment, das leuchten 
soll eine 0 für den entsprechenden Portpin enthält und für jedes 
Segment, das nicht leuchten soll eine 1. Diese 10 Bytes liegen im Flash 
direkt hintereinander und sind mit der .db-Direktive definiert. Um den 
Anfang wiederfinden zu können, wird direkt vor dieser Tabelle das Label 
"bimu:" gesetzt, was soviel wie Bitmuster bedeuten soll. Um nun das 
richtige Byte zur gewünschten Ziffer auszuwählen, setzt man den 
Z-Pointer (siehe Beschreibung des Z-Pointers r31:r30 im Datenblatt und 
Instructionsset) auf den Anfang der Tabelle (das Label bimu), addiert 
den Ziffernwert (0..9) als Index auf das benötigte Byte dazu und greift 
mit LPM (siehe Beschreibung des LPM-Befehls im Datenblatt und 
Instructionsset) auf das per Z-Pointer adressierte Byte zu. Das nennt 
sich dann "indizierte Adressierung" (Suchbegriff für Google oder 
Wikipedia).

Kleine Anmerkung dazu: Das Label "bimu" ist für den Assembler nur ein 
Etikett, hinter dem sich eine Zahl verbirgt. Die zugehörige Zahl ist die 
Adresse, an der das Label im Flash (Programmspeicher) steht. Der Wert 
dieser Zahl richtet sich also danach, wieviele Speicherzellen das 
Programm vor diesem Label bereits belegt. Die Berechnung erfolgt durch 
den Assembler, er nimmt uns diese Verwaltungsarbeit ab. Um den Z-Pointer 
auf den Wert der Adresse einzustellen, wird er mittels LDI und die 
Funktionen LOW() und HIGH() geladen. Da der Flash 16 Bit je Zelle hat, 
LPM aber nur 8 Bit breit ausliest, muss die Adresse verdoppelt werden, 
was zweckmäßigerweise bereits beim Laden des Pointers passiert (bimu*2).

Übrigens ist jedes Label im Programm nur ein Name für eine Adresse, die 
als Sprungziel gebraucht wird. Beim Assemblieren wird statt des Namens 
der Zahlenwert der Adresse verwendet, an der das Label steht.

...

von jochen (Gast)


Lesenswert?

Hannes, vielen Dank. Ich habe das weitestgehtend verstanden und werde 
heute Abend erste Versuche starten, was den Dekoder betrifft.

Ich würde dann gerne die zweite Variante mit dem NPN Transistor umsezen, 
kannst du mir einen speziellen Transisotor empfehlen? Ich habe in google 
zwar gesucht aber ich finde verschiedene bauweisen und auch welche für 
größere Ströme und weiß nicht welchen ich nehmen soll.
Kann es eigentlich gefährlich werden, mit (falschen) Transistoren zu 
experimentieren, da der Strom ja um ein Vielfaches ansteigt.

Grüße
Jochen

von jochen (Gast)


Lesenswert?

P.S.
Ich kaufe mir auch Anzeigen mit gemeinsamer Kathode.

von Hannes L. (hannes)


Lesenswert?

> kannst du mir einen speziellen Transisotor empfehlen?

Für solchen Kleinkram nehme ich den
- BC327 oder BC328 als PNP und den
- BC337 oder BC338 als NPN.
Diese haben die Bauform TO92, also den halbrunden Plastik-Klotz mit drei 
Beinen. Sie werden mit einem Kollektorstrom von 0,5A bis 1,0A (je nach 
Hersteller bzw. Datenblatt-Quelle) angegeben, sind also bedeutend 
belastbarer als die in dieser Preisklasse sonst üblichen 200mA-Typen. 
Sie sind bei Reichelt und Pollin zum fairen Preis verfügbar.

Für höhere Ströme nehme ich die LL-FETs von IR, die DLT hier mal zum 
fairen Preis angeboten hat. Aber für ein paar LED-Anzeigen wären die 
Overkill.

> Ich kaufe mir auch Anzeigen mit gemeinsamer Kathode.

Wozu???
Die Unterscheidung gemeinsame Anode oder Kathode ist dann wichtig, wenn 
man spezielle Decoder-Anzeigetreiber-ICs verwenden möchte. Heute ist es 
aber meist günstiger (und flexibler!), die Anzeigen direkt an den 
Mikrocontroller dranzupappen, was allerdings aufgrund der hohen 
Gesamtstromaufnahme Schaltverstärker (Transistoren) für die 
Common-Anschlüsse erfordert. Und da ist es eigentlich egal, ob die 
Dinger gemeinsame Anode oder Kathode haben. Da muss halt nur die 
Software und die Transistorschaltung angepasst werden.

Wenn Du Großdisplays verwenden willst, dann solltest Du schaun, welche 
Segment-Ströme die brauchen und wie hoch der Spannungsabfall über die 
LEDs ist. Beim 100mm-Display von Reichelt sind pro Segment 4 LEDs in 
Reihe und 2 dieser Gruppen parallel. Die sollte man also nicht mehr 
direkt am AVR betreiben, da weder Strom noch Spannung des AVRs reichen. 
Hier würde ich (bei gemeinsamer Anode pro Ziffer) einen ULN2003 oder 
ULN2803 für die Segment-Kathoden einsetzen (über entsprechende 
Segment-Widerstände) und je eine Kombination BC337/BC327 als 
Stellentreiber, wobei die L-Seite auch mit einem ULN2003 realisiert 
werden könnte. Die Stellentreiber werden dann von einer höheren Spannung 
versorgt.

> Kann es eigentlich gefährlich werden, mit (falschen) Transistoren zu
> experimentieren, da der Strom ja um ein Vielfaches ansteigt.

Es kann gefährlich (für die Bauteile) werden, wenn man ohne Wissen und 
ohne System experimentiert. Daher rate ich Dir dringend, Dir das dazu 
erforderliche Grundwissen zu erarbeiten. Deinem Wissensstand zufolge 
solltest Du den AVR zur Seite packen und erstmal mit einem 
Kosmos-Baukasten beginnen. Ohmsches Gesetz, Leistungsberechnung, 
Transistor-Grundschaltungen, Dioden-Kennlinien usw. gehören einfach mal 
zum Grundwissen, sie sind das Alphabet der Elektronik. Ohne dieses 
Wissen bist Du überall aufgeschmissen. Du kannst Dich nicht immer auf 
Andere verlassen, Du musst selbst tätig werden.

...

von jochen (Gast)


Lesenswert?

Hi,

ja ich würde die Uhr schon gerne fertigstellen, bevor ich mit den 
anderen Sachen anfange.
Ich habe jetzt die Transistoren bestellt, die du genannt hast und am 
Wochenende versuche ich das umzusetzen. Heute Abend teste ich dann mal 
den Decoder, einfach nur die Umsetzung von Binärzahlen in ein 7 Segment 
fähiges Format.
Ich meinte eigentlich gefährlich für den Menschen.  Meine bestellten 
Transistoren haben jetzt eine Verstärkung von 25.
Wenn man z.B. zwei 50er hintereinanderschaltet, hat man ja einen nicht 
unerheblichen Strom.

Jochen

von Hannes L. (hannes)


Lesenswert?

> Wenn man z.B. zwei 50er hintereinanderschaltet, hat man ja einen nicht
> unerheblichen Strom.

Verstehe ich jetzt nicht, erklär' mal...

...

von Holger K. (krulli) Benutzerseite


Lesenswert?

Wenn Du nicht an der 230V Steckdose rumspielst, ist Elektronikbasteln 
wenig gefährlich. Sind doch Spannungen unter 42V, oder nicht? 
Stromverstärung vom ß25? eher wohl 250... Siehe Datenblatt vom Transi

Wie wär es erstmal ein Blinklicht zu basteln? Mal zum kennenlernen von 
Elektronik? Kostet nicht mal 2 Euro

von Hannes L. (hannes)


Lesenswert?

Hallo Nachbar...

> Wie wär es erstmal ein Blinklicht zu basteln? Mal zum kennenlernen von
> Elektronik? Kostet nicht mal 2 Euro

Ist vermutliczh zu primitiv, damit kann man heutzutage Niemanden mehr 
beeindrucken.

Gruß über die Elbe,
Hannes

von Hannes L. (hannes)


Lesenswert?

Achja, das Datenblatt habe ich mir auch eben erst besorgt, ich habe mich 
bisher nach dem Buch "Transistordaten" von Klaus K. Streng gerichtet. 
Aber HFE von 25, das wollte ich nicht unverifiziert hinnehmen...

;-)

Aber erstmal abwarten, Jochen wird uns vermutlich gleich aufklären, wie 
er das gemeint hat.

...

von Holger K. (krulli) Benutzerseite


Lesenswert?

@Jochen,
wenn man zwei Transistoren in Darlingtonschaltung hintereinander 
schaltet, multiplizieren sich die Stromverstärkungen sogar.

@Hannes
einen Gruß zurück!

von jochen (Gast)


Lesenswert?

Da stand halt 25 und nicht 250 und desgwegen bin ich eben von 25 und 
nicht 250 ausgegangen.
Ich möchte auch kein Rundumverständnis von Transisotrschaltungen haben, 
ich brauche einefach nur einen Schalter um die 7  Segmentanzeigen 
einschalten zu können und den hab ich dank eurer Hilfe ja jetzt.

von Hannes L. (hannes)


Lesenswert?

> Ich möchte auch kein Rundumverständnis von Transisotrschaltungen haben

Schade eigentlich...

...

von Holger K. (krulli) Benutzerseite


Lesenswert?

ja, stimmt... gehört aber eigentlich zum Elektronikbasteln dazu...
findet Holger

von Andreas K. (oldcoolman)


Lesenswert?

Hallo Jochen, ich habe jetzt mal einiges überflogen, kann sein
daß es schon beantwortet ist.

Anzeige bei Multiplexen dunkler als bei direkt Anschluß?

weil das Gehirn ab einer bestimmten Frequenz ein Mittel bildet
zwischen eingeschaltet und ausgeschaltet.
Also hell und dunkel => bisschen hell ;-)
Willst du beim Multiplexe die Helligkeit beibehalten brauchst du
den X-Fachen Strom. X=Anzahl der Gruppen.

wenn also zum Beispiel 4 LED´s (Gruppen)nacheinander angeschaltet 
werden,
braucht es den 4 fachen Strom als bei statischen Betrieb.
Und den bringt dann evtl dein Port nicht mehr bei.

Allerdings hier eine Gefahr:
setzt das Multiplexen aus und geht wegen Programmabsturz im statischen
Betrieb über,brennt die LED(Gruppe) sofort durch!
Also lieber erst mal das Zimmer abdunkeln bis alles sicher läuft.
Programmunterbrechungen nur bei dunkelgeschalteten LEds zulassen.
Auch ist zum Betrieb mit überhöhten Strom evtl eine Mindestfrequenz
zu beachten.vielleicht steht da was im datenblatt deiner Anzeigen
drin wieviel peak current und max.time hier zulässig sind.

Gruß
ANdi

von jochen (Gast)


Lesenswert?

Wenn ich dann die Methode mit den Transistoren nehme, habe ich doch aber 
auch nicht plötzlich mehr Strom !? Üch habe schon zwei 9 V Batterien 
zusammengeschaltet und das angeschlossen aber das war eher ein Fehler.
Naja Hannes hat das ja mit der Eieruhr schon gemacht und er meint ja das 
Display ist schön hell ich bin schon sehr gespannt.

von jochen (Gast)


Lesenswert?

Hannes eine Frage:


bimu:                   ;Bitmuster f�r Display-Segmente
.db 0b01000001,0b01011111   ;0, 1
.db 0b00110001,0b00010101   ;2, 3
.db 0b00001111,0b10000101   ;4, 5
.db 0b10000001,0b01011101   ;6, 7
.db 0b00000001,0b00000101   ;8, 9



Wenn ich das richtig verstehe soll der allererste Wert 0b01000001 die 
Null sein.
Wenn man sich die Null auf der Segmentanzeige ml ansieht, leuchten da 
doch aber mehr als 2 segmente.

von Hannes L. (hannes)


Lesenswert?

jochen wrote:
> Hannes eine Frage:
>
>
> bimu:                   ;Bitmuster f?r Display-Segmente
> .db 0b01000001,0b01011111   ;0, 1
> .db 0b00110001,0b00010101   ;2, 3
> .db 0b00001111,0b10000101   ;4, 5
> .db 0b10000001,0b01011101   ;6, 7
> .db 0b00000001,0b00000101   ;8, 9
>
>
>
> Wenn ich das richtig verstehe soll der allererste Wert 0b01000001 die
> Null sein.
> Wenn man sich die Null auf der Segmentanzeige ml ansieht, leuchten da
> doch aber mehr als 2 segmente.

Wozu schreibe ich mir für Dich eigentlich die Finger wund?

Beitrag "Re: 7 Segmentanzeige falsch eingekauft, reagiert nur auf low"

Lesen bildet, 6.Absatz...

...

von jochen (Gast)


Lesenswert?

Ja sorry hatte nicht gelesen, dass man das invertiert macht, sollte ja 
abhängig von der Anzeige sein. Ich lese deine Kommentare sehr intensiv 
und habe mir das sogar alles ausgedruckt.
Aber ich muss trotzdem Nachfragen:
Eine Null bestehe aus 6 leuchtenden Segmenten.
Ich kann sie bei db 0b01000001 nicht finden, ich betrachte nur die 
ersten 7 Ziffern von links:  1000001

von jochen (Gast)


Lesenswert?

...von rechts meinte ich

von Hannes L. (hannes)


Lesenswert?

jochen wrote:
> ...von rechts meinte ich

Tja, dann achtest Du halt auf die falschen Bits...
Es sind nunmal die linken 7 Bits des Bytes. Das Rechte hat eine andere 
Aufgabe.

Im Programm gibt es auch noch die Zeilen:
1
;7-Segment-Display:
2
.equ segport=portb      ;Port für Segmente (Kathoden)
3
.equ segmsk=0b11111110  ;Maske der benutzen Segment-Bits
4
.equ einerport=portb    ;Port Anode 1 (rechts / Einer) 
5
.equ einerbit=pb0       ;Portbit Anode 1 (rechts / Einer)
6
.equ zehnerport=portd   ;Port Anode 2 (mitte / Zehner) 
7
.equ zehnerbit=pd6      ;Portbit Anode 2 (mitte / Zehner)
8
.equ hunderterport=portd;Port Anode 3 (links / Hunderter) 
9
.equ hunderterbit=pd3   ;Portbit Anode 2 (links / Hunderter)
Was könnten die wohl aussagen?

Noch ein Hinweis dazu: Die Reihenfolge der Segmente innerhalb des Bytes 
wurde durch die Platine (einfachste Leiterführung) bestimmt. Wenn Du 
alle Ziffern analysiert hast, hast Du auch meine Anschlussbelegung. Da 
Deine Anschlussbelegung mit Sicherheit anders ist, musst Du Dir Deine 
eigenen Bitmuster entwerfen.

...

von Andreas K. (oldcoolman)


Lesenswert?

hallo jochen,
der Strom wird im wesentlichen vom Vorwiderstand der led bestimmt.
allerdings muß der transistor den auch schalten können.

man rechnet normalerweise mit einer 3 fachen übersteuerung des 
transistors.
dann kannst du davon ausgehen,das der collektor niederohmig genug ist.
somit nur noch die Betriebsspannung-ledspannung und der vorwiderstand 
den strom begranzt.
Übersteuerung:
basisstrom*stromverstärkung ergibt den theoretischen Kollektorstrom.
dieser sollte 3 mal größer sein als der tasächlichfließende(weil durch
LEDVorwiderstand begrenzte)Kollektorstrom

Gruß
Andi

von jochen (Gast)


Lesenswert?

Okay ich bedanke mich bei Euch und ich melde mich am Wochenende nach den 
ersten Versuchen!

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.