Wie ziehe ich ein Projekt durch ... (7-Segment-Multiplexanzeige)

Die zweite Stelle ...

Jetzt wollen wir das ganze mal zweistellig machen. Wenn man 8-Bit hat dann
möchte man auch gerne 8-Bit anzeigen :D
Dafür benötigt man bei einer Hex-Anzeige 2 Stellen. Also eine zweite
7-Segment-Anzeige.
Wenn man einen Controller mit vielen Pins hat dann kannn man auch für jede
Anzeigestelle 7 Pins verbraten (oder 8 mit dem Dezimalpunkt). Das wären bei
2 Stellen dann 16 Pins :eek: :eek: Das wollen wir uns aber sparen. Also verbinden
wir die Segmente der beiden Anzeigen einfach miteinander. Dann benötigt man
für beide Stellen nur 8 Pins für die Segmente. Wie steuert man aber nun die
Segmente der Stellen einzeln an ? Man will ja nicht nur 11 oder 22 oder 33
anzeigen :D
Dafür nimmt man bei den 7-Segment-Anzeigen die gemeinsamen Anoden und
schaltet jede Stelle über einen Transistor an oder aus. Das weitere ist wie
beim Film. Erst werden die Zehner angeschaltet und angezeigt. Dann die
Zehnerstelle wieder ausschalten und die Einerstelle anschalten und anzeigen.
Und dann wieder bei den Zehnern. Wenn man das jetzt schnell genug macht,
bekommt das Auge nichts davon mit und man sieht eine zweistellige Anzeige.

Zur besseren Übersicht hier einmal der Schaltplan ...
Projekt_4.gif

Über eine 0 an PC0 werden die Einer angeschaltet und über eine 0 an PC1
die Zehner. Eine 1 an den entsprechenden Pins schaltet die jeweilige Stelle
ab.

Das ganze Prinzip nennt man Multiplex. Wir haben jetzt also eine zweistellige
Multiplex-Anzeige. :D Wir brauchen also für eine zweistellige Anzeige nicht
16 Pins sondern nur 10 Pins. Noch besser wird das Verhältnis bei einer
dreistelligen Anzeige. Dann braucht man nur 11 Pins statt 24 Pins.

Als nächstes kommen die Änderungen im Sourcecode, um auch was
sehen zu können.

( ... wird fortgesetzt ... :D )
 
Zuletzt bearbeitet:
Zweistellige Anzeige - Das Programm

und es geht weiter ...
Zuerst mal den Quellcode, denn ich danach dann erkläre ...


CodeBox ASM

; ----------------------------
; Projekt: 7-Segment an Port D
; ----------------------------
;
.include "m8def.inc" ; Definitionsdatei laden
.cseg ; Beginn eines Code-Segmentes
.org 0 ; Startadresse=0
;
start:
ldi r16,low(ramend)
ldi r17,high(ramend)
out spl,r16 ; Stackpointer auf
out sph,r17 ; RAM-Ende setzen

ldi ZH,0x04 ; hohes Byte fuer Flash-Zugriff speichern
ldi ZL,0x00 ; niedriges Byte fuer Flash-Zugriff speichern

ldi r16,0b11111111 ; PortD auf Ausgang ( alles auf 1 )
out ddrd,r16 ; setzen

ldi r16,0b11111111 ; PortC auf Ausgang ( alles auf 1 )
out ddrc,r16 ; setzen

clr r17 ; Zaehl-Register auf 0x00 setzen

ldi r18,200 ; Verzoegerungs-Zaehler auf 200 setzen (200 x 2ms => 400ms)

clr r24 ; Register fuer die Stellen-Auswahl (Einer/Zehner)
; Bit0 = 0 => Einer , Bit0 = 1 => Zehner

mainloop: ; Die Hauptschleife

rcall muxer ; ausgabe auf 7-Segment-Anzeige
rcall wait2m ; 2ms warten




dec r18 ; Verzoegerungszaehler um 1 verringern
brne mainloop ; Wenn der Verzoegerungs-Zaehler nicht auf 0 ist
; dann zum Start der Hauptschleife springen

inc r17 ; Zaehl-Register um 1 erhoehen
ldi r18,200 ; Verzoegerungs-Zaehler wieder auf 200 setzen


rjmp mainloop ; Schleife neu beginnen



; ==================================================================
; ===== Anzeigen-Multiplexer =======================================
; ==================================================================
muxer:
sbis r24,0 ; Ist Bit0 gesetzt? Dann die Zehner anzeigen
rjmp einer ; zu den Einern springen

zehner: ; ===== Zehner-Aanzeige ausgeben =====
mov ZL,r17 ; Zaehler in ZL kopieren
swap ZL ; Oberes Nibble nach unten bringen
cbr ZL,0b11110000 ; Die oberen 4 Bits loeschen (wir haben nur 16 Zeichen definiert)

lpm r16,Z ; Daten aus Flash-Zelle holen Flash(ZH,ZL) => r16
out portd,r16 ; Zehner-Segmente setzen

ldi r16,0b11111101 ; PC1 auf 0 schalten (Zehner an)
out portc,r16 ; und ausgeben

rjmp schluss ; Zehner sind bearbeitet -> Ende

einer: ; ===== Einer-Anzeige ausgeben =====
mov ZL,r17 ; Zaehler in zl kopieren
cbr ZL,0b11110000 ; Die oberen 4 Bits loeschen (wir haben nur 16 Zeichen definiert)

lpm r16,Z ; Daten aus Flash-Zelle holen Flash(ZH,ZL) => r16
out portd,r16 ; Einer-Segmente setzen

ldi r16,0b11111110 ; PC0 auf 0 schalten (Einer an)
out portc,r16 ; und ausgeben

schluss:
inc r24 ; Beim naechsten Durchlauf die andere Stelle anzeigen
; Beim hochzaehlen wechselt Bit 0 jedesmal den Zustand
ret ; Rueckkehr



; ==================================================================
; ===== 2ms warten =================================================
; ==================================================================
; rcall wait2m ; (3) Warteschleife aufrufen
; ================> ; 10318 Cyclen (incl Call+Ret) => ~2ms@1MHz
wait2m: push r20 ; (2) r20 auf Stack retten (1tes)
push r21 ; (2) r21 auf Stack retten (2tes)
clr r20 ; (1) r20+r21 ergeben zusammen
ldi r21,4 ; (1) einen 2-Byte-Zaehler (2053Cycl)
;
; 2_______2053___
; | 1__513__ |
; | | | |
; 12 Cycle = 4*((256*2+1)+2)+1+17
loop2m: dec r20 ; (1) || niedrigstes Byte -1
brne loop2m ; (1f,2t)_/| 0 erreicht? nein -> Schleife
dec r21 ; (1) | mittleres Byte -1
brne loop2m ; (1f,2t)__/ 0 erreicht? nein -> Schleife

pop r21 ; (2) r21 zurueckholen (2tes)
pop r20 ; (2) r20 zurueckholen (1tes)
ret ; (4) Schleifenende, Rueckkehr



; ================================
; ===== 7-Segment-Anzeige ========
; ================================
; --a--
; | |
; f b
; | |
; --g--
; | |
; e c
; | |
; --d-- O dp
;
; Port D - 7 6 5 4 3 2 1 0
; Segment - dp g f e d c b a
;

.cseg ;===== 7-Segment-Zeichensatz =====
.org 0x0200 ;Startadresse der Tabelle ( H=0x04 , L=0x00 )
; => im Speicher liegt der Start wegen 16Bit dann bei 0x0200
; PC 0x0200 => Speicherstelle 0x0400 (wegen 16Bit-Zellen)
; Speicherzugriff mit ZH/ZL dann aber auf die Speicherstelle
;
; Die beiden Bytes des 16-Bit-Registers Z
; ===========ZH========== ===========ZL==========
; 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 Bit
; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Bit
; ========================Z======================
; 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 H/L Bit => Programmzaehler
; Der Programmzaehler fuer das Flash arbeitet mit 16-Bit DATENzugriff
; Er adressiert also in WORD-Breite gegenueber dem Z-Register, das die
; Flash-Zellen in BYTE-Breite adressiert.
;
; 76543210 - PortD Bits
; pgfedcba - Segmente *=an(0), -=aus(1)
segmente: .db 0b11111001 ;0 0400 (0200) --******
.db 0b10100100 ;1 0400 (0200) -----**-
.db 0b10100100 ;2 0400 (0200) -*-**-**
.db 0b10110000 ;3 0400 (0200) -*--****
.db 0b10011001 ;4 0400 (0200) -**--**-
.db 0b10010010 ;5 0400 (0200) -**-**-*
.db 0b10000010 ;6 0400 (0200) -*****-*
.db 0b11111000 ;7 0400 (0200) -----***
.db 0b10010000 ;8 0400 (0200) -**-****
.db 0b10000000 ;9 0400 (0200) -*******
.db 0b10001000 ;A 0400 (0200) -***-***
.db 0b10000011 ;b 0400 (0200) -*****--
.db 0b11000110 ;C 0400 (0200) --***--*
.db 0b10100001 ;d 0400 (0200) -*-****-
.db 0b10000110 ;E 0400 (0200) -****--*
.db 0b10001110 ;F 0400 (0200) -***---*
; ZHZL PC


Bis zu Zeile 30 hat sich nicht viel geändert. Ich habe lediglich ein weiteres
Register (r24) für die Umschaltung zwischen der Zehner und Einerstelle
eingeführt und noch einen Verzögerungszähler mit dem Register r18.

Nehmen wir mal zuerst den Verzögerungszähler ...

Im alten Programm haben wir in der Mainloop eine Verzögerung von 1 sec
gehabt. Die Schleife wurde also in einer Sekunde einmal durchlaufen und
hat in diesem Durchlauf unser Zählregister um 1 erhöht und auf der
Anzeige ausgegeben.

Damit haben wir aber bei der Multiplex-Ausgabe auf der 2stelligen Anzeige
ein Problem. Das Auge soll die Anzeige ja auch 2stellig sehen und nicht
eine sekündlich hin- und herblinkende Anzeige von Zehner- und Einerstelle.
Wir müssen da also was ändern wenn die Multiplex-Frequenz höher sein
soll, die Geschwindigkeit des Zählers aber weiter bei 1-2Hz liegen soll.

Also habe ich die Verzögerung schon mal auf 2ms runtergedreht (Zeile 2).
Die Schleife wird jetzt also 500x pro Sekunde durchlaufen. Das ist für eine
sichtbare Zählung von 1-2mal pro Sekunde viel zu schnell. Darum wurde das
Register r18 als Verzögerungszähler verwendet. Es wird auf den Wert 200
gesetzt (Z.26) und bei jedem Schleifendurchlauf um 1 verringert (Z.39).
Wenn 0 erreicht ist (Z.40), dann wird der Wert wieder auf 200 gesetzt
(Z.44) und unser Zählregister um eins erhöht (Z.43). Damit wird also bei
jedem 200ten Schleifendurchlauf um eins hochgezählt.
Da ein Schleifendurchlauf 2ms dauert wird also alle ...
2ms x 200 = 400ms um eins hochgezählt. Der Zähltakt ist jetzt also 2Hz.

Soweit verstanden ? ;)

Jetzt nehmen wir uns die Multiplex-Routine (Zeile 54-85) vor ...

In Zeile 55 wird getestet ob das Bit 0 vom Multiplex-Register r24 gesetzt
ist. Wenn nein, wird über rjmp (Z.56) zur Anzeige der Einerstelle verzweigt.
Bei gesetztem Bit 0 wird rjmp übersprungen und bei der Anzeige der Zehner
weitergemacht. In Zeile 82 wird dieses Multiplexregister bei jedem Aufruf
der Routine um 1 hochgezählt. Das hat bei Binärzahlen einen Vorteil.
Das Bit 0 wechselt bei jedem Durchlauf den Zustand (gerade Zahl, ungerade
Zahl, gerade Zahl, ...). es toggled also. Damit wird immer abwechselnd die
Einer und die Zehnerstelle angezeigt.

Jetzt sehen wir uns die Einer-Anzeige an (Zeile 71-80). Da finden wir unsere
Zeile vom letzten Programm wieder (Zeilen 72-76 sind die Zeilen 25-29 aus
Posting #20). In Zeile 87+97 legen wir eine 0 auf PortC0 und schalten
damit über den pnp-Transistor die Einerstelle an.

Bei der Zehnerstelle (Zeile 58-70) sieht es ähnlich aus. Wir schalten
allerdings hier mit PortC1 die Zehnerstelle an (Z.66+67) und springen
danach zum Schluß der Routine damit wir nicht noch in die Eineranzeige
laufen und alles wieder durcheinanderbringen (Z.69). Damit wir aber
die Zehnerstelle anzeigen können brauchen wir auch die entsprechenden
Bits aus unserem Zählregister r17. Das machen wir auf ganz einfache
Weise :D . Wir tauschen einfach die oberen und unteren 4 Bits gegeneinander.
Das geht mit dem swap Befehl (Z.60). Damit haben wir die oberen 4 Bit
an der Stelle, wo wir sie für unseren Pointer auf die 7-Segment-Tabelle
brauchen. Und damit haben wir die Zehneranzeige fertig.

Immer noch alles klar ? :D :D

Zum Schluß ist eigentlich nur noch die Warteroutine geändert. In diesem
Programm brauchen wir nicht mehr die hohe Wartezeit von n*130ms sondern
nur noch 2ms.

Das Ergebnis:
Es wird bei jedem Hauptschleifendurchlauf abwechelnd für 2ms die Zehner
und die Einerstelle angezeigt. Bei jedem 200ten Durchlauf wird hochgezählt.

Anmerkung ... Ich habe das kleine Progrämmchen so aus dem Kopf und ohne
Test auf wirklicher Hardware zusammengeschrieben :D :D Der Assembler
(AVR-Studio) hat auf jeden Fall nicht gemotzt und meiner Meinung nach
sollte es auch funktionieren :D probiert es einfach mal aus.

Damit haben wir jetzt eine funktionierende 2stellige Hexadezimale Anzeige
im Multiplexbetrieb. Das was ich hier als Zehner- und Einer-Stelle benannt
habe ist ja eigentlich eine Sechzehner- und Einer-Stelle. Also nicht motzen.
Habe ich der Einfachheit halber mal so gemacht. :p

.. Jetzt kommt noch als Ergänzung ein Schaltplan von einer mehrstelligen
Multiplexanzeige mit Treiber-ICs und eine Routine dafür. Aber ich gebe
jetzt einfach mal die Diskussion frei :D Die grossen Erklärungen habe ich
jetzt soweit abgeschlossen.

Gruß
Dino
 
Hi Dino!

Boah ey, ich raff das nicht mit ASM! :banghead:

Ich bleibe dann doch besser bei BASCOM. :dirol:


Es liest sich aber interessant und darum mach bitte weiter! :)

Gruß,
Cassio
 
Hallo zusammen,

.. Jetzt kommt noch als Ergänzung ein Schaltplan von einer mehrstelligen
Multiplexanzeige mit Treiber-ICs und eine Routine dafür. Aber ich gebe
jetzt einfach mal die Diskussion frei :D Die grossen Erklärungen habe ich
jetzt soweit abgeschlossen.
da hier immer wieder Fragen zu 7-Segment-Anzeigen, Treibern, Ansteuerung,
usw auftauchen werde ich dafür noch eine einzelne FAQ schreiben.

Boah ey, ich raff das nicht mit ASM! :banghead:
Ich bleibe dann doch besser bei BASCOM. :dirol:
Es liest sich aber interessant und darum mach bitte weiter! :)
und damit werde ich auch diesem Wunsch gerecht :D

Hier ist noch eine FAQ zu 7Segment-Anzeigen ...
Ansteuerung von 7-Segment-Anzeigen (Hardware)
und hier noch ein Beispiel einer großen Anzeige ...
7-Segment-Display Beispielschaltung Multiplex (z.B. für Uhren)

Gruß
Dino
 
Ich häng mich hier mal an. Passt mein Schaltplan? Ich hab mit FETs noch nich so viel gemacht, in Elektronik hatten wir sie auch nicht, und ich bin der Meinung da fehlt noch ein Widerstand am Gate. Die Dimensionierung tut mir noch weh, 0,875Ohm kommt mir was wenig vor.

Die BUZ71 sind bei 20V voll durchgeschaltet, bei 5V reichen sie immerhin bis 4A wenn ich das Datenblatt richtig verstehe und das ist ja völlig ausreichend. Warum BUZ71? Ich hab noch 4stk hier rumfliegen und würde mir so ein Display in den nächsten Wochen zusammen tüddeln, wenn mein ISP da ist ;) und mein EVA Board ...

Rd hab ich so berechnet: Rd=(Ub-UDS0)/ID0 = (5V-(0,3*5V))/4A = 0,875Ohm

HIFLE! ^^

Edit: Ich frag mich auch noch wo ich die Reichelt Kingston 7Segment Anzeigen für Eagle herkriege und wie ich das auf Streifenraster kriegen soll ...
 

Anhänge

  • 7segment.png
    7segment.png
    7,7 KB · Aufrufe: 86
