3-stellige 7-Segmentanzeige, MUX Problem (Transistor)

OP #1315374
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 ?
OP #1315453
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 ?
OP #1315468
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.
#1315597
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren