-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: LCD Display 4x20 an Digital Ports

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2006
    Beiträge
    15

    LCD Display 4x20 an Digital Ports

    Anzeige

    Hallo,


    ich habe wiedereinmal ein kleines Problem mit meiner C-Control(M-Unit 2.0). Es ist folgendes: Für eine Anwendung möchte ich ein 4x20 Punktmatrix Display mit dem KS0066 ansteuern. Das ganze soll über die Digitalports laufen, wie dass bereits angeschlossene Display auf dem Application Board. Nun habe ich das 4x20 parallel zu dem bereits vorhandenen Display auf die gleichen Leitungen angeschlossen (RS: Port 14, RW: Port 13, E: Port 15, DB7 - DB 4: Port 12 bis Port 9, Versorgung klappt alles) nun verwende ich ein Programm welches mir einfach in einer Schleife etwas in die Zeilen schreiben soll, auf dem integrierten Display sieht man alles nur dass 4x20 zeigt nichts an. Nach dem Internet ist der KS0066 kompatibel zum HD74880 und so denke ich mir sollte die Ansteuerung mit dem Basic ++ Programm eigentlich funktionieren.

    Code:
    define i as byte
    i = 0
    
    WITH LCD
    .INIT
    do
    .CLEAR
    .POS 1,1
    .PRINT "Hallo"
    .POS 2,1
    .PRINT "HALLO"
    .POS 3,1
    .PRINT "HALLO HALLO"
    .POS 4,1 
    .PRINT "HALLO HALLO HALLO"
    loop until i = 1
    
    END WITH
    Ich habe mit dem Osziloskope nachgesehen, es kommen Signale zum Display, allerdings zeigt sich einfach nichts, hat jemand eventuell eine Idee wie ich mein Problem beheben könnte?

    Danke schon im Vorraus für eventuelle Antworten.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2006
    Ort
    Dresden
    Alter
    62
    Beiträge
    370
    Hallo,
    leider ist das LCD auf dem App-Bord fest verdrahtet, so das ein 2.tes LCD (parallel angeschlossen) so ohne weiteres nicht funzt.
    Dazu braucht jedes LCD einen eigenen Enable.
    Um die Betriebssytem-Routinen nutzen zu können, ist >Basteln< notwendig.(das System benutzt Port 15).
    ALSO: Leitung von Port 15 zum App-Bord-LCD unterbrechen, einen (elektronischen) Umschalter bauen und anschliessen. Hab' den Link leider nicht, hier im Forum stand aber schon mal was dazu.
    Zum beispiel mit UND-Gattern: Port 16(Licht) UND Port 15(Enable) -> enable 1.tes LCD;
    Port 16 invertiert(also gegenphasiges Signal) UND Port 15 -> enable 2.tes LCD.

    MfG Lutz
    Wir haben so viel mit so wenig solange versucht, das wir jetzt qualifiziert sind, fast alles mit fast nichts zu bewerkstelligen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2006
    Beiträge
    15
    Okay, danke für die Antwort ^^ ich habe es schon irgendwie befürchtet (also so etwas in der Art)

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.12.2003
    Beiträge
    163

    Re: LCD Display 4x20 an Digital Ports

    Zitat Zitat von Reth
    Hallo,


    ich habe wiedereinmal ein kleines Problem mit meiner C-Control(M-Unit 2.0). Es ist folgendes: Für eine Anwendung möchte ich ein 4x20 Punktmatrix Display mit dem KS0066 ansteuern. Das ganze soll über die Digitalports laufen, wie dass bereits angeschlossene Display auf dem Application Board. Nun habe ich das 4x20 parallel zu dem bereits vorhandenen Display auf die gleichen Leitungen angeschlossen (RS: Port 14, RW: Port 13, E: Port 15, DB7 - DB 4: Port 12 bis Port 9, Versorgung klappt alles) nun verwende ich ein Programm welches mir einfach in einer Schleife etwas in die Zeilen schreiben soll, auf dem integrierten Display sieht man alles nur dass 4x20 zeigt nichts an. Nach dem Internet ist der KS0066 kompatibel zum HD74880 und so denke ich mir sollte die Ansteuerung mit dem Basic ++ Programm eigentlich funktionieren.
    Eigentlich könnte es so wie du schreibst funktionieren, allerdings muss der
    Kontrast zum LCD jeweils separat zugeführt werden.
    Was das KS066 betrifft, kann ich zur Kompatibilität nichts sagen, aber dafür
    zum KS0073, was aber womöglich auch für das KS066 gilt.
    Durch die andere Initialisierung geht aber das zweizeilige evtl. nicht
    mehr. -> Ausprobieren
    -----------------------------------------------------------------
    LCD mit KS0073 (nahezu HD44780 kompatibel)
    -----------------------------------------------------------------
    LCDs mit dem KS0073 Controller (z.B. DIP204-4) benötigen im
    4-Zeilen Modus eine zusätzliche Initialisierung und haben ausserdem
    eine andere Zuordnung von Adresse zu Zeile.

    define LCDPORT byteport[2]
    define OUTBYTE byte[1]
    define LCDDATA byte[2]

    print "#ON_LCD#";"#INIT#";
    LCDDATA=&h24:gosub LCD_WRITECMDause 2
    LCDDATA=&h09:gosub LCD_WRITECMDause 2
    LCDDATA=&h20:gosub LCD_WRITECMDause 2
    print"#L101#";"Z1";
    print"#L133#";"Z2";
    print"#L165#";"Z3";
    print"#L233#";"Z4";
    #lp
    goto lp

    '--------- ------WRITE HI NIBBLE LCD COMMAND ------------
    #LCD_WRITECMD
    OUTBYTE=(LCDDATA shr 4)
    LCDPORT=OUTBYTE or &B01000000:LCDPORT=OUTBYTE and &B10111111
    '--------------- WRITE LO NIBBLE ------------------------
    OUTBYTE=(LCDDATA and &H0F)
    LCDPORT=OUTBYTE or &B01000000:LCDPORT=OUTBYTE and &B10111111
    return

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2006
    Beiträge
    15
    Gut, ich habe das nun ausprbiert, aber das Display macht nichts :/ kann es sein dass ich die Anschlüsse falsch habe für dieses Programm (Anschlüsse sind wie oben erwähnt) der KS0066 is soweit ich weiss Kompatibel mit dem KS0073. Also, wie muss man das Display für diese Programm anschliessen?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.12.2003
    Beiträge
    163
    Zitat Zitat von Reth
    Gut, ich habe das nun ausprbiert, aber das Display macht nichts :/ kann es sein dass ich die Anschlüsse falsch habe für dieses Programm (Anschlüsse sind wie oben erwähnt) der KS0066 is soweit ich weiss Kompatibel mit dem KS0073. Also, wie muss man das Display für diese Programm anschliessen?

    So wie du es beschreibst, sollte es korrekt angeschlossen sein.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2006
    Ort
    Dresden
    Alter
    62
    Beiträge
    370
    Hallo,
    das mit dem Kontrast hatte ich vergessen (zu warm). Auf meinem App-Bord habe ich das LCD steckbar gemacht, das von C ist ja nicht so toll...
    Also, der KS 0073 regelt den Kontrast gg. Vdd (5V), die meisten "normalen" gg. masse. // heisst: schleifer steht nahe Betriebsspannung beim KS0073
    Beim Einschalten der Spannung muss!! -ohne Initialisierung- eine Reihe schwarzer Balken zu sehen sein, dreh mal am Kontrastpoti, da muss sich was tun. wenn nicht-> falsch/fehlerhaft angeschlossen oder defekt.
    Bis bald... Lutz
    Wir haben so viel mit so wenig solange versucht, das wir jetzt qualifiziert sind, fast alles mit fast nichts zu bewerkstelligen.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2006
    Beiträge
    15
    Ja das mit der Versorgung klappt alles einwandfrei(Modul supply 5V, LCD Supply Ground und Beleuchtung einfach 5V), nur ich bekomme nichts (Schriftmässig) auf das Display, ich habe jetzt auch schon versucht das ganze binär anzusteuern, nach den Schema im Datenblatt, aber da tut sich auch nichts, ich werde es einmal bei einem anderen Aufbau versuchen in dem kein anderes Display ist ^^

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo Reth!

    Schu mal, bitte, ins Datenblatt Deines Displays. Es könnte sein, dass es negative Kontrastspannung braucht.

    MfG

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2006
    Ort
    Dresden
    Alter
    62
    Beiträge
    370
    Hallo,
    also ich habe mein App-Bord reaktiviert (benutze sonst eigene LP) aber leider nur ein 4x20 LCD blau/weiss mit Kontroller KS0073 gefunden.
    mit dem nachstehenden Prog, ich weiss leider die Quelle nicht mehr,
    mit Workbench1.18 und Basic++2006 in Kontroller geladen funktioniert die Anzeige.

    DEFINE DB0 as Port[9]
    DEFINE DB1 as PORT[10]
    DEFINE DB2 as PORT[11]
    DEFINE DB3 as PORT[12]
    DEFINE RW as PORT[13]
    DEFINE RS as PORT[14]
    DEFINE EN as PORT[15]

    define bit_RW as bit[1] ' Zwischenspeicher für RW-Status
    define bit_RS as bit[2] ' Zwischenspeicher für RS-Status
    define bit_Cursor as bit[3] ' gibt an, ob Cursor sichtbar = on
    define bit_Blink as bit[4] ' gibt an, ob Cursor blinken soll = on
    define bit_5 as bit[5]
    define bit_6 as bit[6]
    define bit_7 as bit[7]

    define Zeile as byte ' globale Variable, die von LCD_POS() ausgewertet wird
    define Spalte as byte ' globale Variable, die von LCD_POS() ausgewertet wird
    define DATA as byte
    define i as byte
    define j as byte
    ' ---------------------------------------------
    FUNCTION LCD_POS(Zeile as byte, Spalte as byte)
    ' Positioniert den Cursor, dannach kann ins LCD geschrieben werden.
    ' benutzt die Globalen Variablen bit_RW und bit_RS
    bit_RW = RW ' den Status der Ports sichern
    bit_RS = RS
    RW = off ' Auf Befehlsmodus umschalten
    RS = off ' Auf Schreibmodus umschalten
    ' nicht plausible Zeilenangaben abfangen
    ' IF (Zeile = 0 or Zeile > 4) THEN Zeile = 1
    ' nicht plausible Spaltenangaben abfangen
    ' IF (Spalte < 1 or Spalte > 20) THEN Spalte = 1
    ' Die Position ist nach Datenblatt KS0073:
    ' Zeile1 = 00h, Zeile 2 = 20h, Zeile 3 = 40h, Zeile 4 = 60h
    ' Die Variablen Zeile und Spalte werden missbraucht
    Zeile = (Zeile -1) * 32 + (Spalte - 1) ' hier steht die LCD-Position
    ' siehe SET DDRAM Adress im Datenblatt (Seite 36)
    ' Daten schreiben, zuerst upper nibble, command bit 7 setzen
    Spalte = ((Zeile shr 4) or 1000b) ' Bit 4 setzen, Bit 3 - 0 sind Teil der Position
    ' nibble auf Ports übertragen
    BITSET(Spalte)
    PULSE EN ' und senden
    ' lower nibble
    ' überflüssig, wird in BITSET behandelt: Spalte = (Zeile and 15) ' 1111
    BITSET(Zeile)
    PULSE EN
    RS = bit_RS ' zurück in den ursprünglichen Zustand
    RW = bit_RW '
    END FUNCTION
    ' ---------------------------------------------
    ' setzt die Ports für die LCD-Ausgabe
    FUNCTION BITSET(Muster as byte)
    DB0 = MUSTER and 1
    DB1 = MUSTER and 2
    DB2 = Muster and 4
    DB3 = Muster and 8
    PAUSE 1
    end function
    ' ----------------------------------------------
    ' schaltet einen blinkenden Cursor ein
    FUNCTION DISPLAY_CURSOR()
    '
    bit_RS = RS ' Status sichern
    bit_RW = RW
    RS = off
    RW = off
    BITSET(0) ' upper nibble
    PULSE EN
    ' CMD = 1/
    ' Display aus = 0, ein = 1
    ' Cursor aus = 0, ein = 1
    ' Blink aus = 0, ein = 1
    BITSET ( ABS (bit_Cursor * 2 + bit_Blink - 12 ))
    PULSE EN
    RS = bit_RS ' RS restaurieren
    RW = bit_RW ' RW restaurieren
    end FUNCTION
    ' -------------------------------------------------
    ' ---------------------------------------------------
    FUNCTION KS0073_INIT()
    ' Initialisierung des LCDs 4x20 mit Controller KS0073
    LCD.INIT ' Standardinitialisierung
    LCD.OFF ' sollte eigentlich gar nicht erforderlich sein
    ' RW = off ' immer off im Befehlsmodus
    ' RS = off ' immer off im Befehlsmodus
    ' 3x den 8-Bit-Modus mit Pause dazwischen aufrufen ------------------
    BITSET(3) ' 0011
    PULSE EN
    pause 1
    Pulse EN
    pause 1
    PULSE EN
    ' CMD: 4-Bit-Modus aufrufen ----------------------
    BITSET(2) ' 00000010
    PULSE EN
    ' von nun an sind upper und lower nibble getrennt zu senden
    ' CMD: Function Set - upper nibble
    BITSET(2) ' 0010
    PULSE EN
    ' lower nibble
    ' 2 Zeilen-Modus, RE-bit
    BITSET(12) ' 1100
    PULSE EN
    ' CMD: extended Function Set + RE ---------------------
    ' upper nibble
    BITSET(0)
    PULSE EN
    ' lower nibble
    ' Cmd, 5-dot-Font, normaler Cursor, 4-line-display
    BITSET(9) '1001
    PULSE EN
    ' ----------------------------------------------
    ' CMD: Function Set - upper nibble
    BITSET(2) ' 0010
    PULSE EN
    ' lower nibble
    ' 2 Zeilen-Modus, RE-bit-aus
    BITSET( ' 1000 ' Eigentlich kein Smilie,Lutz
    PULSE EN
    ' CMD: clear display -----------------------------------------
    BITSET(0)
    PULSE EN
    BITSET(1) ' 0001
    PULSE EN
    ' CMD: cursor display shift ------------------------------------------
    ' upper nibble
    BITSET(1) ' 0001
    PULSE EN
    ' lower nibble
    ' Cursor shift, R/L shift
    BITSET(0)
    PULSE EN
    ' CDM: display on/off control ------------------------------------------
    ' upper nibble
    BITSET(0)
    PULSE EN
    ' Cmd, Display ein, Cursor off, Blink off
    BITSET(12) ' 1100
    PULSE EN
    END FUNCTION
    ' ---------------------------------------------------------------------
    KS0073_init()
    '----------------------------
    #start
    Pause 100
    LCD.INIT switchonly
    for i = 1 to 4
    for j = 1 to 21 step 2
    'pause 1
    LCD_POS(i, j)
    LCD.PRINT "*/"
    next j
    next i
    pause 50
    LCD.CLEAR
    goto start
    '----------------------------
    attributes
    end attributes

    PS: Siehst du nach dem Einschalten -vor Init- 2 Reihen schwarze Balken?
    wenn nicht, s.o.!
    Lutz
    Wir haben so viel mit so wenig solange versucht, das wir jetzt qualifiziert sind, fast alles mit fast nichts zu bewerkstelligen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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