EA DOG-M 3,3V 4-Bit

Moderator Persönliche Seite #1255865
Lesenswert?

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.
Gast #1258261
Lesenswert?

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);
Gast #1258268
Lesenswert?

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...
Gast #1522967
Lesenswert?

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ß
#1523087
Lesenswert?

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
///////////////////////////////////////////////////////////////////////////////////////////////////
#1524102
Lesenswert?

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
///////////////////////////////////////////////////////////////////////////////////////////////////

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren