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.



Code:
$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