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:
Dort verstummt es, um nach langer Wartezeit (~1-2 min), den Originalsound, der nach der Zeile
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)
Lesezeichen