E.G.O.
28.10.2005, 09:11
Hallo,
ich habe ein RN-Control V1.4 über den I2C-Bus mit dem RN-KeyLCD verbunden. Zum Programmieren verwende ich die Bascom Demo Version 1.11.7.7. Die Stromversorgung von beiden Boards wird über ein Netzgerät sicher gestellt welches an das RN-Control-Board angeschlossen ist. Das RN-KeyLCD bezieht seinen Strom über den I2C-Bus vom RN-Control-Board.
Bei erstmaligem erfolreichen Brennvorgang funktioniert das Programm vollständig. Nachdem ich jedoch die Stromversorgung wieder hergestellt habe bleibt die Anzeige statisch und verändert sich nicht mehr. Es kann aber auch vorkommen, dass nach dem Brennen der gleichen *.hex Datei das Programm nicht funktioniert. Kann mir jemand sagen woran das liegen könnte?
Ein weiteres Problem beschäftigt sich auch mit dem LCD-Display. Wenn das Programm läuft erscheinen plötzlich Anzeigensegmente an Stellen an denen eigentlich gar nichts stehen dürfte. So habe ich der vierten Zeile nur einen Text stehen der in der siebten Spalte beginnt. Jedoch schreibt das Display Dinge vorne dran, die da gar nicht hin gehören. Vielleicht hat jemand eine Idee oder eine Lösung wie man das Problem beseitigen kann.
Vielen Dank schon mal
E.G.O.
$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports für I2c
Config Sda = Portc.1
Declare Sub Rnlcd_curser(byval Spalte As Byte , Byval Zeile As Byte)
Declare Sub Rnlcd_clr()
Declare Sub Rnlcd(byval Text As String)
Declare Function Rnlcd_getscan()as Word
Declare Sub Rnlcd_scanmodus(byval Ein As Byte) 'Tastenscanmodus ein/ausschalten
Const Schreiben = &H40
Const Lesen = &H41
'-------------------------------------------------------------------------------
Dim Stemp As String * 100
Dim Taste As Word
Dim I As Word
Wait 1 'warte bis LCD bereit
I2cinit
Rnlcd_clr
I = 120
Wait 1
Do
Rnlcd_curser 1 , 1
Rnlcd " E.G.O.-Ausbildung"
If I >= 100 Then
Rnlcd_curser 12 , 3
Rnlcd "s"
Else
Rnlcd_curser 11 , 3
Rnlcd " s"
End If
Rnlcd_curser 18 , 3
Rnlcd "#=+"
Rnlcd_curser 7 , 4
Stemp = "0 = Start"
Rnlcd Stemp
Taste = Rnlcd_getscan()
If Taste = 512 Then
I = I - 10
Elseif Taste = 2048 Then
I = I + 10
Else
Rnlcd_curser 1 , 3
Stemp = "*=- " + Str(i)
Rnlcd Stemp
End If
Waitms 400
Loop
End
'------------------------------------------------------------------------------
Sub Rnlcd_curser(byval Spalte As Byte , Byval Zeile As Byte) 'Curser setzen
Local Befehle As String * 4
Befehle = Chr(27) + Chr(79) + Chr(spalte) + Chr(zeile)
I2csend Schreiben , Befehle , 4
End Sub
Sub Rnlcd_clr() 'LCD löschen
Local Befehle As String * 2
Befehle = Chr(12)
I2csend Schreiben , Befehle , 1
End Sub
Sub Rnlcd(byval Text As String) 'Ausgabebefehl
Local Le As Word
Le = Len(text)
I2csend Schreiben , Text , Le
End Sub
Function Rnlcd_getscan()as Word 'Scancode as Wort abfragen
Local Lscan As Byte
Local Hscan As Byte
I2cstart
I2cwbyte Lesen
I2crbyte Lscan , Ack
I2crbyte Hscan , Nack
I2cstop
If Hscan.7 = 1 Then 'ASCii Modus
Rnlcd_getscan = Lscan
Else
Rnlcd_getscan = Hscan * 256
Rnlcd_getscan = Rnlcd_getscan + Lscan
End If
End Function
Sub Rnlcd_scanmodus(byval Ein As Byte) 'Tastenmodus ein und ausschalten
Local Befehle As String * 3
Befehle = Chr(27) + Chr(119) + Chr(ein)
I2csend Schreiben , Befehle , 3
End Sub
ich habe ein RN-Control V1.4 über den I2C-Bus mit dem RN-KeyLCD verbunden. Zum Programmieren verwende ich die Bascom Demo Version 1.11.7.7. Die Stromversorgung von beiden Boards wird über ein Netzgerät sicher gestellt welches an das RN-Control-Board angeschlossen ist. Das RN-KeyLCD bezieht seinen Strom über den I2C-Bus vom RN-Control-Board.
Bei erstmaligem erfolreichen Brennvorgang funktioniert das Programm vollständig. Nachdem ich jedoch die Stromversorgung wieder hergestellt habe bleibt die Anzeige statisch und verändert sich nicht mehr. Es kann aber auch vorkommen, dass nach dem Brennen der gleichen *.hex Datei das Programm nicht funktioniert. Kann mir jemand sagen woran das liegen könnte?
Ein weiteres Problem beschäftigt sich auch mit dem LCD-Display. Wenn das Programm läuft erscheinen plötzlich Anzeigensegmente an Stellen an denen eigentlich gar nichts stehen dürfte. So habe ich der vierten Zeile nur einen Text stehen der in der siebten Spalte beginnt. Jedoch schreibt das Display Dinge vorne dran, die da gar nicht hin gehören. Vielleicht hat jemand eine Idee oder eine Lösung wie man das Problem beseitigen kann.
Vielen Dank schon mal
E.G.O.
$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports für I2c
Config Sda = Portc.1
Declare Sub Rnlcd_curser(byval Spalte As Byte , Byval Zeile As Byte)
Declare Sub Rnlcd_clr()
Declare Sub Rnlcd(byval Text As String)
Declare Function Rnlcd_getscan()as Word
Declare Sub Rnlcd_scanmodus(byval Ein As Byte) 'Tastenscanmodus ein/ausschalten
Const Schreiben = &H40
Const Lesen = &H41
'-------------------------------------------------------------------------------
Dim Stemp As String * 100
Dim Taste As Word
Dim I As Word
Wait 1 'warte bis LCD bereit
I2cinit
Rnlcd_clr
I = 120
Wait 1
Do
Rnlcd_curser 1 , 1
Rnlcd " E.G.O.-Ausbildung"
If I >= 100 Then
Rnlcd_curser 12 , 3
Rnlcd "s"
Else
Rnlcd_curser 11 , 3
Rnlcd " s"
End If
Rnlcd_curser 18 , 3
Rnlcd "#=+"
Rnlcd_curser 7 , 4
Stemp = "0 = Start"
Rnlcd Stemp
Taste = Rnlcd_getscan()
If Taste = 512 Then
I = I - 10
Elseif Taste = 2048 Then
I = I + 10
Else
Rnlcd_curser 1 , 3
Stemp = "*=- " + Str(i)
Rnlcd Stemp
End If
Waitms 400
Loop
End
'------------------------------------------------------------------------------
Sub Rnlcd_curser(byval Spalte As Byte , Byval Zeile As Byte) 'Curser setzen
Local Befehle As String * 4
Befehle = Chr(27) + Chr(79) + Chr(spalte) + Chr(zeile)
I2csend Schreiben , Befehle , 4
End Sub
Sub Rnlcd_clr() 'LCD löschen
Local Befehle As String * 2
Befehle = Chr(12)
I2csend Schreiben , Befehle , 1
End Sub
Sub Rnlcd(byval Text As String) 'Ausgabebefehl
Local Le As Word
Le = Len(text)
I2csend Schreiben , Text , Le
End Sub
Function Rnlcd_getscan()as Word 'Scancode as Wort abfragen
Local Lscan As Byte
Local Hscan As Byte
I2cstart
I2cwbyte Lesen
I2crbyte Lscan , Ack
I2crbyte Hscan , Nack
I2cstop
If Hscan.7 = 1 Then 'ASCii Modus
Rnlcd_getscan = Lscan
Else
Rnlcd_getscan = Hscan * 256
Rnlcd_getscan = Rnlcd_getscan + Lscan
End If
End Function
Sub Rnlcd_scanmodus(byval Ein As Byte) 'Tastenmodus ein und ausschalten
Local Befehle As String * 3
Befehle = Chr(27) + Chr(119) + Chr(ein)
I2csend Schreiben , Befehle , 3
End Sub