- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Wie richtig mit Bascom 7 Segmentanzeige Multiplexen

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von recovery Beitrag anzeigen
    Ich habe am Anfang geschrieben das es sich um eine gemeinsame Kathode handelt der Link ist mir nicht entgangen, ich habe leider nur gemeinsame Kathode
    Segment Anzeige.
    Hallo recovery,
    das Schaltbild zum Link aus RN-Wissen zeigt eine 4 X 7 Segmentanzeige mit gemeinsamer Kathode. Der erklärende Text dazu beschreibt das auch. Ich habe das Schaltbild unten eingefügt.

    Die Stellen werden über npn-Transistoren geschaltet. Wenn zB Transistor T1 durchschaltet, schaltet er ein GND auf die gemeinsame Kathode der 7 Segmente der Stelle LD1. Zum Durchschalten braucht der Transistor ein High Potential vom µC an dem Anschluß "Stelle_1".

    Du hast geschrieben, daß Du pnp-Transistoren verwendest. Dazu paßt das Programm, das ich geschrieben habe nicht. Um Dir weiterhelfen zu können müßtest Du einen Schaltplan zu Deiner Anzeige mit Typenbezeichnung und die Verschaltung der pnp Transistoren (auch mit Typenbezeichnung) posten.

    Wenn Du eine Anzeige mit gemeinsamer Kathode wie unten im Schaltbild hast, solltest Du die pnp-Transistoren raus nehmen und npn-Transistoren einbauen und so wie im unten gezeigten Schaltbild verdrahten. Die Vorwiderstände R1..R8 mit 8 X 47Ω sind zu klein. Laß da Deine drin oder baue zunächst 1kΩ Widerstände zum Testen ein. Wenn dann noch die Portpins wie in den Programm Kommentaren beschrieben, verdrahtet sind, könnte mein Programm sogar die Anzeige mit dem anderen µC ansteuern.

    Gruß
    Searcher


    Bild hier  
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    26.02.2017
    Beiträge
    8
    So läuft es ich habe noch einige Fehler entdeckt und korrigiert, Stelle 4 war auf PD5 anstatt auf PD4 und die Tabelle war das ein oder andere Bit falsch für die Ziffern Darstellung.
    Deine Beschreibung habe ich etwas geändert.
    Code:
    'BASCOM Demo Version 2.0.7.5
    '
    'Multipexen einer 4-stelligen, 7 Segment Anzeige mit gemeinsamer Kathode
    'zB µC Atmega16
    'Dargestelt wird die Zahl 2017
    '
    'by Searcher im 26.02.2017
    'Hardware auf Stekboard getestet.
    '
    'In Anlehnung an Zeichnung http://rn-wissen.de/wiki/index.php?title=Datei:Siebensegment_4fach_Multiplexing_V2.png'
    'auf http://rn-wissen.de/wiki/index.php?title=Siebensegmentanzeige#Multiplexing
    '
    'Verschaltung am Atmega16
    'PD1 über Transistor an Kathode Stelle 1
    'PD2 über Transistor an Kathode Stelle 2
    'PD3 über Transistor an Kathode Stelle 3
    'PD4 über Transistor an Kathode Stelle 4
    
    'Dezimalpunkt (dp) nicht genutzt
    'PB6 an Segment a
    'PB5 an Segment b
    'PB4 an Segment c
    'PB3 an Segment d
    'PB2 an Segment e
    'PB1 an Segment f
    'PB0 an Segment g
    '
    'Zur Darstellung der Ziffer 0 an der ersten Stelle der 4 X 7 Segment Anzeige
    'muß die Kathode Stelle 1 und die Segmente a, b, c, d ,e, f angesteuert werden.
    'Nach dem Stromlauf müssen die entsprechenden Segmente ein HIGH vom µC bekommen.
    'Grundzustand: alle Portpins auf 0 -> Anzeige komplett aus.
    'PB0, PB1, PB2, PB3, PB4, PB5 auf "1" setzen. PB6 (Segment g auf "0")
    'Segmente sind nun zum Einschalten vorbereitet.
    '
    'Da die Stellen über einen NPN Transistor angesteuert werden, muß bei Ansteuerung
    'der Stellen die Basis des Transistors auch ein HIGH vom µC ausgegeben werden damit die
    'Kathode der 7-Segment-Anzeige ein GND bekommt. Also für die erste Stelle den PD1 auf "1",
    'die anderen auf "0". Vorbereitete Segmente sind nun eingeschaltet und Ziffer 0
    'wird nun an erster Stelle der 4 X 7 Segment Anzeige angezeigt.
    '
    'Soll die Ziffer 0 an der zweiten Stelle der 7-Segment Anzeige angezeigt werden, wird
    'PD1 auf "0" gesetzt (Stelle 1 ausgeschaltet), dann die Segmente für die Ziffer 0 gesetzt,
    'die ja die gleichen Segmente und Portpins wie für Stelle eins sind, und dann
    'PD2 auf "1" setzen. Ziffer 0 wird an Stelle 2 angezeigt.
    '
    'Ziffer 1 auf Stelle 3 anzeigen: PD2 auf "0", alle Segment Pins PB0..PB6 mit Pattern
    'für Ziffer 1 überschreiben. Segment Pins PB1, PB2 auf "1", die anderen PBs auf "0". Dann PD3 auf "1".
    'u.s.w
    
    
    
    
    
    
    $Regfile="m16def.dat"
    $Crystal=8000000
    $hwstack=40
    $swstack=16
    $framesize=32
    
    
    
    
    
    Dim Zahl As Word
    Dim Hilfs_variable As Word
    Dim Dezimalziffern(4) As Word
    Dim Stelle As Byte
    
    DDRB = Bits(pb6 , Pb5 , Pb4 , Pb3 , Pb2 , Pb1 , Pb0)       'Portpins für Segmente als Ausgang
    DDRD = Bits(pd1 , Pd2 , Pd3 , Pd4)                         'Portpins für die Stellen als Ausgang
    
    
    Config Timer0 = Timer , Prescale = 8                        'Overflow Interrupts mit ca. 488Hz bei 1MHz Systemtakt
    
    On Ovf0 Isr_multiplex                                       'in der Overflos Interrupt Service Routine wird die Anzeige geschaltet
    Enable Ovf0
    
    
    
    Zahl = 2017                                               'Diese Zahl soll in der Anzeige erscheinen
    
    'Den Inhalt der Variablen Zahl, der als Binärzahl gespeichert ist, in Dezimalstellen zerlegen
    'und die Stellen zum späteren einfachen Abruf (indexen) beim Multiplexen in ein Array geben.
    Dezimalziffern(1) = Zahl / 1000
    Hilfs_variable = Zahl Mod 1000
    Dezimalziffern(2) = Hilfs_variable / 100
    Hilfs_variable = Zahl Mod 100
    Dezimalziffern(3) = Hilfs_variable / 10
    Hilfs_variable = Zahl Mod 10
    Dezimalziffern(4) = Hilfs_variable / 1
    
    Enable Interrupts                                           'startet das Multiplexing (Schalten der ziffern in der ISR)
    
    Do
      'leere Hauptschleife, Action findet in der ISR statt.
    Loop
    
    End
    
    
    Isr_multiplex:                                              'schaltet Stellen mit ca. 488Hz (ca alle 2ms) weiter
    'Bei jedem Aufruf der ISR wird
    'sicherheitshalber alle Stellen über die Transistoren der Stellenansteueung die Anzeige abgeschaltet
    'die Segmente der nächsten anzuzeigenden Dezimalziffer vorbereitet
    'die entsprechende Stelle eingeschaltet.
                                                                'Eine Stelle is 2ms an und 6ms aus
      If Stelle < 5 Then Incr Stelle Else Stelle = 1            'Index weiterschalten zur nächsten Stelle
      Portd = Portd And &B11100001                              'Alle 4 Stellen abschalten, andere Portpins nicht verändern
    
      Portb = Lookup(dezimalziffern(stelle) , Ziffern_pattern)  'Lookup holt aus den Daten unter Ziffern_pattern
                                                                'das Pattern, das zur Zahl in Dezimalstellen(stelle) gehört
                                                                'und setzt damit im PORTB die Segmentportpins
      Select Case Stelle                                        'und eine Stelle der vier wieder unter Strom setzen
        Case 1 : Portd.1 = 1                                    'Stelle 1 einschalten
        Case 2 : Portd.2 = 1                                    'Stelle 2 einschalten
        Case 3 : Portd.3 = 1                                    'Stelle 3 einschalten
        Case 4 : Portd.4 = 1                                    'Stelle 4 einschalten
      End Select
    Return
    
    
    Ziffern_pattern:                                            'Daten zur Segmentansteuerung.
                                                                'Eine "1" bringt zusammen mit der Stellenansteuerung
                                                                'das entsprechende Segment zum leuchten
    'Seg.dp,abcdefg (dp: Dezimalpunkt nicht genutzt)
    Data &B01111110                                             'Muster für Ziffer 0
    Data &B00110000                                             'Ziffer 1
    Data &B01101101                                             'Ziffer 2
    Data &B01111001                                             'Ziffer 3
    Data &B00110011                                             'Ziffer 4
    Data &B01011011                                             'Ziffer 5
    Data &B01011111                                             'Ziffer 6
    Data &B01110000                                             'Ziffer 7
    Data &B01111111                                             'Ziffer 8
    Data &B01111011                                             'Ziffer 9
    'Wird ein Datenbyte auf PortB geschrieben, kommt das LSB (Segment g) auf PB0,
    'MSB (Segment a) auf PB6 - passend zur Verdrahhtung.
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20170305_095352 (800x606).jpg
Hits:	14
Größe:	73,7 KB
ID:	32462
    Geändert von recovery (05.03.2017 um 10:13 Uhr)

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von recovery Beitrag anzeigen
    So läuft es ich habe noch einige Fehler entdeckt und korrigiert, Stelle 4 war auf PD5 anstatt auf PD4 und die Tabelle war das ein oder andere Bit falsch für die Ziffern Darstellung.
    Deine Beschreibung habe ich etwas geändert.
    Ja, super! Gratuliere. Ich finde es immer ein tolles Erlebnis, wenn man sieht, daß etwas schief läuft, man die Ursache findet, den Fehler behebt und direkt den Erfolg erleben kann.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    26.02.2017
    Beiträge
    8
    Ja das finde ich auch jetzt muss ich nur noch ein Projekt daraus machen es soll ein Timer werden.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Bascom Programm läuft nicht richtig
    Von dnggn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 25.09.2011, 09:19
  2. 7 Segmentanzeige multiplexen
    Von Maverick83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 01.06.2011, 15:19
  3. Bascom-variable wird nicht richtig ausgegeben
    Von Wsk8 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 02.03.2009, 22:22
  4. BASCOM Programmer funzt nicht richtig
    Von Tyrald im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 24.05.2007, 21:24
  5. 2 Servos mit Bascom - gehen nicht richtig
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 11.07.2006, 14:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen