mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA DOG-M 3,3V 4-Bit


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

  _delay_ms(400);                       // 40ms delay
  dogm_write_once(0x30);                // Function Set #1: DL=1
  _delay_ms(2);                         // 2ms delay
  dogm_write_once(0x30);                // Function Set #2: DL=1

  _delay_us(30);                        // 30us delay
  dogm_write_once(0x30);                // Function Set #3: DL=1
  _delay_us(30);                        // 30us delay

  dogm_chk_busy();                      // Check busy flag
  dogm_write_once(0x20);                // Function Set #4: DL=0

  _delay_us(30);                        // 30us delay
  dogm_write_check(0, 0x29);            // Function Set #5: DL=0, N=1, IS2=0, IS1=1
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x14);            // Bias Set: BS=0, FX=0
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x78);            // Contrast Set: C3=1, C2=C1=C0=0
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x5E);            // Power/ICON/Contrast: Icon=1, Bon=1, C5=1, C4=0
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x6A);            // Follower Ctrl: Fon=1, Rab2=0, Rab1=1, Rab0=0
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x0C);            // DISPLAY ON: D=1, C=0, B=0
  _delay_us(30);                        // 30us delay

  dogm_write_check(0, 0x01);            // CLEAR DISPLAY
  _delay_ms(2);                         // 2ms delay

  dogm_write_check(0, 0x06);            // Entry mode set: I/D=1, S=0
  _delay_us(30);   

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Erhöhung der Delays hat leider auch nichts gebracht

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läuft es bei dir mittlerweile? Habe nämlich auch immer noch Probleme mit 
der Initialisierung.

Grüße

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Enrock Ja (Firma: studi) (enrock)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
immer her damit :-)

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2-Zeilen, 3,3V 4-Bit geschrieben für MSP430:
///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief LCD Display Dog-M initialisieren auf 3,3V 4-Bit Mode
 */
void init_LCD (void)
{
  LCD_SET_WRITE;              // RW auf low
  LCD_E_LOW;                  // E auf low
  LCD_SET_INSTRUCTION;        // RS auf low

  delay_ms(40);
  put_Data_to_Port(0x03);
  LCD_clock();
  delay_ms(2);
  put_Data_to_Port(0x03);
  LCD_clock();
  put_Data_to_Port(0x03);
  LCD_clock();
  put_Data_to_Port(0x02);
  LCD_clock();

  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

  LCD_clear();                          // Display löschen
}
///////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief 1Byte Daten in 2*4Bit stuecken ausgeben
 * \param data 8Bit Daten
 */
void LCD_put_Data_out(unsigned char data)
{
  put_Data_to_Port(data>>4);            // Oberes Nibble
  LCD_clock();                          // Befehl ausfuehren
  put_Data_to_Port(data & 0x0F);        // Unteres Nibble
  LCD_clock();                          // Befehl ausfuehren
}
///////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief Clock Pin (E) low->high->low damit Display Daten übernimmt
 */
void LCD_clock (void)
{
  delay(DELAY_30_US);         // 30µs warten
  LCD_E_HIGH;                 // Clock-Bit auf high
  delay(DELAY_SHORT);         // High muss min. 200ns anliegen
  LCD_E_LOW;                  // und jetzt auf low
}
///////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
/* ST7036 Kommandos */
///////////////////////////////////////////////////////////////////////////////////////////////////
#define CMD_CLEAR_DISPLAY     0x01  // Display Inhalt loeschen
#define ENTRY_MODE_SET        0x06  // Coursor automatisch erhoehen
#define DISPLAY_ON            0x0C  // Display ein, kein Cursor, kein blinken
//#define DISPLAY_ON            0x0F  // Display ein, Cursor, Cursor blinken
#define FUNCTION_EXT_MODE     0x29  // 4 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,1]
#define FUNCTION_NORM_MODE    0x28  // 4 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,0]
//#define FUNCTION_EXT_MODE     0x39  // 8 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,1]
//#define FUNCTION_NORM_MODE    0x38  // 8 Bit Mode, 2 Zeilen, Instruction Set (IS2:1)=[0,0]
#define BIAS_SET              0x14  // 1/5 bias
#define POWER_ICON            0x55  // Booster an, C4 an
#define FOLLOWER_CTRL         0x6D  // Follower an, Verstaerker mit Rab2/Rab0
#define CONTRAST_SET          0x75  // Kontrast
#define CGRAM_START_ADD       0x40  // Startadresse fuer selbstdefinierte Zeichen

#define CURSOR_ON             0x0E//0x0F
#define CURSOR_OFF            0x0C
///////////////////////////////////////////////////////////////////////////////////////////////////

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief String an Display senden
 * \param string Datenstring
 */
void LCD_out_string (char *string)
{
  LCD_SET_DATA;               // RS auf high (Daten)

  while (*string != 0) LCD_out_char(*string++);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
/*!
 * \brief Char an Display senden
 * \param str Einzellnes Char
 */
void LCD_out_char (char str)
{
  LCD_SET_DATA;               // RS auf high (Daten)

  if (str == 0xE4) str = 0x84;// Wenn "ä" geschrieben werden soll, Zeichensatz von LCD benutzen
  if (str == 0xF6) str = 0x94;// Wenn "ö" geschrieben werden soll, Zeichensatz von LCD benutzen
  if (str == 0xFC) str = 0x81;// Wenn "ü" geschrieben werden soll, Zeichensatz von LCD benutzen
  if (str == 0xC4) str = 0x8E;// Wenn "Ä" geschrieben werden soll, Zeichensatz von LCD benutzen
  if (str == 0xD6) str = 0x99;// Wenn "Ö" geschrieben werden soll, Zeichensatz von LCD benutzen
  if (str == 0xDC) str = 0x9A;// Wenn "Ü" geschrieben werden soll, Zeichensatz von LCD benutzen

  if (str == 0xB0) str = 0xDF;// Wenn "°" geschrieben werden soll, Zeichensatz von LCD benutzen

  LCD_put_Data_out(str);      // Char einfach auf Port legen
}
///////////////////////////////////////////////////////////////////////////////////////////////////

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.