Hallo, ich suche jetzt schon länger nach einer Initialisierung für ein EA DOGM162 für 4 Bit und 3,3V. Auf dem Datenblatt sind nur Beispiele für 8Bit und im Netz hab ich nur Beispiele für 5V gefunden (welche auch funktionieren). Wäre für schnelle Hilfe dankbar
Jan schrieb: > Hallo, ich suche jetzt schon länger nach einer Initialisierung für ein > EA DOGM162 für 4 Bit und 3,3V. Auf dem Datenblatt sind nur Beispiele für > 8Bit und im Netz hab ich nur Beispiele für 5V gefunden (welche auch > funktionieren). Wäre für schnelle Hilfe dankbar Booster/"Electronic volume"-Teil des LCD-Controllers ist es egal, auf welchem Weg die Registerwerte eingestellt werden. Also Registerwerte zur Einstellung von Booster und Kontrast aus den Beispielen für 3,3V 8-Bit des Datenblatts entnehmen und über die 4-Bit Schnittstelle übertragen. Hatte "hier" zumindest problemlos funktioniert, allerdings mit serial-interface/SPI und nicht 4-Bit-Schnittstelle.
Was ist mit dem Beispiel aus dem Datenblatt des Kontrollers? Läuft das nicht? http://www.lcd-module.de/eng/pdf/zubehoer/st7036.pdf Seite 41 und 42
Ich glaube ich habe mein Fehler gefunden. Ich vermute es liegt an den Kondensatoren. Ich habe 2 Elkos mit je 1 uF. Muss ich anstatt Elkos Tantal-Kondensatoren nehmen?
@Jan (Gast) >Ich glaube ich habe mein Fehler gefunden. Ich vermute es liegt an den >Kondensatoren. Ich habe 2 Elkos mit je 1 uF. Muss ich anstatt Elkos >Tantal-Kondensatoren nehmen? Nein. Aber die Polung muss man beachten. MfG Falk
ok die Pollung stimmt, dann muss es doch an der Initiallisierung liegen. hier kurz mal der Code dazu. Wenn ich das Datenblatt richtig verstanden habe müsste es so funktionieren. Vieleicht hab ich aber irgendwo was übersehen.
1 | _delay_ms(400); // 40ms delay |
2 | dogm_write_once(0x30); // Function Set #1: DL=1 |
3 | _delay_ms(2); // 2ms delay |
4 | dogm_write_once(0x30); // Function Set #2: DL=1 |
5 | |
6 | _delay_us(30); // 30us delay |
7 | dogm_write_once(0x30); // Function Set #3: DL=1 |
8 | _delay_us(30); // 30us delay |
9 | |
10 | dogm_chk_busy(); // Check busy flag |
11 | dogm_write_once(0x20); // Function Set #4: DL=0 |
12 | |
13 | _delay_us(30); // 30us delay |
14 | dogm_write_check(0, 0x29); // Function Set #5: DL=0, N=1, IS2=0, IS1=1 |
15 | _delay_us(30); // 30us delay |
16 | |
17 | dogm_write_check(0, 0x14); // Bias Set: BS=0, FX=0 |
18 | _delay_us(30); // 30us delay |
19 | |
20 | dogm_write_check(0, 0x78); // Contrast Set: C3=1, C2=C1=C0=0 |
21 | _delay_us(30); // 30us delay |
22 | |
23 | dogm_write_check(0, 0x5E); // Power/ICON/Contrast: Icon=1, Bon=1, C5=1, C4=0 |
24 | _delay_us(30); // 30us delay |
25 | |
26 | dogm_write_check(0, 0x6A); // Follower Ctrl: Fon=1, Rab2=0, Rab1=1, Rab0=0 |
27 | _delay_us(30); // 30us delay |
28 | |
29 | dogm_write_check(0, 0x0C); // DISPLAY ON: D=1, C=0, B=0 |
30 | _delay_us(30); // 30us delay |
31 | |
32 | dogm_write_check(0, 0x01); // CLEAR DISPLAY |
33 | _delay_ms(2); // 2ms delay |
34 | |
35 | dogm_write_check(0, 0x06); // Entry mode set: I/D=1, S=0 |
36 | _delay_us(30); |
Erhöhe mal die delays, vorallem die ersten beiden, und die 30us evtl mal auf 60us. Ich musste an den delays einiges schrauben, bis es funktionierte. Ich verwendete allerdings auch immer SPI. Ich fügte auch eine zusätzliche Sekunde Wartezeit am Anfang ein...
Läuft es bei dir mittlerweile? Habe nämlich auch immer noch Probleme mit der Initialisierung. Grüße
nein leider nicht. ich werde mich mit dem Problem auch leider (vielleicht auch zum Glück) nicht weiter beschäftigen, da ich ein anderes Display nehmen werden.
Servus, also ich hatte keine Probleme das LCD im 4 Bit-Modus und 3,3 Volt ans laufen zu bringen. Programmiere allerdings in Assembler. Auf Wunsch kann ich gerne mal meine Initialisierung posten!. Gruß
Hallo, versuche seit knapp 2 Tagen dieses Display mit 3,3V und 4Bit zum laufen zu bringen. Leider klappt das nicht wie gewünscht... Kann mir vielleicht jemand mit Quellcode incl. h-Datei auf die Sprünge helfen? Gruß
2-Zeilen, 3,3V 4-Bit geschrieben für MSP430:
1 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
2 | /*!
|
3 | * \brief LCD Display Dog-M initialisieren auf 3,3V 4-Bit Mode
|
4 | */
|
5 | void init_LCD (void) |
6 | {
|
7 | LCD_SET_WRITE; // RW auf low |
8 | LCD_E_LOW; // E auf low |
9 | LCD_SET_INSTRUCTION; // RS auf low |
10 | |
11 | delay_ms(40); |
12 | put_Data_to_Port(0x03); |
13 | LCD_clock(); |
14 | delay_ms(2); |
15 | put_Data_to_Port(0x03); |
16 | LCD_clock(); |
17 | put_Data_to_Port(0x03); |
18 | LCD_clock(); |
19 | put_Data_to_Port(0x02); |
20 | LCD_clock(); |
21 | |
22 | LCD_put_Data_out(FUNCTION_EXT_MODE); // 8/4 Bit operation, 1/2 Zeilen |
23 | LCD_put_Data_out(BIAS_SET); // Bias |
24 | LCD_put_Data_out(POWER_ICON); // Booster Einstellung |
25 | LCD_put_Data_out(FOLLOWER_CTRL); // Follower Einstellung |
26 | LCD_put_Data_out(CONTRAST_SET); // Kontrast Einstellung |
27 | LCD_put_Data_out(ENTRY_MODE_SET); // Cursor inc. dec. |
28 | LCD_put_Data_out(DISPLAY_ON); // Display ein und Cursor ein/aus, Cursor blinken ein/aus |
29 | |
30 | LCD_clear(); // Display löschen |
31 | }
|
32 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
33 | |
34 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
35 | /*!
|
36 | * \brief 1Byte Daten in 2*4Bit stuecken ausgeben
|
37 | * \param data 8Bit Daten
|
38 | */
|
39 | void LCD_put_Data_out(unsigned char data) |
40 | {
|
41 | put_Data_to_Port(data>>4); // Oberes Nibble |
42 | LCD_clock(); // Befehl ausfuehren |
43 | put_Data_to_Port(data & 0x0F); // Unteres Nibble |
44 | LCD_clock(); // Befehl ausfuehren |
45 | }
|
46 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
47 | |
48 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
49 | /*!
|
50 | * \brief Clock Pin (E) low->high->low damit Display Daten übernimmt
|
51 | */
|
52 | void LCD_clock (void) |
53 | {
|
54 | delay(DELAY_30_US); // 30µs warten |
55 | LCD_E_HIGH; // Clock-Bit auf high |
56 | delay(DELAY_SHORT); // High muss min. 200ns anliegen |
57 | LCD_E_LOW; // und jetzt auf low |
58 | }
|
59 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
60 | |
61 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
62 | /* ST7036 Kommandos */
|
63 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
64 | #define CMD_CLEAR_DISPLAY 0x01 // Display Inhalt loeschen
|
65 | #define ENTRY_MODE_SET 0x06 // Coursor automatisch erhoehen
|
66 | #define DISPLAY_ON 0x0C // Display ein, kein Cursor, kein blinken
|
67 | //#define DISPLAY_ON 0x0F // Display ein, Cursor, Cursor blinken
|
68 | #define FUNCTION_EXT_MODE 0x29 // 4 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,1]
|
69 | #define FUNCTION_NORM_MODE 0x28 // 4 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,0]
|
70 | //#define FUNCTION_EXT_MODE 0x39 // 8 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,1]
|
71 | //#define FUNCTION_NORM_MODE 0x38 // 8 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,0]
|
72 | #define BIAS_SET 0x14 // 1/5 bias
|
73 | #define POWER_ICON 0x55 // Booster an, C4 an
|
74 | #define FOLLOWER_CTRL 0x6D // Follower an, Verstaerker mit Rab2/Rab0
|
75 | #define CONTRAST_SET 0x75 // Kontrast
|
76 | #define CGRAM_START_ADD 0x40 // Startadresse fuer selbstdefinierte Zeichen
|
77 | |
78 | #define CURSOR_ON 0x0E//0x0F
|
79 | #define CURSOR_OFF 0x0C
|
80 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
Danke für die Antwort. Wenn ich das richtig sehe ist das zunächst nur die Initialisierung? Nun müßte ich ja noch Text anzeigen um zu prüfen ob es erfolgreich war. Wie tue ich das dann?
1 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
2 | /*!
|
3 | * \brief String an Display senden
|
4 | * \param string Datenstring
|
5 | */
|
6 | void LCD_out_string (char *string) |
7 | {
|
8 | LCD_SET_DATA; // RS auf high (Daten) |
9 | |
10 | while (*string != 0) LCD_out_char(*string++); |
11 | }
|
12 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
13 | |
14 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
15 | /*!
|
16 | * \brief Char an Display senden
|
17 | * \param str Einzellnes Char
|
18 | */
|
19 | void LCD_out_char (char str) |
20 | {
|
21 | LCD_SET_DATA; // RS auf high (Daten) |
22 | |
23 | if (str == 0xE4) str = 0x84;// Wenn "ä" geschrieben werden soll, Zeichensatz von LCD benutzen |
24 | if (str == 0xF6) str = 0x94;// Wenn "ö" geschrieben werden soll, Zeichensatz von LCD benutzen |
25 | if (str == 0xFC) str = 0x81;// Wenn "ü" geschrieben werden soll, Zeichensatz von LCD benutzen |
26 | if (str == 0xC4) str = 0x8E;// Wenn "Ä" geschrieben werden soll, Zeichensatz von LCD benutzen |
27 | if (str == 0xD6) str = 0x99;// Wenn "Ö" geschrieben werden soll, Zeichensatz von LCD benutzen |
28 | if (str == 0xDC) str = 0x9A;// Wenn "Ü" geschrieben werden soll, Zeichensatz von LCD benutzen |
29 | |
30 | if (str == 0xB0) str = 0xDF;// Wenn "°" geschrieben werden soll, Zeichensatz von LCD benutzen |
31 | |
32 | LCD_put_Data_out(str); // Char einfach auf Port legen |
33 | }
|
34 | ///////////////////////////////////////////////////////////////////////////////////////////////////
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.