Die Schaltung wird nicht so funzen wie du dir das vorstellst: Der R is viel zu klein, du willst die LEDs ja nicht mit einigen Ampere grillen wa. Entweder wie im vorigen Post für Dauerstrom berechnet einige hundert Ohm oder einige zehn Ohm für Pulsbetrieb (bleib lieber bei den paar hundert Ohm).

Du betreibst den FET in Drainschaltung (siehe wiki, analog zur Kollektorschaltung). Das bedeutet: an GS muss zum durchschalten eine spannung anliegen, diese wird durch durch die verwendete Drainschaltung höher gesetzt da du die spannung der LEDs an der Source berücksichtigen musst. Bedeutet: Wenn du nur 5V hast zum durchschalten wird diese um ca 1,7V (LED-Durchlassspannung) verringert, an der GS-Strecke können somit nur 3,3V anliegen. Mit dieser GS-Spannung fährste den FET eher im Linearbetrieb (also macht der FET nich nur auf oder zu sondern hat nen signifikanten Schaltwiderstand).

Ich versteh aber nicht wozu der FET überhaupt dienen soll, du kannst doch per µC eh alle LEDs schalten wies dir passt.

MfG Echo
 
Wie gesagt: FETs haben wir nur angeschnitten und mir kommt der niedrige Wert auch spanisch vor. Drainschaltung ist ein Begriff mit dem ich im Taschenbuch suchen kann ;) Ich hab auch nicht dran gedacht das sich die Spannung noch mal verringert, damit werden die BUZ doch unbrauchbar. Die BUZ wollt ich nur nehmen weil ich noch 4 da hab, hätte ich nichts neues nehmen müssen. Warum überhaupt Transistoren?
http://www.avr-praxis.de/forum/attachment.php?attachmentid=718&d=1236179543 deshalb. Wenn ich das aber richtig sehe müsste man die 7 Segment Elemente jeweils auch mit einem Microcontroller Port schalten können. Kommilitone hats aber auch mit zwei Transistoren gemacht ...
 
Multiplex halt. Naja soweit ich das sehe sind die BUZ hier nutzlos. Die Schaltung deines Kommilitonen verwendet PNP-Transistoren in Kollektorschaltung, das ist ja auch kein Problem. Gibts mehrere Möglichkeiten der Problemlösung:

Bipolare Transistoren verwenden (die brauchen nur nen Basisstrom statt Spannung >= 5V zum durchschalten)
Andere Segmentanzeigen nehmen (Common Cathode z.B.)
Logic-Level-FETs in anderer Beschaltung

Die Schaltung deines Kommilitonen sieht passend aus, ich würde diese Lösung wählen.

MfG Echo
 
Die Schaltung oben ist nicht von meinem Kommilitonen, die befindet sich hier im Thread. Der hat es aber auch mit zwei Transistoren gemacht.

Die BUZ sind überflüssig, ich habe nur im Datenblatt gesehen das man mit 5V schon genug schalten kann. Aber: Ich habe ignoriert das ja noch UDS abfällt, abhängig von der Last. Und damit passt die Spannung von 5V eben nicht mehr und ich bräuchte einen anderen FET, der aber eh Käse ist und somit kan ich auch einen PNP Transistor oder NPN Transistor nehmen. Dann brauch ich im grunde nur einen Vorwiderstand für 20mA und einen Widerstand für den LED Strom (Dateblatt)

Grüße
 
Aso. Joa, wobei 20mA Basisstrom schon relativ viel sind. Naja je nach gewähltem Transistor.
 
Blind gewählter Wert, kam mir grad spontan in Sinn ^^ Eher 20µA ^^ Aber das entscheidet das Datenblatt.
 
Hallo zusammen,

ich löse mal auf ;) Ich glaube nämlich, ich hab da nen Denkfehler gefunden ...

Die BUZ71 sind bei 20V voll durchgeschaltet, bei 5V reichen sie immerhin bis 4A wenn ich das Datenblatt richtig verstehe und das ist ja völlig ausreichend. Warum BUZ71? Ich hab noch 4stk hier rumfliegen und würde mir so ein Display in den nächsten Wochen zusammen tüddeln, wenn mein ISP da ist ;) und mein EVA Board ...

Rd hab ich so berechnet: Rd=(Ub-UDS0)/ID0 = (5V-(0,3*5V))/4A = 0,875Ohm

HIFLE! ^^

Edit: Ich frag mich auch noch wo ich die Reichelt Kingston 7Segment Anzeigen für Eagle herkriege und wie ich das auf Streifenraster kriegen soll ...
Hast Du den Vorwiderstand mit den Daten des Transistors berechnet ?
Kein Wunder das da Murks bei rauskommt :rolleyes: :vollkommenauf:

Die Schaltung oben ist nicht von meinem Kommilitonen, die befindet sich hier im Thread. Der hat es aber auch mit zwei Transistoren gemacht.
also der eine Link geht auf ne Mux-Schaltung mit 2x PNP-Transistoren.
Die FETs die du da verwendest kann man aber eher mit NPN-Transistoren
vergleichen. Paßt also von den Gedanken nicht ganz. Man kann ja auch nicht
einfach Plus und Minus vertauschen. NPN und PNP sind genauso unterschiedlich
wie N-Kanal und P-Kanal-MOSFETs. (Komplementär nennt man das)

Die BUZ sind überflüssig, ich habe nur im Datenblatt gesehen das man mit 5V schon genug schalten kann. Aber: Ich habe ignoriert das ja noch UDS abfällt, abhängig von der Last. Und damit passt die Spannung von 5V eben nicht mehr und ich bräuchte einen anderen FET, der aber eh Käse ist und somit kan ich auch einen PNP Transistor oder NPN Transistor nehmen. Dann brauch ich im grunde nur einen Vorwiderstand für 20mA und einen Widerstand für den LED Strom (Dateblatt)
:confused: Hä ?
Also ...

1. Die Transistoren sind nicht überflüssig weil
bereits bei 7 Segmenten mit 5mA Segmentstrom 35mA in dem gemeinsamen
Anschluß der Anzeige fließen und das ist für den IO-Pin des ATmega ABSOLUT
TÖDLICH !!
(max 20mA !) => Also ein Transistor

2. 20mA für den Basistrom des Transistors ? Hast Du das nicht mit dem
Strom durch die LEDs verwechselt ? Für nen Transistor reichen schon 0,5mA.

3. Für die LEDs würde ich nen Segmentstrom von 2-5mA nehmen. Das wurde
hier nach etlichen Diskussionen im Forum als Ergebnis allgemein anerkannt und
ich habe es bei mir hier mal getestet. Reicht aus - ich benutze bei mir 5mA.

Noch etwas zu deiner Schaltung mit den FETs ...
Ich wage nicht, vorherzusagen, wie die FETs in der Schaltung reagieren :eek:
Da die LEDs bei nicht durchgeschaltetem FET nicht leuchten sind sie sehr
hochohmig. Auf jeden Fall hochohmiger wie der Widerstand (egal ob 0,8 Ohm
oder 10k Ohm). Also wird bei FET der Kanal über den Widerstand auf +5V
gehalten. Damit ist das Gate negativer als der Kanal wenn man den Ausgang
des Prozessors auf GND schaltet. Für den FET liegt dann also sozusagen
-5V am Gate. :eek:
Und das mit der höheren Gatespannung stimmt auch (was schon angesprochen
wurde). Zu der normal zum Durchschalten benötigten Gatespannung würde
sich in der Schaltung also mindestens noch die Durchlaßspannung der LED
(1,8V) dazu addieren.
In der Summe - Bei der Schaltung hätte ich echt Bauchschmerzen wenn ich
sagen müßte was da im Betrieb passiert. :eek:

http://www.avr-praxis.de/forum/attachment.php?attachmentid=718&d=1236179543
In dem erwähnten Link mit der Schaltung sind die Widerstände R3-R10 für die
Segmentströme zuständig (also 5mA) und die Widerstände R11+R12 für die
Basisstöme (also 0,5-1mA).
5mA Segmentstrom = 560..680 Ohm
1mA Basisstrom = 4700 Ohm (4,7k)

Das gilt allerdings nur bei Anzeigen mit einer LED pro Segment. Also 1,7..1,85V
Durchlaßspannung. Also ins Datenblatt sehen ! ;)

Das sollte erst mal reichen ... denn man viel Spaß beim basteln und grillt die
Bauteile nicht.

Gruß
Dino
 
Noch mal hallo,

hab wohl etwas lange an meinem Beitrag getippt :rolleyes:

