-         

Ergebnis 1 bis 4 von 4

Thema: RN-Control<=>I2C<=> RN-KeyLCD Problem

  1. #1

    RN-Control<=>I2C<=> RN-KeyLCD Problem

    Anzeige

    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

  2. #2
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.989
    Blog-Einträge
    1
    Es könnte sein das der Spannungsregler von RN-Control etwas überlastet ist wenn kein Kühlkörper vorhanden ist. Oder aber die Spannung fällt am I2C Kabel etwas ab.
    Empfehlenswert ist es RN-KeyLCD direkt mit der Batteriespannung zu versorgen und den eigenen Spannungsregler dort zu benutzen. Also entsprechendes Umjumpern nicht vergessen (siehe Doku).

    Gruß Frank

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Hallo

    Bei mir hat die Spannungsversorgung der RN-KeyLCD über I2C auch nicht funktioniert. Als ich die RN-KeyLCD selber mit 12V versorgte funktionierte es.
    MfG

    Hellmut

  4. #4
    Hallo Leute vielen Dank ihr habt mir echt geholfen. Jetzt funktioniert es wunderbar. Kann dieses Forum nur empfehlen.


    MfG

    E.G.O.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •