-
        

Ergebnis 1 bis 3 von 3

Thema: Fehlerhafte Zahlenausgabe bei RN-Digi

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.08.2006
    Beiträge
    44

    Fehlerhafte Zahlenausgabe bei RN-Digi

    Anzeige

    ich habe mit der RN-Digi Platine eine große 7 segmentstoppuhr gebaut mit 100mm hohen Ziffern.




    Es sind 2 RN-Digi Platinen eigentlich drinnen, die eine habe ich nun getrennt, weil ich auf der Fehlersuche bin.


    die anzeige soll jede 1/100sek hochzählen.
    das unten ist jetzt nur so ein testprogramm und nicht das eigentliche.
    bloß sieht dann das display nach dem einschalten so aus.


    Code:
    Declare Sub Led_display_init()
    Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)
    
    $regfile = "m32def.dat"
    $crystal = 16000000
    Config Timer1 = Timer , Prescale = 8
    
    On Timer1 Timer_irq
    
    Const Timervorgabe = 45536
    
    
    Config Sda = Portc.1                                        ' I2C Bus konfigurieren
    Config Scl = Portc.0
    
    
    Const Rn_digi_slave_write = &H70
    Const Rn_digi_slave_read = &H71
    Const Dezimalpunktziffer = 2                                'Segment wo Dezimalpunkt leuchten soll (0=keinen)
    
    Dim Segmente As Byte
    Dim Z As Byte
    Dim I As Byte
    
    
    
    
    I2cinit
    Led_display_init
    I = 0
    
    
    Enable Timer1
    Enable Interrupts
    Do
    
    
    
    Loop
    
    
    
    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
      Timer1 = Timervorgabe
       Incr I
       If I = 10 Then
       I = 0
       End If
    
    
      Led_display 3 , I
    
       Return
    
    
    
    
    Sub Led_display_init()
      I2cstart
      I2cwbyte Rn_digi_slave_write
      I2cwbyte 0                                                'Control Byte
    
      'Dynamic Alternative Mode und Helligkeit
      'Die oberen 3 Bits bestimmen die Helligkeit
      'Wenn es dunkler sein soll dann z.b. &B0110111
      I2cwbyte &B1110111
    
      I2cstop
    
      'Alle Ziffern auf 0
      For Z = 1 To 4
           Led_display Z , 0
      Next Z
    
    End Sub
    
    
       Sub Led_display(ziffer An Byte , Zahl As Byte)
         I2cstart
         I2cwbyte Rn_digi_slave_write
         I2cwbyte Ziffer
    
         Select Case Zahl
             Case 0:
                   Segmente = &H3F
             Case 1:
                    Segmente = &H06
             Case 2:
                    Segmente = &H5B
             Case 3:
                    Segmente = &H4F
             Case 4:
                    Segmente = &H66
             Case 5:
                    Segmente = &H6D
             Case 6:
                    Segmente = &H7D
             Case 7:
                    Segmente = &H07
             Case 8:
                    Segmente = &H7F
             Case 9:
                    Segmente = &H67
             Case Else :
                    Segmente = &H80                             'Ansonsten Dezimalpunkt
    
         End Select
    
         If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
         I2cwbyte Segmente
         I2cstop
    End Sub
    An was kann das liegen?

    Wenn ich den timer abschalte und die Uhr über warteschleifen hochzählen lasse dann geht es einwandfrei.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    schon mal probiert die Stacks etwas zu vergrössern, vor allem da eine Sub innerhalb der ISR aufgerufen wird ?!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.08.2006
    Beiträge
    44
    Volltreffer.

    Nun habe ich die Stack vergrößert auf:

    $hwstack = 50
    $swstack = 32
    $framesize = 32

    nun funzt es. super

    http://freenet-homepage.de/planet-el...k/stoppuhr.MPG
    Im Video sieht man das 1 zeichen eines segment kaputt ist.

Berechtigungen

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