Hallo Frank,

ich habe mein Problem eingekreist. Einen Fehler beim Übertragen des Programms schließe ich nun aus.

Ich habe das Digi-Demo genommen und einfach mal alles, was mir dem Display zugehörig erscheint, rausgekürzt. Nach 3 Versuchen ging es auch wieder zu Compilieren Ich hatte dann so eine Art "RN-Control-Orgel" Die Tasten 1-5 lassen den Summer unterschiedlich hohe Töne ausgeben.

Ok - also wieder das Digi-Demo geladen. Nun hab ich zwischen jede Zeile einen Sound eingebaut. Das RN-Controll tönt nun also vor sich hin bis zu der Zeile:
Code:
Led_display_init
Dort verstummt es, um nach langer Wartezeit (~1-2 min), den Originalsound, der nach der Zeile
Code:
I = 0
kommt, auszugeben.

Das RN-Digi bleibt dabei dunkel und macht nichts. Scheinbar will es sich nicht initialisieren lassen(so interpretiere ich zumindest Led_display_init.

Hier nochmal mein ganzer Code:
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

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 3                                '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

Sound Portd.7 , 400 , 400                                   'BEEP
Sound Portd.7 , 400 , 300                                   'BEEP

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
               For I = 0 To 9
                   Led_display Z , I
                   Waitms 300
               Next I
            Next Z


         Case 3

         Case 4

         Case 5



      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

Sound Portd.7 , 400 , 400                                   'BEEP
Sound Portd.7 , 400 , 300                                   'BEEP

  I2cwbyte 0                                                'Control Byte

Sound Portd.7 , 400 , 400                                   'BEEP
Sound Portd.7 , 400 , 300                                   'BEEP

  'Dynamic Alternative Mode und Helligkeit
  'Die oberen 3 Bits bestimmen die Helligkeit
  'Wenn es dunkler sein soll dann z.b. &B0110111
  I2cwbyte &B1110111

  I2cstop

Sound Portd.7 , 400 , 400                                   'BEEP
Sound Portd.7 , 400 , 300                                   'BEEP

  'Alle Ziffern auf 0
  For Z = 1 To 4
       Led_display Z , 0
  Next Z

Sound Portd.7 , 400 , 400                                   'BEEP
Sound Portd.7 , 400 , 300                                   'BEEP

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
Woran kann es liegen das sich das RN-Digi bei mir nicht initialisieren läßt?

Edit: Ich sehe gerade das Led_display_init nach unten ins Programm springt. Dort habe ich nochmal mehr Sounds eingebaut. Diese kommen mit einer Verzögerung von ~ 3-5 sek.
Der letzte aber (vor dem Original Init-Sound oben im Programm) läßt nochmal ca. 1 min auf sich warten.
Den Code oben habe ich auf meinen aktuellen angepasst.

Der Jumper ADR1 steht übrigens auf &H70 - sollte also passen bzw. funktioniert ja auch beim Hex-File von der CD.

Oder kann es sein das der I2cinit nicht funktioniert (der kommt ja immer vor dem Display-Zeug)