- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: 7 Segmentanzeige

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    7 Segmentanzeige

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich möchte 4 7-Segmentanzeigen multiplexen. Das Programm läuft prinziepjell - aber da ist ein Problem:

    wenn ich 123 auf der Anzeige haben möchte steht dort 1233 und nach einigen Sekunden warten steht dort plötzlich 3233

    wenn ich 1234 auf der Anzeige haben möchte steht dort 2100 und nach einigen Sekunden warten steht dort plötzlich 0100


    Kann mir da jemand helfen?

    Code:
    '7Segmentanzeige mit 4 Anzeigen
    
      $regfile = "ATtiny2313.dat"                               'ATTiny2313
          $crystal = 20000000                                   '20MHz Quarz
          Ddrb = &B11111111                                     'PortB = Ausgang (PB0=A usw.)
          Ddrd = &B1111111                                      'PortD = Ausgang (PD3=Anzeige1, PD4=A2, PD5=A3, PD6=A4)
    
    
    
    
          Dim Y As String * 5 At &H70
          Dim Z(5) As Byte At &H70 Overlay
          Dim Led As Word
          Dim X(5) As Byte
          Dim Test As Integer
          Dim Test2 As Integer
          Dim Zaehler As Byte                                   'für LED Anzeige wählen...
    
          Enable Interrupts
    
    
    Do
    
     'LED:::EZHT
      Led = 123                                                 'LED - Anzeigewert
    
    For Test2 = 0 To 6                                          'Wert sichern .....
     X(test2) = Z(test2)
    Next Test2
    
    
    
    For Zaehler = 3 To 6                                        'Zaehler = PortD 3-6 Anzeige wählen)
     Test = X(zaehler)
     Select Case Test
    
    
    'Led-Segmente als Zahlen definieren:
       Case 48 : Portb = 63                                     'NULL
       Case 49 : Portb = 6                                      'EINS
       Case 50 : Portb = 91                                     'ZWEI
       Case 51 : Portb = 79                                     'DREI
       Case 52 : Portb = 102                                    'VIER
       Case 53 : Portb = 109                                    'FÜNF
       Case 54 : Portb = 125                                    'SECHS
       Case 55 : Portb = 7                                      'SIEBEN
       Case 56 : Portb = 127                                    'ACHT
       Case 57 : Portb = 111                                    'NEUN
       Case 58 : Portb = 128                                    'DP -> geht das als PORT zu setzen???
       Case Else : Portb = 0
      End Select
    
    'Anzeige auswählen???
      Portd.zaehler = 1
      waitus 100           'Zeit für jede Anzeige
      'zum testen Waitms 500                                                'waitus 100           'Zeit für jede Anzeige
      Portd.zaehler = 0
    Next Zaehler
    
    
    
    
    Y = Str(led)
       If Z(4) = 0 Then                                         'Führende Nullen eliminieren
        Do
         Z(5) = Z(4)
         Z(4) = Z(3)
         Z(3) = Z(2)
         Z(2) = Z(1)
         Z(1) = 0
        Loop Until Z(5) > 0
      End If
    
    
    
    Loop
    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    so, ich habe noch ein paar Variablen namen geändert
    Code:
    '7Segmentanzeige mit 4 Anzeigen
    
      $regfile = "ATtiny2313.dat"                               'ATTiny2313
          $crystal = 20000000                                   '20MHz Quarz
          Ddrb = &B11111111                                     'PortB = Ausgang (PB0=A usw.)
          Ddrd = &B1111111                                      'PortD = Ausgang (PD3=Anzeige1, PD4=A2, PD5=A3, PD6=A4)
    
          Dim Led2 As String * 5 At &H70
          Dim Z(5) As Byte At &H70 Overlay
          Dim Led As Word
          Dim X(5) As Byte
          Dim Test As Integer
          Dim Test2 As Integer
          Dim Anzeige_x As Byte                                   'für LED-Anzeige wählen...
    
          Enable Interrupts
    
    
    Do
    
     'LED:=:EZHT
      Led = 123                                                 'LED - Anzeigewert
    
    For Test2 = 0 To 5                                          'Wert sichern .....
     X(test2) = Z(test2)
    Next Test2
    
    
    
    
    'Anzeige durchwechseln (hochzählen)
    For Anzeige_x = 3 To 6                                      'Zaehler = PortD 3-6 Anzeige wählen)
     Test = X(anzeige_x)
     Select Case Test
    
    
    'Led-Segmente als Zahlen definieren:
       Case 48 : Portb = 63                                     'NULL
       Case 49 : Portb = 6                                      'EINS
       Case 50 : Portb = 91                                     'ZWEI
       Case 51 : Portb = 79                                     'DREI
       Case 52 : Portb = 102                                    'VIER
       Case 53 : Portb = 109                                    'FÜNF
       Case 54 : Portb = 125                                    'SECHS
       Case 55 : Portb = 7                                      'SIEBEN
       Case 56 : Portb = 127                                    'ACHT
       Case 57 : Portb = 111                                    'NEUN
       Case 58 : Portb = 128                                    'DP -> geht das als PORT zu setzen???
       Case Else : Portb = 0
      End Select
    
    
    'Anzeige auswählen und Ein- / Ausschalten
      Portd.anzeige_x = 1                                       'Anzeige AN
      Waitus 100                                                'Zeit für jede Anzeige
      'zum testen Waitms 500                                                'waitus 100           'Zeit für jede Anzeige
      Portd.anzeige_x = 0                                       'Anzeige AUS
    Next Anzeige_x
    
    
    Led2 = Str(led)
    
    
       If Z(4) = 0 Then                                         'Führende Nullen eliminieren
        Do
         Z(5) = Z(4)
         Z(4) = Z(3)
         Z(3) = Z(2)
         Z(2) = Z(1)
         Z(1) = 0
        Loop Until Z(5) > 0
      End If
    
    
    
    Loop
    ...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hat denn keiner eine Idee? vielleicht einen kleinen Vorschlag zum ausprobieren?

    Tobias
    ...

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo TobiasBlome,

    Hat denn keiner eine Idee?
    Beim darüberfliegen fällt mir das ins Auge:
    For Test2 = 0 To 5 'Wert sichern .....
    X(test2) = Z(test2)
    Next Test2

    Dazu ein Text aus der Bascom-Hilfe:
    The first element of an array is always one.

    also nicht null

    Gruß, Michael

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    Für Multiplex-Anzeigen haben andere und ich son einiges hier im Forum beigetragen.

    Warum die Ganze Brühe nochmals anwärmen?

    Schau doch mal den folgenden Beitrag an:
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ja, da ist etwas drann...

    hab´ ich sofort geändert. Aber es macht keinen Unterschied ob 1 oder 0 und das merkwürdige 2 oder 3 geht auch! Bei 4 fehlt die erste Zahl...

    Aber vielleicht habe ich ja mehrere kleine Fehler!

    Also vielen Dank,

    Tobias
    ...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    @darwin.nuernberg
    NaJa, ich dachte: lass doch den µC arbeiten, dann kann man den BCD Konverter sparen... oder?

    Tobias
    ...

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    @darwin.nuernberg
    noch etwas: kann der BCD Konverter Kommastellen?

    Tobias
    ...

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    Ja geht auch, wenn Du genug Ports frei hast, warum nicht.

    Das Segmentdecoden ist auch kein akt, aber wenn das ganze in einer Schaltung mit mehreren Funktionen ist, dann muss man um jeden Pin Kämpfen.

    EDIT:
    Kommastellen : NEIN, das wäre ja dann das 8. Segment und das wird nicht als Zahl decodiert. Den muss man dann wieder zusätzlich ansteuern oder wie Du vor hattest mit einem kompletten Port (vom AVR) realisieren.

    Also ein Port für die Decaden und ein zusätzlicher Port für die Segmente nebst dezimalpunkt.


    Bild hier  
    Segmente a-g = 7 PLUS dezimapunkt = 8

    Also ohne zusätzliche Harware maximal 8 Decaden (Anzeige) mit mind. 2 Ports realisierbar.
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ...aha...

    Also weil ich die Hardware schon fertig habe, bleibe ich bei meiner Softwareansteuerung ohne BCD-Konverter.
    Oder hat jemand ein fertiges Programm um die 7-Segmente anzusteuern (ohne BCD-Konverter)? Wie schon gesagt - warum das Rad 2x erfinden

    Tobias
    ...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad