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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.