Forum: Mikrocontroller und Digitale Elektronik 3-stellige 7-Segmentanzeige, MUX Problem (Transistor)


von Oliver K. (0x2142)


Lesenswert?

Hallo zusammen,


ich versuche grad, Assembler auf PICs zu lernen (Anfänger in Sachen 
Elektronik + uC) und möchte jetzt nach den ersten Tutorials eine 
dreistellige 7-Segment-Anzeige zu steuern.

Das Dekodieren klappt soweit ganz gut, das Multiplexen auch und solange 
ich die 3 Anzeigen direkt an den Ausgang des PIC anschließe, macht die 
Schaltung genau was sie soll (Segmente/Anoden an RB0-7, gemeinsame 
Kathoden an RA0-2).

Jetzt möchte ich die Anzeigen aber über einen Transistor ansteuern (für 
Folgeprojekte) und da fangen die Probleme an:

Das Programm läuft zwar, aber die Anzeigen leuchten fast gar nicht, man 
kann´s grad so erkennen. Meine Idee war, eine Emitterschaltung mit je 
einem BC337 zu bauen, d.h. Pinout über Widerstand an die Basis, 
gemeinsame Kathode der Anzeigen an den Collector und den Emitter auf 
Masse.

Kann es sein, dass der Transistor zu träge ist, um das Multiplexen 
mitzumachen ? Momentan passiert das nämlich mit 6 Instruktionen, der PIC 
läuft mit 20Mhz, also effektiv 5 MHz. Oder liegt das Problem ganz wo 
anders ?

von Otto (Gast)


Lesenswert?

Hast Du die Ansteueuerung auch invertiert?
(1-Pegel schaltet den Transistor ein)

Otto

von Oliver K. (0x2142)


Lesenswert?

Hi,

die 3 Kathoden werden mit 6 Befehlen an- und ausgeschaltet, also

RA0 1
RA0 0
RA1 1
RA1 0
RA2 1
RA2 0

(klar, damit hab ich erstmal immer die gleiche Anzeige auf allen 
Segmenten, wird dann anders, wenn die Segmente auch mit Transistor 
ordentlich leuchten)

von Otto (Gast)


Lesenswert?

Die gemeinsamen Kathoden werden OHNE Transistor mit "0" angesteuert,
MIT Transistor benötigst Du einen "1"-Pegel, um diese einzuschalten....

von Oliver K. (0x2142)


Lesenswert?

Hm, ich denk mal laut :

Wenn die Basis vom Pin des PIC Spannung + Strom bekommt, also der 
PIC-pin auf 1 steht, dann schaltet der Transistor und die Anzeige 
leuchtet. Bei 0 kein Strom zur Basis, also auch kein Strom Collector -> 
Emitter

Vom Code her ist es ja nun so, dass ständig zwischen 0 und 1 gewechselt 
wird, also hab ich quasi ne 50% PWM ? Wenn also 50% der Zeit 0 und für 
den Rest 1 gesetzt sind, dann müsste es doch eigentlich egal sein, ob 
die angeschlossene Schaltung bei 0 oder 1 leuchtet, sprich ob ein 
Transistor im Spiel ist oder nicht ?

Aber ein Unterschied ist natürlich richtig, den ich vorher nicht bedacht 
habe: Ohne Transistor arbeitet der Port als Senke, und damit 
funktioniert es. Mit Transistor ist der Port Quelle, und damit 
funktioniert es nur ein ganz klein bißchen.

Ich hab mal verschieden Widerstände zwischen Pin und Basis probiert, 
daran scheint´s nicht zu liegen. Kann es sein, dass das Timing 0->1 
anders ist als 1->0 ?

von Oliver K. (0x2142)


Lesenswert?

Und da merk ich´s auch schon:

Es ist ja nicht 50-50, sondern je  16,6 zu 83,3 !

Ich bastel das grad mal um und melde mich dann gleich nochmal mit 
Ergebnis....

von Oliver K. (0x2142)


Lesenswert?

So, Problem gelöst, erstmal ein dickes Dankeschön an der Stelle.

Ich hab´s umgebaut auf

    bcf    PORTA,0    ; RA0=0
  bsf    PORTA,0    ; RA0=1
  bcf    PORTA,1    ; RA1=0
  bsf    PORTA,1    ; RA1=1
  bcf    PORTA,2    ; RA2=0
  bsf    PORTA,2    ; RA2=1


und schon ist das Verhalten genau umgekehrt : Mit Emitterschaltung 
leuchtet´s so wie es soll und direkt am Port angeschlossen glimmt´s nur 
ein bißchen.

Und jetzt werd ich mal sehen, dass ich die Dekodierfunktion zwischendrin 
aufrufe, um pro Segment verschiedene Symbole ausgeben zu können.

von Peter D. (peda)


Lesenswert?

Oliver Keller schrieb:
> Und jetzt werd ich mal sehen, dass ich die Dekodierfunktion zwischendrin
> aufrufe, um pro Segment verschiedene Symbole ausgeben zu können.

Wesentlich sinnvoller ist es, sich zuerst mit dem Timerinterrupt zu 
beschäftigen.

Dann kannst Du das Multiplexen im Timerinterrupt durchführen und das 
Main ist völlig frei für andere Aufgaben.
Du legst nur 3 Byte Bildspeicher an für die 3 Digits und da kann das 
Main dann die Ziffern-codes ablegen.
Etwa 300 .. 1000Hz Interruptfrequenz sind völlig ausreichend.


Peter

von Oliver K. (0x2142)


Lesenswert?

Hallo Peter,


danke, jetzt hab ich mal einen Anhalt, welche Frequenz da sinnvoll ist.

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.