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
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
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?
Open-Collector-Inverter (7405) zwischen Treiber-IC und Display packen?
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.
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
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.
@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.
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.
... legt man an diesen speziellen Eingang nicht die Masse, ist der Ausgang zwar auf low, aber die Led leuchtet dann dennoch nicht
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
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
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?
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).
also ich habe herausgesucht http://www.reichelt.de/?SID=29kVPxRawQAR0AABg@GT868251aa2cc6f6fd20d6fd4be63434d58;ACTION=3;LA=4;GROUP=B353;GROUPID=3169;ARTICLE=9283;START=0;SORT=artnr;OFFSET=16 und http://www.reichelt.de/?SID=29kVPxRawQAR0AABg@GT868251aa2cc6f6fd20d6fd4be63434d58;ACTION=3;LA=4;GROUP=B41;GROUPID=3173;ARTICLE=72503;START=0;SORT=artnr;OFFSET=16 ist das in Ordnung?
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.
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... ...
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.
Okay, ich habe jetzt viele Bauteile bestellt. Wie genau müsste ich die ein den MC anschließen?
vielleicht solltestb du nicht so schnell bestellen, und erstmal das schaltungsumfeld klären... d.
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
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
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?
> 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.
...
> 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.
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.
also die Daten werden immer an beide Anzeigen geschickt aber nur die eingeschaltete kann sie auch darstellen.
Bevor ich jetzt wieder den ganzen Tag löte würde ich gerne wissen ob das so funktioniert ;)
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. ...
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?
komischerweise ist das auch nur bei manchen Zahlen so. Die 9 funktioniert absolut problemlos. Bei der 2 habe ich das beschriebene Porblem.
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?
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.
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.
> 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. ...
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!
@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?
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?
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. ...
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?
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
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?
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
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?
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. ...
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... ...
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?
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?
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.
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. ...
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
P.S. Ich kaufe mir auch Anzeigen mit gemeinsamer Kathode.
> 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. ...
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
> Wenn man z.B. zwei 50er hintereinanderschaltet, hat man ja einen nicht > unerheblichen Strom. Verstehe ich jetzt nicht, erklär' mal... ...
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
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
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. ...
@Jochen, wenn man zwei Transistoren in Darlingtonschaltung hintereinander schaltet, multiplizieren sich die Stromverstärkungen sogar. @Hannes einen Gruß zurück!
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.
> Ich möchte auch kein Rundumverständnis von Transisotrschaltungen haben
Schade eigentlich...
...
ja, stimmt... gehört aber eigentlich zum Elektronikbasteln dazu... findet Holger
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
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.
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.
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... ...
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
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. ...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.