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







Zitieren

Lesezeichen