- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Initialisierung des LCD - Display (20x4)

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2004
    Ort
    Saarland
    Alter
    55
    Beiträge
    15

    Initialisierung des LCD - Display (20x4)

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich lese hier schon eine zeitlang mit, jetzt habe ich ne Frage.
    Gibt es die (Firmware-)Quelle zu den RN.Boards (hier speziell das RN-KeyLCD) zum Download?

    Ich versuche gerade das gleiche LCD-Display unter Bascom direkt an einem AVR zum Laufen zu kriegen, wie es auch auf dem RN-KeyLCD-Board unterstützt wird (Dotmatrix, 20x4 Zeichen, Kontroller KS0073). Leider mache ich bei der Initialisierung irgendwas falsch.

    Ich bekomme zwar den Text auf das Display, allerdings lassen sich die 4 Zeilen nicht sauber ansteuern. Die erste Zeile und die dritte Zeile sind ok. Die zweite und vierte Zeile kann ich erst ab etwa der Mitte beschreiben. Am Anfang dieser Zeilen sehe ich wieder ein Teil des Textes aus der jeweiligen Zeile davor.

    Ich vermute, dass ich nur igendwas bei der Ansteuerung oder Inititalisierung falsch mache. (Ich benutze die orginal - Bascom - Routinen)

    Code-Schnipsel:

    Code:
    ' Lcd-Modul initialisieren
    
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.1
    Config Lcd = 20 * 4
    Config Lcdbus = 4
    Angeschlossen ist das Display mit den Leitungen E, RS und D4 - D7.

    Vielleicht hat ja jemand einen Tipp, oder sogar einen Code-Schnipsel, was bei der Initialisierung fehlt.

    Danke und Gruß,
    - Joerg -

  2. #2
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hallo,

    mit dem Quellcode der Firmware kann ich nicht dienen, aber ich kann dir sagen das der KS-Controller nicht 100% identisch mit dem üblichen ist, daher funktioniert die Bascom Libary nicht optimal. Du musst das LCD etwas anders initialisieren.
    Entweder du schreibst eine kleine Libary dafür oder aber du sendest nach dem Bascom "initlcd" einige Kommandos direkt an das LCD, dann gehts auch mit den Bascom Befehlen und der normalen Libary

    In etwas so:
    Code:
     Call Rn_writelcdcode(&B00101100)                         ' Funktionsset RE=1
       Call Rn_writelcdcode(&B00001001)                         ' 4 Bit-Datenlänge, extension
       Call Rn_writelcdcode(&B00101000)                         ' Funktionsset RE=0
    
       Call Rn_writelcdcode(&B00000110)                         '  Entry Mode Set Cursor Auto-Increment
       Call Rn_writelcdcode(&B00001100)                         '  Display ein, Cursor aus, Blinken aus
    Den Befehl "Rn_writelcdcode" musst du dir selbst definieren, der ist abhängig von deiner Belegung.Er gibt die Befehle in 4er Bits direkt an das LCD.
    Siehe auch LCD-Datenblatt

    Gruß Frank

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2004
    Ort
    Saarland
    Alter
    55
    Beiträge
    15
    Hallo Frank,

    das hört sich doch vielversprechend an.
    Wenn ich das richtig verstehe - wenn nicht bitte korrigieren - dann sollte die Routine RN_writelcdcode die in Deinem Beispiel genannten Bitmuster einfach nacheinander auf die Pins des LCD ausgeben. (Ich vermute von links nach rechts auf D0, D1 ... D7)
    Müssen diese eine Mindestzeit anstehen? (Ich ziehe die letzte Frage zurück, das steht bestimmt im Datenblatt)

    Ich muss gestehen, dass ich die Initialisierung im Datenblatt nicht wirklich verstanden habe - vielleicht hätte ich das einfach mal ausprobieren sollen.

    Ich werds auf jeden Fall nachher einmal versuchen und melde mich wieder wenns geklappt hat - und natürlich auch wenn ich nicht weiterkomme. Bis hierhin aber schon mal danke.

    Gruß
    - Joerg -

  4. #4
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hallo Joerg,
    ja das Datenblatt ist ein wenig verwirrend, ich hatte auch Anfangs meine Problemchen damit. Auch ein Grund warum ich rn-keylcd programmiert hab, ist halt doch bequemer.

    Also der Code den ich die gepostet hab ist nur dann gültig, wenn dir das Display im 4 Bit Modus betreibst. Du musst dann ja 6 Leitungen D1-4 (oberen 4 Bit) und E und RS mit einem Port verbinden. Dann müssen immer 4 Bit gleichzeitig gesendet werden, wobei E und RS auch besonders gepulst wird. Dazu haben wir im Download Bereich irgendwo ein kleines Tutorial wo das genauer beschrieben wird. In Bascom könnte die Funktion in etwa so aussehen:

    Code:
    ' Definition der Displayports
    Config Pind.5 = Output                                      'E
    E Alias Portd.5
    Config Pinb.0 = Output                                      'RS
    Rs Alias Portb.0
    Config Pinc.0 = Output                                      'D4
    D1 Alias Portc.0
    Config Pinc.1 = Output                                      'D3
    D2 Alias Portc.1
    Config Pinc.2 = Output                                      'D2
    D3 Alias Portc.2
    Config Pinc.3 = Output                                      'D1
    D4 Alias Portc.3
    
    Sub Rn_writelcdcode(byval Zeichen As Byte)
       Rs = 0
    
       If Zeichen.4 = 1 Then D1 = 1 Else D1 = 0
       If Zeichen.5 = 1 Then D2 = 1 Else D2 = 0
       If Zeichen.6 = 1 Then D3 = 1 Else D3 = 0
       If Zeichen.7 = 1 Then D4 = 1 Else D4 = 0
       E = 1
       Waitus 2
       E = 0
       If Zeichen.0 = 1 Then D1 = 1 Else D1 = 0
       If Zeichen.1 = 1 Then D2 = 1 Else D2 = 0
       If Zeichen.2 = 1 Then D3 = 1 Else D3 = 0
       If Zeichen.3 = 1 Then D4 = 1 Else D4 = 0
       E = 1
       Waitus 2
       E = 0
    
       Waitus 250
    End Sub

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2004
    Ort
    Saarland
    Alter
    55
    Beiträge
    15

    Lösung gefunden für Display 20x4 mit KS0073

    Hallo nochmal,

    bin zwar nicht direkt zum Ausprobieren der Tipps gekommen, habe nun aber die Lösung mithilfe der Tips gefunden.

    Den Code habe ich mal beigefügt:

    Code:
       'Pins des LCD-Modules setzen ggf. an eigene Anschlüsse anpassen
    
       Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.1
       Initlcd
    
       'Config Lcd = 20 * 4      ' wird nicht benötigt daher auskommentiert
       'Config Lcdbus = 4        ' oder weglassen :-)
    
       Call Lcdwrite(&B00101100)
       Waitms 5
    
       Call Lcdwrite(&B00001001)
       Waitms 5
    
       Call Lcdwrite(&B00101000)
       Waitms 5
    
       Call Lcdwrite(&B00000110)
       Waitms 5
    
       Call Lcdwrite(&B00001100)
       Waitms 5
    
       '...
       ' hier LCD - Ausgaben und Hauptprogramm
       '...
    
       'Schreibt die Initialisierungs - Bits zum LCD
    
       Sub Lcdwrite(byval Zeichen As Byte)
    
         ' Höherwertiges Nibble setzen
         If Zeichen.4 = 1 Then Portc.4 = 1 Else Portc.4 = 0
         If Zeichen.5 = 1 Then Portc.5 = 1 Else Portc.5 = 0
         If Zeichen.6 = 1 Then Portc.6 = 1 Else Portc.6 = 0
         If Zeichen.7 = 1 Then Portc.7 = 1 Else Portc.7 = 0
         ' Höherwertiges Nibble übertragen
         Portc.3 = 1
         Waitms 1
         Portc.3 = 0
         Waitms 1
    
         ' Niederwertiges Nibble setzen
         If Zeichen.0 = 1 Then Portc.4 = 1 Else Portc.4 = 0
         If Zeichen.1 = 1 Then Portc.5 = 1 Else Portc.5 = 0
         If Zeichen.2 = 1 Then Portc.6 = 1 Else Portc.6 = 0
         If Zeichen.3 = 1 Then Portc.7 = 1 Else Portc.7 = 0
         ' Niederwertiges Nibble übertragen
         Portc.3 = 1
         Waitms 1
         Portc.3 = 0
         Waitms 1
    
       End Sub
    Das kann man zwar bestimmt noch besser machen, aber es funktioniert.

    Ich habe jetzt "nur" noch das Problem, dass das LCD mit den Bascom-Befehlen
    - Lowerline die dritte Zeile und mit
    - Thirdline die Zweite Zeile anspricht.

    Das ist zwar nicht schön aber kein Problem, da ich das ja im Code berücksichtigen kann. (Nur für die Dokumentation ist es etwas verwirrend.)

    Wenn hier noch jemand einen Tipp für mich hat, ist der gerne willkommen, ansonsten lasse ich es so wie es jetzt ist.

    Danke nochmal für die Hilfe.
    Gruß, Jörg
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken display_20x4.jpg  

  6. #6
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Lowerline und Thurdline nehme ich eigentlich nie. Wenn der Befehl Locate richtig funktioniert reicht es ja in der Praxis.

    Du solltest aber noch den Befehl
    Config Lcd = 20 * 4a
    einfügen.

    Gruß Frank

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2004
    Ort
    Saarland
    Alter
    55
    Beiträge
    15
    Prima,

    sobald ich den Befehl
    Config LCD = 20 * 4a
    eingefügt habe, funktionieren auch Lowerline und Thirdline richtig.

    Auch Locate arbeitet richtig.
    Ich bin begeistert.

    Gruß Jörg

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Nur nochmal so zum Verständnis: Ich muss einfach den Code den Hemisoft geschrieben hat in mein Bascom programmfenster einfügen die Pins anpassen und kann dann wie gewöhlich mein programm schreiben?

    Mein LCD hat glaube ich einen KS0066 Controller.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2004
    Ort
    Saarland
    Alter
    55
    Beiträge
    15
    Hallo hardstyleroxx,
    genau. Du musst den Quelltext einfach an den Anfang (bevor du LCD-Ausgaben nutzt) in Dein Programm reinkopieren.
    Dort wo im Quelltext die Zeilen

    Code:
       '... 
       ' hier LCD - Ausgaben und Hauptprogramm 
       '...
    stehen kann dann Dein Hauptprogramm und auch (darin) Deine normale LCD-Ausgabe (mit den Standard-Bascom-Befehlen) stehen.

    Vergiss nicht die Zeile

    Code:
    Config LCD = 20 * 4a
    an der Stelle einzufügen, wo diese Zeile (ohne 'a') im Quelltext noch auskommentiert ist. Dann funktionieren auch die Zeilenzuordnungen richtig.

    Aber Achtung! Du hast geschrieben, dass Du einen KS0066 - Controller hast. Ich hatte einen KS0073. Den KS0066 habe ich noch nicht probiert. Vielleicht kann dazu jemand anderes was sagen - ob diese kompatibel ist zum KS0073 - ich komme jetzt gerade nicht dazu, die Datenblätter runterzuladen und das zu prüfen.

    Gruß Jörg (hemisoft)

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Ich habe für das Display mal 40€ bei Conrad bezahlt, ist mit Backlight. Wäre echt schade wenns nicht funktioniert

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests