- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Anmerkungen zur Digitalanzeige RN-Digi

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2004
    Alter
    51
    Beiträge
    21
    Anzeige

    Praxistest und DIY Projekte
    Huhu Frank,

    ich habe jetzt schon ein paar Sachen in der Demo rumgeschoben. Dabei ist mir aufgefallen das Taste 1 bei mir das Display nicht auf 0 setzt. Wenn ich
    Code:
                For Z = 1 To 4
                  Led_display Z , 0
                Next Z
    unter Taste 3,4 und 5 Schreibe geht es jeweils mit sound "dii - düü" der unter Tastenabfrage definiert ist. Wenn ich taste 1 Drücke macht es nur "düü" (denke mal das es der 550er Sound ist) und das Display bleibt auf dem Wert den es vorher angezeigt hat.

    Was sagt mit in dem Zusammenhang das?

    Code:
          Select Case Ws
             Case 410 To 450
    Hier nochmal meine umgebaute Demo:
    Code:
    '###################################################
    'rncontrol_digitest.BAS   Demo zu RN-Digi
    'für
    'RoboterNetz Board RN-Control ab Version 1.1 und
    'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)
    
    '
    'Aufgabe:
    ' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi
    
    ' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
    ' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
    ' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen
    
    
    'Autor: Frank
    'Weitere Beispiele und Beschreibung der Hardware
    'unter http://www.Roboternetz.de oder robotikhardware.de
    'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
    '##############################################################
    
    
    Declare Function Tastenabfrage() As Byte
    Declare Sub Led_display_init()
    Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)
    
    
    $regfile = "m32def.dat"
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    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
    Dim N As Integer
    Dim Ton As Integer
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    Dim Taste As Byte
    
    
    I2cinit
    
    Led_display_init
    I = 0
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450                                   'BEEP
    Do
    
       Taste = Tastenabfrage()
       If Taste <> 0 Then
    
          Select Case Taste
    
             Case 1
                For Z = 1 To 4
                  Led_display Z , 0
                Next Z
    
             Case 2
                For Z = 1 To 4                                  'Segmentnummer
                   For I = 0 To 9                               'Zähle von 0 bis 9
                       Led_display Z , I
                       Waitms 50                                'Wartezeit zwischen den Zahlen
    Sound Portd.7 , 100 , 450                                   'BEEP
                   Next I
    Sound Portd.7 , 50 , 650                                    'BEEP
                Next Z
    
             Case 3
                For Z = 1 To 4
                  Led_display Z , 0
                Next Z
    
             Case 4
                For Z = 1 To 4
                  Led_display Z , 0
                Next Z
             Case 5
                For Z = 1 To 4
                  Led_display Z , 0
                Next Z
    
    
          End Select
          Sound Portd.7 , 400 , 500                             'BEEP
       End If
    
       Waitms 100
    Loop
    
    End
    
    
    
    'Diese Unterfunktion fragt die Tastatur am analogen Port ab
    Function Tastenabfrage() As Byte
    Local Ws As Word
    
    
       Tastenabfrage = 0
       Ton = 600
       Start Adc
       Ws = Getadc(7)
       If Ws < 1010 Then
          Select Case Ws
             Case 410 To 450
                Tastenabfrage = 1
                Ton = 550
             Case 340 To 380
                Tastenabfrage = 2
                Ton = 500
             Case 265 To 305
                Tastenabfrage = 3
                Ton = 450
             Case 180 To 220
                Tastenabfrage = 4
                Ton = 400
             Case 100 To 130
                Tastenabfrage = 5
                Ton = 350
          End Select
          Sound Portd.7 , 400 , Ton                             'BEEP
       End If
    
    End Function
    
    
    
    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 &B0010111
    
      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
    Gruß,
    Max666

  2. #12
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hi Max,
    du mußt die Tastenabfrage eventuell an dein RN-Control anpaßen. Die Tastenabfrage erfolgt über einige Widerstände am analogen Port. Durch gewisse Toleranzen liefern die Tasten bei jedem RN-Control geringfügig andere Tastenwerte. Ich hab die Select Case Anweisungen bei dem Demo auf die schnelle etwas zu eng definiert, daher rutscht manchmal eine Taste neben den definierten Bereich.

    Am besten mal PC mit Terminaprogramm anschließen und mit Print in der Tastenabfrage den Wert WS ausgeben lassen. Bei jeder Taste kommt ein anderer Wert raus.
    Du mußt die Select Case Anweisung so anpassen, das der WS-Wert bei jeder Taste in etwa in der Mitte der einzelnen Case-Anweisung liegt

    Code:
    Case 410 To 450
    Das muß nur einmal gemacht werden, dann kannst du immer wieder diese Werte nehmen.
    In der Regel paßt jedoch folgende Tastenfunktion bei fast allen RN-Control´s:

    Code:
    'Diese Unterfunktion fragt die Tastatur am analogen Port ab
    Function Tastenabfrage() As Byte
    Local Ws As Word
    
       Tastenabfrage = 0
       Ton = 600
       Start Adc
       Ws = Getadc(7)
       Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
       If Ws < 500 Then
          Select Case Ws
             Case 400 To 450
                Tastenabfrage = 1
                Ton = 550
             Case 330 To 380
                Tastenabfrage = 2
                Ton = 500
             Case 260 To 305
                Tastenabfrage = 3
                Ton = 450
             Case 180 To 220
                Tastenabfrage = 4
                Ton = 400
             Case 90 To 130
                Tastenabfrage = 5
                 Ton = 350
          End Select
          Sound Portd.7 , 400 , Ton                             'BEEP
    
       End If
    
    
    End Function
    Eventuell also diese Funktion einfach gegen deine austauschen!
    Oben siehst du auch den Print Befehl, der den WS Wert auf einem Terminalprogramm ausgeben kann. Der Sound Befehl ist ja ganz nützlich, aber für weitere experimente solltest du auch Terminalprogramm und RS232 Verbindung nutzen. In Bascom ist Terminalprogramm eingebaut.
    Das hat aber eigentlich nichts mit RN-Digi zu tun

    Und noch gleich ein Hinweis, du solltest unter Optionen/COmpiler/Chip bei Bascom bei HW Stack, SW Stack und Framesize höhere Werte einsetzen. Wenn du überall 32 einsetzt, dann bist du zumindest bei diesem und ähnlichen Programmen auf der sicheren Seite. Ansonsten kann der Stack bei der Verwendung von Unterfunktionen schnell mal überlaufen.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2004
    Alter
    51
    Beiträge
    21
    Hallo Frank,

    es funktioniert.
    Das Ws so ne Art Toleranz ist dachte ich mir fast. Ich wußte nur nicht was es genau ist.

    Nur hab ich nun mit der Demo von Bascom das Problem das die rummeckert das ich über 2k nicht Compilieren darf... naja ich hab dann alle Print Anweisungen rausgemacht (auch die neue ) dann geht es.

    Danke nochmal für die schnelle Hilfe =D>
    Gruß,
    Max666

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    67
    Beiträge
    1.062
    Hallo Frank

    Ich habe die RN-Digi zusammengebaut, mit meiner RN-Control über I2C verbunden, das Demo-Programm für die RN-Digi auf meine RN-Control geladen und Saft angelegt.

    LED1, alles OK
    LED3, funktioniert segment "c" nicht
    LED2&4 tut sich garnichts!

    RESET-Taster auf RN-Control und erkennen können, das LED1&3 "0" anzeigen.

    Taste 2 gedrückt, LED1 zählt perfekt durch, LED2 wird vermutlich vom Programm angesteuert, da LED3 dann ordnungsgemäß durchzählt, wobei "c" tot bleibt, dann vergeht die zeit damit LED4 auch durchzählt und es kommt ein "peep"

    Daraus schliesse ich das die RN-Control und RN-DIGI ordnungsgemäß kommunizieren, dh RN-Control sendet die I2C-Befehle, der Philps Baustein gibt der RN-Control keinen Anlaß einen fehler zu melden.

    Nach Studium der Unterlagen habe ich einen Lötfehler in der Verbindung zwischen LED3 und dem Philips-Steuerbaustein für möglich gehalten, Ansprache "Segment "c", leider Fehlanzeige.

    Betreff LED2&4 hätten es die Steuersignale an PIN 3&8 der LED`s sein können, sprich das multiplexen klappt nicht. Auch hier Lötstellen überprüft, leider vergeblich. Auch die Lötstellen am T2 OK.

    War heute bei Conrad und habe mir 2 neue LED's besorgt, sowie 2 Transistoren um Material zum debuggen zu haben. Philips Baustein war dort nicht zu bekommen. Bekomme ich den bei dir?

    Welches weitere Vorgehen empfiehlst du?
    MfG

    Hellmut

  5. #15
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Kommunikation scheint bei Dir richtig zu funktionieren. Und wenn du nix am Programm verändert hast, dann kanns eigentlich nur noch an irgend einen Lötfehler/Bestückungsfehler liegen.
    Prüfe mal ob alles bei den Transistoren richtig stimmt (richtigrum?). Und schau auch mal das du C3 nicht verwechselst.

    Dann hast du ein Lötfehler genannt. Du solltest mal prüfen ob das nicht doch die Ursache sein könnte, eine ungünstige Brücke könnte duchaus auch den Philips SAA Chip himmeln.
    Ein defektes LED halt ich für unwahrscheinlich, zum einen sind die recht teuer und werden garantiert bei Produktion geprüft und so ganz schnell bekommt man die großen Segmente auch nicht kaputt. Wenn du IC aus Fassung nimmst, kannst du natürlich auch alles mit Ohmmeter ein wenig durchmessen

    Ich würde alles nochmal genau prüfen und wenn alles stimmt mal den SAA Chip austauschen. Kannst du auch bei Reichelt bekommen, falls du da zufällig gerade was brauchst, ansonsten bei mir.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2007
    Beiträge
    6
    So Überraschung ich hab ein Problem. Und zwar ich hab den ATMega128Funk darum habe ich versucht das Programm von Frank entsprechend zu modifizieren.



    '################################################# ##
    'rncontrol_digitest.BAS Demo zu RN-Digi
    'für
    'RoboterNetz Board RN-Control ab Version 1.1 und
    'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)
    '
    'Aufgabe:
    ' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi
    ' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
    ' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
    ' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen
    'Autor: Frank
    'Weitere Beispiele und Beschreibung der Hardware
    'unter http://www.Roboternetz.de oder robotikhardware.de
    'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
    '################################################# #############

    Declare Sub Led_display_init()
    Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


    $regfile = "m128def.dat"

    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 Zahl As Byte



    $crystal = 16000000 'Quarzfrequenz
    $baud = 9600

    Config Scl = Portd.7
    Config Sda = Portd.0 'Ports fuer IIC-Bus



    I2cinit
    Led_display_init




    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 9
    Led_display Zahl , Z
    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




    Bin mir aber recht sicher zumindest bei der For-Schleife Mist gebaut zu haben. Den es gibt zwar keine Fehlermeldungen aus. Tut aber bei der Rn-Digi 7-Segmentanzeige auch nichts.

    Hat jemand Vorschläge?
    Wäre aber schon dankbar wenn jemand mein Programm durchlesen und mich auf Fehler und Verbesserungen aufmerksam machen kann.

    Danke Simon

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress