mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA DOG-M LCD-Treiber für Codevision gesucht


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider sehe ich auf meinem EA DOG-M-LCD mit den
Standard-Codevision-LCD-Treibern noch nichts, vermutlich weil der
Kontrast softwareseitig noch nicht eingestellt worden ist.
Hat jemand vielleicht schon fertige Softwaretreiber?

Viele Grüße

Sebastian

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

ich habe die Codevision Lib mal umgeschrieben.
Vielleicht nützt dir das ?

Der Controller wird anders initialisiert, als bei Standart LCDs.

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die Header Datei.
Die Lib kommt gleich.

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Da ist die Lib.

Ich hatte ein 3x16 LCD, und habe folgende Sonderfunktionen
hinzugefügt.
Außerdem die Initialisierung geändert.

Hiermit lassen sich aus 2 Zeilen eine hohe Zeile machen.

// DOGM Double High Funktion 1,2,3
void lcd_high (char high);

Hiermit kannst du den Kontrast in 15 Schritten ändern.

// DOGM Contrsat Set 1,2,...,10 - 15
void lcd_contrast (char contrast);

Bei Fragen, kannst dich gerne melden.

void lcd_high (char high)
{
switch (high) {
    case 1:
        //3 Zeienbetrieb
        //_lcd_ready(); // RS=0
        //_lcd_write_data(0x29);
        //Zurück zur Tabelle 0:1
        _lcd_ready(); // RS=0
        _lcd_write_data(0X28);
    break;
    case 2:
        //unteren beiden Zeilen Zusammen
        _lcd_ready(); // RS=0
        _lcd_write_data(0x2E);  //Table2
        _lcd_ready(); // RS=0
        _lcd_write_data(0x10);  //UD auf 1
        _lcd_ready(); // RS=0
        _lcd_write_data(0x2C);  //DH auf 1
    break;
    case 3:
         //oberen beiden Zeilen Zusammen
        _lcd_ready(); // RS=0
        _lcd_write_data(0x2E);  //Table2
        _lcd_ready(); // RS=0
        _lcd_write_data(0x18);  //UD auf 0
        _lcd_ready(); // RS=0
        _lcd_write_data(0x2C);  //DH auf 1
    break;
    };
     //Zurück zur Tabelle 0:1
    //_lcd_ready(); // RS=0
    //_lcd_write_data(0X28);
}

void lcd_contrast (char contrast)
{
switch (contrast) {
    case 1:
        _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x71);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 2:
        _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x72);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 3:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x73);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 4:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x74);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 5:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x75);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 6:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x76);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 7:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x77);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 8:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x78);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 9:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x79);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 10:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7A);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 11:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7B);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 12:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7C);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 13:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7D);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 14:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7E);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    case 15:
         _lcd_ready(); // RS=0
        _lcd_write_data(0x29);  //Function set Tabelle 1,0
         _lcd_ready(); // RS=0
        _lcd_write_data(0x7F);
         _lcd_ready(); // RS=0
        _lcd_write_data(0x51);
    break;
    };
    // Zurück zur Tabelle 0:1
    _lcd_ready(); // RS=0
    _lcd_write_data(0X28);
}

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir noch eigefallen ist,

wenn Du irgendwelche Einstellungen vornimmst, z.B. den Kontrast ändern
oder die Zeilenhöhe,
mußt Du beim nächsten Schreibvorgang darauf achten, in welcher
Funktionstabelle du dich befindest.

Falls Du Änderungen vornimmst, sage es mir bitte, da ich diese bestimmt
auch verwenden kann.

Gruß Toby

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Toby für deine Antwort.

Ich habe deinen Code auch gleich mal ausprobiert.

...

lcd_init(16);
lcd_contrast (15);
lcd_high (0);
lcd_clear();
lcd_gotoxy(0,0);
  lcd_putsf("ABCDEFGHIJklmnop");
lcd_gotoxy(0,1);
  lcd_putsf("1234567890");

...

aber leider sehe ich die zweite Zeile nicht.

Habe ich noch etwas vergessen?

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

so sieht die Init bei mir aus:

// LCD module initialization
    lcd_init(16);
    lcd_clear();
    // Setze LCD Kontrast Zurück zur Tabelle 0:1
    lcd_contrast(15);

    lcd_enable = 0;

    lcd_clear();

    lcd_high(1);

Aber wenigstens geht die 1. Zeile schonmal!

Hier liegt dein Fehler:
lcd_high(0);

Du mußt 1,2 oder 3 übergeben.

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das lcd_enable = 0; kannst Du dir sparen, ist was anderes.

Gruß

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Hier liegt dein Fehler:
lcd_high(0);"

Das war nur ein kleiner Test von mir. Mit lcd_high(1) kam das gleiche
heraus-
Du hast wahrscheinlich die Version DOGM163, während ich ein
zweizeiliges Display (DOGM162) habe. Da sind dann bestimmt die
Initialsierungsbefehle anders.

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte das 163, 3 Zeilig, stimmt.

Schau mal in der Init des Controllers, evtl. ist die 2.Zeile die 3.
Schreib mal in die 3.Zeile was rein.

Gruß Toby

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es klappt, nur mit der Einschränkung, dass die Zeile dann um acht
Stellen nach links verschoben ist und man entsprechend viele
Leerzeichen einfügen muss.

Autor: MartinS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Adresse des ersten Zeichens ist bestimmt falsch, Die sind bei den 2
Zeilen und 3 Zeilen Displays unterschiedlich.

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn du in die 3. Zeile schreibst, oder wann?

Ich dachte, die Anfangsadressen sind gleich, da es der gleiche
Controller ist.
Wenn es so ist, mußt Du diese Startadressen der einzelnen Zeilen in der
Lib ändern:

// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns)
{
#asm
    cbi   __lcd_port,__lcd_enable ;EN=0
    cbi   __lcd_port,__lcd_rs     ;RS=0
#endasm
_lcd_maxx=lcd_columns;
_base_y[2]=lcd_columns+0x90; // hier kannst Du die Adresse der 1.Zeile
ändern
_base_y[3]=lcd_columns+0xA0; // hier die der 2. Zeile

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich kann es leider nicht ausprobieren,
habe kein 2 Zeiliges hier,
aber im Functionsset kannst Du von 3 auf 2 Zeilen einstellen.

Gruß Toby

Autor: TobyTetzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach,

bitte lese im original Datenblatt der Controllers nach der Init.
Mit der auf dem PDF von EA kam ich auch nicht klar.

Es gibt ein Bit, N3 und N.

Bei 3 Zeilen ist es N3=1, N=1.
Bei 2 Zeilen muß es N3=0, N=1 heißen.
Dann hast Du 2 Zeilen initianilisiert.

Ein 2 Zeilen LCD hat ja nur eine Zeile mit 2x 40 Zeichen.
Startadresse 1. ist 00
Startadresse 2. ist 40.

Beim 3 Zeiligen hat man eigentlich 4x20 Zeichen.
Startadresse 1. 00
Startadresse 2. 10
Startadresse 3. 20

Die Startadressen stimmen so, lt. Datenblatt.
Mit den Zeilen bei den Displays kann ich mich auch täuschen.

Gruß Toby

Gruß Toby

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Toby,


ich schau es mir dann mal in Ruhe an, vielen Dank nochmal für deine
Hilfe, du hast mir prima weitergeholfen.



Gruß aus einem bayrischen Kuhkaff

Sebastian

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

ich habe nun ein DOGM 163 W, mit Amber Beleuchtung.

Laut EA Homepage soll der Hintergrung weiß, und die Schrift schwarz
sein.

Bei mir ist er aber eher durchsichtig.

Kann mir das mal wer erklären?

Gruß Toby

Autor: Christoph Söllner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich mach den Thread nochmal auf, weil ich grad an einem DOG 162,
also nur mit zwei Zeilen dransitze und die Lib nicht zum Laufen bekomme
(4 Bit, 5V Vcc, Anschaltung laut EA DB und CodeVision).

Die lcd_init(16); gibt immer "nicht erkannt" zurück.

Also meine Frage: Hat vielleicht schonmal jemand obige Lib mit einem
162er getestet und laufen gehabt? Weil ich doch meine,
Verdrahtungs-fehler ausschließen zu können.

Und falls nein, hat schon mal jemand eine Init für das 162er
geschieben?

Grüße,
Christoph

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph,

für das 162 mußt du die Init ändern, es wird anders Initialisiert.
ich habe leider immer noch kein 162, nur ein 163, sonst könnte ich Dir
weiterhelfen, in dem ich es selber teste.

Gruß Toby

Autor: Christoph Söllner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi *,

Also Deine Lib geht auch mit dem 162er. Einzig und allein müßte ganz
oben die Zeile mit 0x80,0x90 etc. auf 0x80, 0xC0 geändert werden fürs
162er. Auch unten in der lcd_init ändern. Dann tuts einwandfrei.

Ich hatte den Reset auf Masse gelegt. Darum gings nicht :) Es lebe
Kupferlackfädeldraht.

Viele Grüße,
Christoph

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph,

das ist ja mal eine tolle Resonanz, Danke dafür!

Gruß Toby

Ach ja, irgendwas stimmt noch nichzt mit der Zeilenhöhe bzw. den User
Chars.

Wenn man User Chars erstellen will, bin ich irgendwie in der falschen
Tabelle.
Dann muß ich erst von 3 auf 2 Zeilenbetrieb (DoubleHigh) umschalten,
und wieder zurück.
Dann gehts.

Vielleicht findest Du ja was raus.

Gruß nochmal!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.