-         

Ergebnis 1 bis 9 von 9

Thema: EA Dogm204-a ansteuern

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340

    EA Dogm204-a ansteuern

    Anzeige

    Hallo zusammen,

    hat jemand von euch schon mal erfolgreich ein dogm204-a lcd angesteuert und zum laufen gebracht?

    Ich bekomme es nicht hin. Ich würde es gerne im 4bit Modus betreiben.
    Ich habe die Initialisierung genau wie im Datenblatt S.5 beschrieben durchgeführt, aber ich bekomme es noch nicht mal initialisiert.

    http://www.lcd-module.de/fileadmin/pdf/doma/dogm204.pdf

    Nach dem Initialisieren müsste ich doch irgendwo mal den Cursor blinken sehen oder?

    Die Bascom internen Funktionen kann man für das Display nicht zufällig verwenden oder?

    Ich hoffe Ihr könnt mir helfen?

    Viele Grüße

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    speziell dieses Display habe ich noch nicht verwendet, jedoch Grafikdisplays des gleichen Herstellers ; außerdem Textdisplays von anderen Herstellern mit HD44780-Controller.
    Zeige doch mal deinen Programmcode, fischen wir hier im Trüben und können keine hilfreichen Tipps geben oder Fehler suchen.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Hi,

    ja sicher, hier is mein code:

    Code:
    $regfile = "M1284pdef.dat"
    $crystal = 14745600
    
    $hwstack = 100                                             
    $swstack = 100                                           
    $framesize = 200 
    
    ' LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.6 , Wr = Portc.5
    'Config Lcdbus = 4
    Config Lcd = 20 * 4a                                     
    
    ' #PortC
    
    ' PINC.0 = LCD / DB7
    Lcd_db7 Alias Portc.0
    Config Lcd_db7 = Output
    Lcd_db7 = 0
    
    ' PINC.1 = LCD / DB6
    Lcd_db6 Alias Portc.1
    Config Lcd_db6 = Output
    Lcd_db6 = 0
    
    ' PINC.2 = LCD / DB5
    Lcd_db5 Alias Portc.2
    Config Lcd_db5 = Output
    Lcd_db5 = 0
    
    ' PINC.3 = LCD / DB4
    Lcd_db4 Alias Portc.3
    Config Lcd_db4 = Output
    Lcd_db4 = 0
    
    ' PINC.4 = LCD / E
    Lcd_e Alias Portc.4
    Config Lcd_e = Output
    Lcd_e = 0
    
    ' PINC.5 = LCD / R/W
    Lcd_rw Alias Portc.5
    Config Lcd_rw = Output
    Lcd_rw = 0
    
    ' PINC.6 = LCD / RS
    Lcd_rs Alias Portc.6
    Config Lcd_rs = Output
    Lcd_rs = 0
    
    ' PINC.7 = LCD / Reset
    Lcd_reset Alias Portc.7
    Config Lcd_reset = Output
    Lcd_reset = 1                                               ' Reset ausschalten
    
    Declare Sub Lcd_befehl(byval Befehl As Byte)              
                                              ' Befehl Bitmaske: 7=0 , 6=0 , 5=Rs , 4=R/W , 3=Db7, 2=Db6 , 1=Db5 , 0=Db4
    Declare Sub Lcd_enable
    
    
    do
    
    ' LCD INITIALISIEREN
    if init = 0 then
    init = 1
    
             ' Synchronize1:
             Call Lcd_befehl(&B00000011)
             Call Lcd_enable
             Call Lcd_befehl(&B00000011)
             Call Lcd_enable
             ' Synchronize2: Switcht to 4 bit data length
             Call Lcd_befehl(&B00000011)
             Call Lcd_enable
             Call Lcd_befehl(&B00000010)
             Call Lcd_enable
             ' Function Set: 4 bit data length extension
             Call Lcd_befehl(&B00000010)
             Call Lcd_enable
             Call Lcd_befehl(&B00001010)
             Call Lcd_enable
             ' Extended function: 4 line display
             Call Lcd_befehl(&B00000000)
             Call Lcd_enable
             Call Lcd_befehl(&B00001001)
             Call Lcd_enable
             ' Entire mode set:
             Call Lcd_befehl(&B00000000)
             Call Lcd_enable
             Call Lcd_befehl(&B00000110)
             Call Lcd_enable
             ' Bias setting:
             Call Lcd_befehl(&B00000001)
             Call Lcd_enable
             Call Lcd_befehl(&B00001110)
             Call Lcd_enable
             ' Function Set:
             Call Lcd_befehl(&B00000010)
             Call Lcd_enable
             Call Lcd_befehl(&B00001001)
             Call Lcd_enable
             ' Internal OSC:
             Call Lcd_befehl(&B00000011)
             Call Lcd_enable
             Call Lcd_befehl(&B00001011)
             Call Lcd_enable
             ' Follower control:
             Call Lcd_befehl(&B00000110)
             Call Lcd_enable
             Call Lcd_befehl(&B00001110)
             Call Lcd_enable
             ' Power control
             Call Lcd_befehl(&B00000101)
             Call Lcd_enable
             Call Lcd_befehl(&B00000111)
             Call Lcd_enable
             ' Contrast set:
             Call Lcd_befehl(&B00000111)
             Call Lcd_enable
             Call Lcd_befehl(&B00000100)
             Call Lcd_enable
             ' Function set:
             Call Lcd_befehl(&B00000010)
             Call Lcd_enable
             Call Lcd_befehl(&B00001001)
             Call Lcd_enable
             ' Display on, cursor on, blink on
             Call Lcd_befehl(&B00000000)
             Call Lcd_enable
             Call Lcd_befehl(&B00001111)
             Call Lcd_enable
    
    end if
    
    Loop
    
    
    ' LCD BEFEHL
    
    Sub Lcd_befehl(byval Befehl As Byte)
    
       ' Befehl Bitmaske: 7=0 , 6=0 , 5=Rs , 4=R/W , 3=Db7, 2=Db6 , 1=Db5 , 0=Db4
    
       ' Db4
       Lcd_db4 = Befehl.0
       ' Db5
       Lcd_db5 = Befehl.1
       ' Db6
       Lcd_db6 = Befehl.2
       ' Db7
       Lcd_db7 = Befehl.3
       ' R/W
       Lcd_rw = Befehl.4
       ' Rs
       Lcd_rs = Befehl.5
    
    End Sub
    
    Sub Lcd_enable
    
       Lcd_e = 1
       Waitus 400
       Lcd_e = 0
       Waitms 2
    
    End Sub
    Ich hoffe du kannst da was rauslesen?

    Viele Grüße

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Hi, also es funktioniert leider immer noch nicht.
    Ich habe jetzt nochmal mein Programm überarbeitet. Das sieht nun so Aus:

    Code:
    $regfile = "M1284pdef.dat"
    $crystal = 14745600
    
    ' #PortC
    
    ' PINC.0 = LCD / DB7
    Lcd_db7 Alias Portc.0
    Config Lcd_db7 = Output
    Lcd_db7 = 0
    
    ' PINC.1 = LCD / DB6
    Lcd_db6 Alias Portc.1
    Config Lcd_db6 = Output
    Lcd_db6 = 0
    
    ' PINC.2 = LCD / DB5
    Lcd_db5 Alias Portc.2
    Config Lcd_db5 = Output
    Lcd_db5 = 0
    
    ' PINC.3 = LCD / DB4
    Lcd_db4 Alias Portc.3
    Config Lcd_db4 = Output
    Lcd_db4 = 0
    
    ' PINC.4 = LCD / E
    Lcd_e Alias Portc.4
    Config Lcd_e = Output
    Lcd_e = 0
    
    ' PINC.5 = LCD / R/W
    Lcd_rw Alias Portc.5
    Config Lcd_rw = Output
    Lcd_rw = 0
    
    ' PINC.6 = LCD / RS
    Lcd_rs Alias Portc.6
    Config Lcd_rs = Output
    Lcd_rs = 0
    
    ' PINC.7 = LCD / Reset
    Lcd_reset Alias Portc.7
    Config Lcd_reset = Output
    Lcd_reset = 0                                               ' Reset ausschalten
    
    dim init as bit
    
    do 
    
    if init = 0 then
    init = 1
    
    call lcd_initialisieren
    
    end if
    Loop
    
    Sub Lcd_initialisieren
    
             ' Reset:
             Lcd_reset = 1
             Waitms 200
             Lcd_reset = 0
             Waitms 200
             Lcd_reset = 1
             Waitms 200
    
             ' Synchronize1:
             Call Lcd_befehl(&H30)
             Waitus 1
             ' Synchronize1:
             Call Lcd_befehl(&H30)
             Waitus 1
             ' Synchronize1:
             Call Lcd_befehl(&H30)
             Waitus 1
             ' Synchronize2:
             Call Lcd_befehl(&H20)
             Wait 1
             ' Function Set: 4 bit data length extension
             Call Lcd_befehl(&H2a)
    
             ' Extended function: 4 line display
             Call Lcd_befehl(&H09)
    
             ' Entire mode set: Bottom View
             Call Lcd_befehl(&H06)
    
             ' Bias setting: BS1=1
             Call Lcd_befehl(&H1e)
    
             ' Function Set: 4-Bit data length extension Bit RE=0; IS=1
             Call Lcd_befehl(&H29)
    
             ' Internal OSC: BS0=1 -> Bias=1/6
             Call Lcd_befehl(&H1b)
    
             ' Follower control: Devider on and set value
             Call Lcd_befehl(&H6e)
    
             ' Power control: Booster on and set contrast (BB1=C5, DB0=C4)
             Call Lcd_befehl(&H57)
    
             ' Contrast set: (DB3-DB0=C3-C0)
             Call Lcd_befehl(&H72)
    
             ' Function set: 4-Bit data length extension Bit RE=0; IS=0
             Call Lcd_befehl(&H28)
    
             ' Clear display:
             Call Lcd_befehl(&H01)
    
             ' Set Cursor Position:
             Call Lcd_befehl(&H80)
    
             ' Display on, cursor on, blink on:
             Call Lcd_befehl(&H0f)
    
    End Sub
    
    Sub Lcd_bits_setzen(byval Datenbyte As Byte)
    
       ' Datenbyte Bitmaske: 7=0 , 6=0 , 5=0 , 4=0 , 3=DB7, 2=DB6 , 1=DB5 , 0=DB4
    
       ' Db4
       Lcd_db4 = Datenbyte.0
       ' Db5
       Lcd_db5 = Datenbyte.1
       ' Db6
       Lcd_db6 = Datenbyte.2
       ' Db7
       Lcd_db7 = Datenbyte.3
    
       Call Lcd_enable
    
    End Sub
    
    Sub Lcd_befehl(byval Datenbyte As Byte)
    
       Dim Highnibble As Byte
       Dim Lownibble As Byte
    
       Lownibble = Datenbyte And &B00001111                     ' mask out upper nibble
       Highnibble = Datenbyte                                   ' 1. copy original Value to Highnibble
       Shift Highnibble , Right , 4                             ' 2. Shift upper 4 bits to lower 4 bits
    
       ' R/W
       Lcd_rw = 0
       ' Rs
       Lcd_rs = 0
    
       Call Lcd_bits_setzen(highnibble )
       Call Lcd_bits_setzen(lownibble )
    
    End Sub
    
    Sub Lcd_text(byval Datenbyte As Byte)
    
       Dim Highnibble2 As Byte
       Dim Lownibble2 As Byte
    
       Lownibble2 = Datenbyte And &B00001111                    ' mask out upper nibble
       Highnibble2 = Datenbyte                                  ' 1. copy original Value to Highnibble
       Shift Highnibble2 , Right , 4                            ' 2. Shift upper 4 bits to lower 4 bits
    
       ' R/W
       Lcd_rw = 0
       ' Rs
       Lcd_rs = 1
    
       Call Lcd_bits_setzen(highnibble2 )
       Call Lcd_bits_setzen(lownibble2 )
    
    End Sub
    
    Sub Lcd_enable
    
       Lcd_e = 1
       Waitms 2
       Lcd_e = 0
       Waitms 2
    
    End Sub
    Ich glaube aber inzwischen das ich ein Hardwareproblem habe. Wenn ich an Pin23 des Displays messe, dann messe ich lediglich 2,7V.
    Laut Datenblatt des Display Controllers müssten da aber zwischen 8V und 10V anliegen.
    Irgendwie wird wohl der Displaybooster nicht richtig gestartet. Warscheinlich wird deshalb das Display nicht richtig initialisiert.

    Hat das schon mal jemand gehabt das Problem, oder kann mir da weiterhelfen?

    Hier ist noch der Schaltplan der Displayplatine:

    Klicke auf die Grafik für eine größere Ansicht

