Forum: Mikrocontroller und Digitale Elektronik Lib für DOG-Mxxx LCD (4bit oder i2c)


von Marco (Gast)


Lesenswert?

Hallo,

ich habe mir folgende Schaltung zusammengebaut.
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCDErweiterung

Hierbei verwende ich ein DOG-M162 und möchte dies wahlweise im 4bit 
Modus oder über i2c ansteuern.

Leider habe ich es bisher nicht geschaft dieses zum laufen zu bringen.

getestet habe ich

- LCDlib von Peter Fleury 
http://homepage.hispeed.ch/peterfleury/lcdlibrary.zip
- AsuroLCD lib 
http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=27717&highlight=
-> hierbei fehlt mir irgendwie die essential.c
- i2clcd http://computerheld.de/i2clcd/
->nicht für den ST7036 geignet

primär würde es mir erst mal reichen wenn ich das LCD im 4bit Modus, 
also

D4 - D7
RS
RW
E

betreiben könnte.
Danach würde ich es dann mit i2C probieren.

Würde mich freuen wenn ihr mich dabei unterstützen könntet.
Vielleicht bin ich beim testen auch einfach zu schnell gewesen und habe 
wichtige Zwischenschritte beim testen vergessen.

Aktuell macht das LCD einfach garnix :)

Achso: mein Controller ist ein Mega32 mit 16 MHz
Wenn ich jetzt noch was wichtiges vergessen habe einfach melden.

Gruß

von Visitor (Gast)


Angehängte Dateien:

Lesenswert?

Im Datenblatt ist die Initialisierung relativ gut verständlich erklärt.

von Marco (Gast)


Lesenswert?

Nun die habe ich auch gelesen.
Jedoch ist diese lediglich für den 8bit modus beschrieben.
Ich will ja den 4bit modus nutzen.

Mich würde dann interessieren ob ich für erste test die lcd lib von 
peter fleury hernehmen kann und dann versuche des timinig und 
initialisierung hinzubekommen oder ob sich diese arbeit bereits jemand 
gemacht hat. Dann könnte ich darauf aufsetzen.

von Jörg S. (joerg-s)


Angehängte Dateien:

Lesenswert?

Im Anhang mal mein Code für 4Bit Modus. Geschrieben für MSP430 @ 4MHz.

von Jörg S. (joerg-s)


Angehängte Dateien:

Lesenswert?

Und die h-Datei...

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Vielleicht hilft Dir mein Programm für DOG-M 162 (Anlage) etwas weiter. 
Ist zwar für 8051, aber das Prinzip ist entscheidend. Die Init gilt für 
5V-Betrieb im 4-Bit Mode.

ST7036 hat paar Eigenheiten gegenüber den Standard LCD-Controller 
HD44780.

Nach dem Einschalten ist das Teil grundsätzlich im 8-Bit Modus. Das 
Busy-Flag darf am Beginn der Initialisierung noch nicht abfgefragt 
werden, genaueres steht im Datenblatt. Weiterhin gibt es Unterschiede in 
der Zeilenaddressierung.

Wenn man was vom Display einlesen will (z.B. das Busy-Flag), gibt es 
manchmal Probleme, weil die Display-Ausgänge extrem schwach sind, sie 
können nur sehr geringe Ströme liefern (bedingt durch COG-technik). Man 
braucht auf der µC-Seite also einen sehr hochohmigen Port, oder man 
verzichtet ganz auf die Einles-Geschichte.
1
// ***********************************************************************
2
// Grundinitialisierung des LCD DOG-M 162 4-Bit
3
// ***********************************************************************
4
void init_lcd(void) {
5
unsigned char i_n;
6
  delay(5); // ca. 50ms Wartezeit nach dem Einschalten 
7
  // Grundinitialisierung ohne Busy-Flag Auswertung
8
  LCD_DATA7 = 0;     // Initialisierung 3x 0011 xxxx 
9
  LCD_DATA6 = 0;
10
  LCD_DATA5 = 1;
11
  LCD_DATA4 = 1;
12
  LCD_RW = 0;
13
  LCD_RS = 0;
14
  for( i_n = 3; i_n; i_n--){      
15
    delay(5);
16
    LCD_E1 = 1;
17
    LCD_E1 = 0;
18
  }
19
  delay(5);
20
  LCD_DATA7 = 0;     // Initialisierung 0010 xxxx (4-Bit Mode) 
21
  LCD_DATA6 = 0;
22
  LCD_DATA5 = 1;
23
  LCD_DATA4 = 0;
24
  LCD_E1 = 1;
25
  LCD_E1 = 0;
26
  delay(5);
27
28
  // ab hier darf das Busy-Flag ausgewertet werden
29
  write_lcd(0x29,1);               // 4-Bit IS 0,1
30
  write_lcd(0x53,1);               // 52 Boster aus, Kontrast C5,C4
31
  write_lcd(0x69,1);               // 69 Spannungsfolger und Verstärkung
32
  write_lcd(0x74,1);               // Kontrast C3,C2,C1
33
  write_lcd(0x0F,1);               // Display ein, Cursor ein, Cursor blinken
34
  write_lcd(0x06,1);               // Autoincrement
35
  clear_lcd();
36
}

Nach der Initialisierung können dann die Standardfunktionen, wie bei 
HD44780 Controllern verwendet werden.

I2C hat DOG-M 162 nicht, seriell geht nur per SPI-Interface.

Gruß

von Marco (Gast)


Lesenswert?