Blind gewählter Wert, kam mir grad spontan in Sinn ^^ Eher 20µA ^^ Aber das entscheidet das Datenblatt.
20µA sind für nen normalen NPN/PNP aber schon echt wenig wenn er im
Schaltbetrieb arbeiten soll. Ich würde da mindestens ne 10er-Potenz höher
gehen.

Gruß
Dino
 
Ich habe nur einen wirren Basisstrom reingeworfen ,das 20mA zuviel sind weis ich.

Wie gesagt, ich hab nich wirklich Ahnung von FETs... DS0 und IS0 hab ich mir anhand des Bildes im Tabellenbuch überlegt. Das es murks is sachte ich ja. Ergo bau ich die Schaltung auf wie sie gegeben ist und passe es ggf. auf die anderen Ströme und Spannungen des jeweiligen Moduls an.

Das PNP und NPN Komplementär sind weis ich auch. Wobei wir nur die NPN betrieben haben, auch als Schalter.

Verwende ich hier PNP muss der Portpin auf GND liegen damit Strom fliesen kann, bei NPN wäre es umgekehrt. Das ist doch eigentlich der einzige Unterschied oder? Was das bei den FETs für Folgen hat (N und P Kanal) wüsste ich jetzt auf die schnelle nicht - ich denke das gleiche aber ich weis es nicht.


Faszinierend wieviel man sich im laufe von einem Semester in die Rübe donnert um mit einer 2,3 aus dem Fach zu kommen um am Ende doch nix zu wissen -.-
 
Hallo,

Ich habe nur einen wirren Basisstrom reingeworfen ,das 20mA zuviel sind weis ich.

Wie gesagt, ich hab nich wirklich Ahnung von FETs... DS0 und IS0 hab ich mir anhand des Bildes im Tabellenbuch überlegt. Das es murks is sachte ich ja. Ergo bau ich die Schaltung auf wie sie gegeben ist und passe es ggf. auf die anderen Ströme und Spannungen des jeweiligen Moduls an.

Das PNP und NPN Komplementär sind weis ich auch. Wobei wir nur die NPN betrieben haben, auch als Schalter.
Soweit schonmal ok :)

Verwende ich hier PNP muss der Portpin auf GND liegen damit Strom fliesen kann, bei NPN wäre es umgekehrt. Das ist doch eigentlich der einzige Unterschied oder? Was das bei den FETs für Folgen hat (N und P Kanal) wüsste ich jetzt auf die schnelle nicht - ich denke das gleiche aber ich weis es nicht.
Das ist leider nicht der einzige Unterschied :rolleyes:
Komplementär heißt soviel wie ... Die gesamte Schaltung ist bei den
Spannungen spiegelverkehrt. Wenn man also bei einer Schaltung die NPN
durch PNP ersetzt dann muß man vor alle Spannungen sozusagen ein
Minuszeichen setzen damit sie wieder funktioniert. (Grob erklärt)

Bei einer realen Schaltung macht man das natürlich nicht so einfach. Da ist
dann etwas mehr zu tun.

Faszinierend wieviel man sich im laufe von einem Semester in die Rübe donnert um mit einer 2,3 aus dem Fach zu kommen um am Ende doch nix zu wissen -.-
Jaja ... Theorie und Praxis :eek: :rolleyes:

Gruß
Dino
 
komplementäre Transistoren

Und nochmal Hallo ;)

seht euch das mal an ...
NPN-PNP.png

ne ganz billige Schaltung bei der mit nem Taster über einen Transistor ne LED
zum leuchten gebracht wird. Beachtet die Vorzeichen bei den Spannungen und
die Richtung der LEDs und schon wird einiges klarer was ich mit "komplementär"
meine. Wenn man bei der 2ten Schaltung (mit dem PNP) die -5V durch GND
ersetzt und GND durch +5V , dann die ganze Schaltung einmal nach oben klappt,
dann entsteht die 3te Schaltung. So sieht man es dann auch in einem normalen
Schaltplan ;)

Von der 2ten zur 3ten Schaltung wurden also die Spannungen um 5V angehoben
und die Schaltung über die horizontale nach oben geklappt.

Gruß
Dino
 
Zuletzt bearbeitet:
Soweit ist mir das auch noch klar *g* Heist das im Umkehrschluss das zum Schalten eine 0 ander Basis und am LED Portpin benötigt wird? Ich schalte also gegen Masse, wohingegen ich bei NPN gegen 5V schalt würde, seh ich das richtig?

Ärger mich gerade echt über die letzten zwei Semester Elektronik, in dem einen hat man sich geärgert weil der Typ die Grundlagen nich rübergebracht hat und um zweiten beim anderen Prof hat man sich über 40 Seitige Laborberichte geärgert, was bei raus gekommen ist sieht man :eek: Wie soll so jemand in den Beruf einsteigen?! Tschuldigung ^^


Edit: Und warum PNP und nicht NPN? Man hätte doch im Grunde dann nur die Spannungen umdrehen müssen ;)?
 
Hallo,

Soweit ist mir das auch noch klar *g* Heist das im Umkehrschluss das zum Schalten eine 0 ander Basis und am LED Portpin benötigt wird? Ich schalte also gegen Masse, wohingegen ich bei NPN gegen 5V schalt würde, seh ich das richtig?
richtig ;) Genau so.

Ärger mich gerade echt über die letzten zwei Semester Elektronik, in dem einen hat man sich geärgert weil der Typ die Grundlagen nich rübergebracht hat und um zweiten beim anderen Prof hat man sich über 40 Seitige Laborberichte geärgert, was bei raus gekommen ist sieht man :eek: Wie soll so jemand in den Beruf einsteigen?! Tschuldigung ^^
Das ist das Problem. Den magnetischen Kreis hab ich auch erst in der
Fachoberschule richtig kapiert. In der Ausbildung ist da irgendwie nicht der
richtige Dreh gefunden worden um es verständlich zu machen. Es hängt also
auch viel an den Lehrern, wie sie den Stoff rüberbringen (aber nicht nur).

Edit: Und warum PNP und nicht NPN? Man hätte doch im Grunde dann nur die Spannungen umdrehen müssen ;)?
Sieh dir mal an wo bei meinen Schaltungen die LEDs hängen und dann
denk mal an die Anzeigen ... gemeinsame Kathode / gemeinsame Anode ;)
Bei gemeinsamer Anode schaltest Du mit nem PNP nach +5V und bei
gemeinsamer Kathode schaltest du mit nem NPN nach GND. Und schon wird
das klar, warum mal der eine und mal der andere verwendet wird :D

- NPN schaltet dir GND an die Last (Last hängt an C)
- PNP schaltet dir Vcc an die Last (Last hängt an C)

Die einzelnen Segmentanschlüsse der Anzeigen hängen dann an den Portpins
des Prozessors.

Gruß
Dino
 
Jetzt macht das irgendwie doch mehr Sinn :D Ich versuche zwar n den nächsten Tagen wieder alles bis in den letzten Winkel auszuleuchten aber das ist ja mein Bier ^^ Muss eh demnächst zu meinem Elektronik Prof wegen Auslandssemester.


BTW: An mir liegts nicht, ich lern gut und effektiv (glaub ich) und meine Noten sind auch nich die verkehrtesten. Aber irgendiwe wird der Stoff IMMER blöd rüber gebracht ... Microcontroller zweites Semster, wir bringen gerade mal ein LCD ans laufen und einen Ringpuffer .... bzw schliesen einen externen RAM an wobei das auch total Sinnfrei war ...
 
Hallo,

BTW: An mir liegts nicht, ich lern gut und effektiv (glaub ich) und meine Noten sind auch nich die verkehrtesten. Aber irgendiwe wird der Stoff IMMER blöd rüber gebracht ... Microcontroller zweites Semster, wir bringen gerade mal ein LCD ans laufen und einen Ringpuffer .... bzw schliesen einen externen RAM an wobei das auch total Sinnfrei war ...
das es nicht nur an den Lehrern liegt hab ich auch nur mit reingebracht weil
es eben auch Schüler/Stundenten gibt die nur zum Zeit abbummeln da sitzen.
Womit ich dich allerdings nicht gemeint habe. War nur ne allgemeine Feststellung.
Wenn ein Lehrer erst mal nen eingefahrenen Weg hat, den Stoff zu vermitteln
und der Weg ist nicht so wie die Schüler das verstehen, dann ist das schon
ein Problem. Da müßte dann mal ein Außensstehender das wieder zurechtrücken
damit der Stoff besser rüberkommt. Das würde dann beiden helfen. Der Schüler
kriegt den Stoff in den Kopf und der Lehrer merkt das es den Schülern mehr
Spaß macht und das hilft seiner Motivation auch wieder auf die Sprünge.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)