Name:	dp.jpg
Hits:	37
Größe:	39,7 KB
ID:	29553

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    habe grob drüber geschaut und auf die Schnelle nichts auffälliges gefunden.
    Außer dass Pins am PORTC verwendet werden, wo auch JTAG rausgeführt wird.
    Du musst auf jeden Fall die JTAG-FUSE deaktivieren, sonst werden einige Pins am PORTC nicht funktionieren (z.B. der Pin PC4 und PC5 werden nicht normal funktionieren und das Display wird sich auch erst recht nicht initialisieren lassen...). Kannst ja auch mal die Pegel an PC4,PC5 nachmessen! Falls jtag noch aktiviert ist, liegen dort "krumme" Spannungen an.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Hi,

    Also ich habe eben nochmal nachgemessen und nachgeschaut, jtag ist definitiv deaktiviert und die Zuordnung der einzelnen Pins funktioniert auch.

    Was ist mit meinen waits? Sind die evtl. zu kurz oder zu lang? Ich habe an Displaypin 23 immernoch nur 2,7V anliegen. Kann das evtl. etwas mit meinem 3,3V Festspannungsregler zu tun haben? Die Kondensatoren die ich momentan verbaut habe sind deutlich kleiner als die im Datenblatt empfohlenen. Diese werde ich jetzt nochmal tauschen und anpassen.

    Habt Ihr keine Ideen mehr? Bin für jede Hilfe dankbar.

    Viele Grüße

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Juhuu es läuft jetzt!!!!

    Ich habe die Kondensatoren getauscht, was aber letztendlich den Erfolg gebracht hat, war folgendes.

    Bei der Initialisierung des Displays muss zunächst mehrmals (ca. 6x) nur das Highbyte von &H30 gesetzt werden (also einmal enable toggeln lassen) dann einmal nur das Highbyte von &H20 setzen. Damit wird dann in den 4bit-Modus gewechselt. Von jetzt an muss / kann ganz normal wie im Datenblatt weiter initialisiert werden also high- und lowbyte.

    That's it!

    Das steht leider nicht so im Datenblatt!!!!

    Soo jetzt habe ich noch eine Frage. Wie kann ich jetzt eine Funktion schreiben um einen String oder einen Zahlenwert auszugeben ohne jedes Zeichen einzeln setzen zu müssen. Also sprich, ich will an die Funktion eine String oder Byte Variable übergeben und die soll dann dargestellt werden.

    Könnt ihr mir da vielleicht eine kleine Hilfestellunggeben?

    Viele Grüße

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von demmy Beitrag anzeigen

    Bei der Initialisierung des Displays muss zunächst mehrmals (ca. 6x) nur das Highbyte von &H30 gesetzt werden (also einmal enable toggeln lassen) dann einmal nur das Highbyte von &H20 setzen. Damit wird dann in den 4bit-Modus gewechselt. Von jetzt an muss / kann ganz normal wie im Datenblatt weiter initialisiert werden also high- und lowbyte.
    Das scheint ein typisches 4-Bit Ansteuerungsproblem zu sein
    http://www.roboternetz.de/community/...l=1#post610173

    Das steht leider nicht so im Datenblatt!!!!
    Da wird davon ausgegangen, daß das LCD frisch aus einem Hardware-Reset kommt.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Ja, das muss man aber erst mal wissen. Wieso schreibt man sowas nicht ganz klar ins Datenblatt rein? Dann wäre es auch kein Problem mehr!

    Hat jemand noch eine Idee wie ich den Zeichensatz möglichst einfach in den entsprechenden Hexwert umwandeln kann?

    Gruß

Ähnliche Themen

  1. 4 Getriebemotoren ansteuern.
    Von Extisher im Forum Motoren
    Antworten: 18
    Letzter Beitrag: 19.08.2011, 11:26
  2. grafikdisplay ansteuern
    Von Roboman93 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 03.06.2010, 16:02
  3. LCD ansteuern??
    Von frank85 im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 23.07.2007, 23:53
  4. Servo ansteuern?
    Von michaelb im Forum C - Programmierung (GCC u.a.)
    Antworten: 27
    Letzter Beitrag: 30.07.2005, 09:10
  5. schrittmotor ansteuern
    Von pit1 im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 10.05.2005, 00:18

Berechtigungen

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