@Jörg:
Danke ich werde es mal testen.
Aber mich würde noch interessieren wo du die Port-Pins definierst und 
was in der treiber_import.h steht, die ist nicht dabei.

da ich jetzt mit 16MHz arbeite, wo legst du das timing fest?

von Jörg S. (joerg-s)


Lesenswert?

> Aber mich würde noch interessieren wo du die Port-Pins definierst
In einer Datei die über "treiber_import.h" integriert wird :)

> wo legst du das timing fest?
Im Code stehen enstprechende delay Aufrufe mit festen Werten.

von Marco (Gast)


Lesenswert?

@Matthias:

was ist in deinem Code der Datentypen "bit"?

von Matthias (Gast)


Lesenswert?

> "bit"
Bitadressierbarkeit, eine 8051 Besonderheit, Variable belegt wirklich 
nur 1 Bit im internen Speicher.

Kannst es durch "char" oder ähnliches ersetzen, Wert ist nur 0 oder 1

Gruß

von Marco (Gast)


Lesenswert?

@Matthias:
OK ich teste es
übrigens werde ich die delay funktionen durch die in der AVRLIB 
ersetzen.


Aber mal was anderes: Gibt es wirklich noch keinen der die LCDLib von 
Peter Fleury auf ein DOGM LCD angepasst hat?

denke man müsste nur an der Initialisierung was ändern. Aber wie gesagt, 
da ich mich nicht so auskenne bin ich da mal vorsichtig.

Schreibt Ihr euch beim einsatz des DOGM immer eigene Lib's ?

von Marco (Gast)


Lesenswert?

@matthias:

vielleicht steh ich gerade auf dem schlauch aber folgendes ist mir nicht 
ganz klar:

LCD_DATA7 = lcd_byte & 0x80;
LCD_DATA6 = lcd_byte & 0x40;
LCD_DATA5 = lcd_byte & 0x20;
LCD_DATA4 = lcd_byte & 0x10;
LCD_E1 = 1;


Hier wird doch jeweils ein Pin des Ports gesetzt bzw. gelöscht oder 
interpretier ich das falsch?

Wenn es doch so ist wie kannst du einem Bit einen Byte wert zuweisen?

Danke schon mal :)

von Matthias (Gast)


Lesenswert?

>Hier wird doch jeweils ein Pin des Ports gesetzt bzw. gelöscht oder
>interpretier ich das falsch?
richtig

>Wenn es doch so ist wie kannst du einem Bit einen Byte wert zuweisen?
Bit: alles größer 0 wird automatisch zu 1
(Bitkonvertierung)
Byte --> Bit Typen
0x00 --> 0
0x01 --> 1
0x02 --> 1
0x03 --> 1
...
0xFF --> 1

von Marco (Gast)


Lesenswert?

@matthias:

so jetzt bin ich fast durch aber was machst du bei:

byte idata zaehler;

von Marco (Gast)


Lesenswert?

@Jörg:

irgendwie fehlen mir noch manche Passagen um deinen Code zu verstehen.

Was verbirgt sich hinter der funktion
put_Data_to_Port

weiterhin würde mich interessieren was sich hinter
LCD_SET_WRITE;              // RW auf low
LCD_E_LOW;                  // E auf low
LCD_SET_INSTRUCTION;        // RS auf low

verbirgt.

Kannst du mir sagen welchen Hex-Wert die Übergabeparameter in den 
Funktionen
LCD_put_Data_out(FUNCTION_EXT_MODE);  // 8/4 Bit operation, 1/2 Zeilen
LCD_put_Data_out(BIAS_SET);           // Bias
LCD_put_Data_out(POWER_ICON);         // Booster Einstellung
LCD_put_Data_out(FOLLOWER_CTRL);      // Follower Einstellung
LCD_put_Data_out(CONTRAST_SET);       // Kontrast Einstellung
LCD_put_Data_out(ENTRY_MODE_SET);     // Cursor inc. dec. 
LCD_put_Data_out(DISPLAY_ON);         // Display ein und Cursor ein/aus, 
Cursor blinken ein/aus

haben?

denke du hast das alles in der treiber.h definiert

kannst die nicht auch zur verfügung stellen?

gruß

von Matthias (Gast)


Lesenswert?

> byte idata zaehler;
mach "unsigned char zaehler;" draus. (idata sorgt beim 8051 dafür, dass 
die Variable zaehler im erweiterten, internen RAM angelegt wird)

von Jörg S. (Gast)


Lesenswert?

> Was verbirgt sich hinter der funktion put_Data_to_Port
Sowas in der Art:
#define put_Data_to_Port(x) P5OUT &=~0x0F; P5OUT |= x & 0x0F;
Also das Stück Software was die Bits auf die Port Ausgänge legt.


> weiterhin würde mich interessieren was sich hinter
> LCD_SET_WRITE;              // RW auf low
> LCD_E_LOW;                  // E auf low
>LCD_SET_INSTRUCTION;        // RS auf low
> verbirgt.
Sowas in der Art:
#define LCD_SET_WRITE   P3OUT &=~ 0x40;
Also einfach nur Port-Pins high oder low schalten.

> Kannst du mir sagen welchen Hex-Wert die Übergabeparameter in den
> Funktionen haben?
Steht in der h-Datei die oben schon verlinkt ist.

http://www.mikrocontroller.net/attachment/27639/lcd_dogm.h


> denke du hast das alles in der treiber.h definiert
Nein hab ich nicht :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.