www.mikrocontroller.net

Forum: Compiler & IDEs LCD Problem ATMEGA32


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir gestern ein LCD-Display vom Typ Displaytech 162 gekauft. 
(Datenblatt als Anlage). Wenn ich das Display nun wie in etlichen 
Tutorials beschriben anschliesse, dann geht das Display und die 
Hintergrundbeleuchtung an, aber das Display zeigt in der oberen Reihe 
nur schwarze Felder an und unten gar nichts. Nun habe ich zwei fragen:

1. Ist das normal?

2. Und warum gibt es nicht das aus, was es eigentlich sollte?

Quelltext ist aus dem LCD Tutorial hier auf der Seite.


Gruß,

der Horst.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt fehlt

1. Ja
2. Initialisierung nicht erfolgreich

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

Bewertung
0 lesenswert
nicht lesenswert
Sorry hier das Datenblatt und meine Pinnbelegung.

1 VSS -> +5V
2 VDD -> GND
3 VO -> GND
4 RS -> PD4
5 R/W -> GND
6 E -> PD5
7-10 not connected
11 DB4 -> PD0
12 DB5 -> PD1
13 DB6 -> PD2
14 DB7 -> PD3

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>1 VSS -> +5V
>2 VDD -> GND

Die sind vertauscht !
1 VSS -> GND
2 VDD -> +5V

Wahrscheinlich nur Tippfehler. Tu uns allen
einen Gefallen und überprüfe deine Schaltung
noch mal Leitung für Leitung. Häufig sind Leitungen
einfach nicht richtig angeschlossen gewesen, oder
es waren Kurzschlüsse vorhanden. Ein Kontrastregler
an VO könnte auch nicht schaden.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich VSS und VDD Tausche erhalte ich einen Kurzschluss.

Daran kanns schonmal nicht liegen und ausserdem steht es ja auch so in 
dem Tutorial:

Anschluss an den Controller
Jetzt da wir wissen, welche Anschlüsse das LCDs benötigt, können wir das 
LCD mit dem Mikrocontroller verbinden:

Pin #-LCD Bezeichnung-LCD Pin-µC
1 Vss GND
2 Vcc 5V
3 Vee GND oder Poti (siehe oben)
4 RS PD4 am AVR
5 RW GND
6 E PD5 am AVR
7 DB0 offen
8 DB1 offen
9 DB2 offen
10 DB3 offen
11 DB4 PD0 am AVR
12 DB5 PD1 am AVR
13 DB6 PD2 am AVR
14 DB7 PD3 am AVR

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp hatte micht vertiptt, und nun nochmal falsch geschrieben ;)

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kontrast gehört an ein Poti. Einfach deshalb, weil die tatsächlich 
nötige Vee recht stark vom Displayhersteller abhängt und man bei zu 
hohem Kontrast durchaus auch ausgegebene Zeichen übersehen kann, die in 
der ersten Zeile sein sollen.

Wenn es keine Verdrahtungsfehler gibt, eben das übliche: Wartezeiten 
lang genug (wie schnell ist der AVR getaktet?) Display hat wirklich 
einen HD44780 drauf und nicht einen kompatiblen? Den Begriff 
"kompatibel" definieren Display-Hersteller gern so: hat etwa genausoviel 
Anschlüsse wie ein Standard-Display, die sind auch so etwa wie dort 
belegt und der Chip kann, wenn man ihn richtig ansteuert, auch etwa das, 
was ein HD44780 kann.
Ist zumindest meine Erfahrung...

Anschlüsse: Original-Datenblatt des Displays, dort sollte auch der 
Controllertyp drinstehen.
Init-Sequence mit dem Original-Datenblatt vergleichen, speziell nötige 
Mindestzeit für E H-Zeit und die maximale Zeit für Befehlsausführung.
Beim Init sind meist Mindestwartezeiten gefordert.
Vor Beginn der Init-Sequence lange genug warten, bis das Display mit 
seiner PowerOn-Sequence fertig ist.

Alle Zeiten können durchaus länger sein.
Nach dem AVR-Reset: warte ich meist 150ms, bis Init aufgerufen wird.
5ms reichen sicher eigentlich für Befehle außer Clear.

E-Clock setze ich nach anlegen aller gültigen Signale und Daten mit 
einem NOP zwischen L/H und H/L, bei 8MHz sind 2, bei 16MHz meist schon 4 
nötig.
Das hängt auch stark vom Aufbau und den Leitungslängehn zum Display ab.
Auf dem Steckbrett und mit 20cm Flachbandkabel zum Display bin ich da 
eher großzügig...

Gruß aus Berlin
Michael

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kontrast hängt mittlkerweile an nem Poti und Funktioniert auch, dahinter 
versteckt sich kein Text. ;)

Auszug aus dem GCC-Tutorial von hier:

Das LCD und sein Controller
Die meisten Text-LCDs verwenden den Controller HD44780 oder einen 
kompatiblen (z.B. KS0070) und haben 14 oder 16 Pins. Die Pinbelegung an 
der LCD-Controller-Platine ist praktisch immer gleich.

Und genau einen solchen KS0070 ist bei dem Display verbaut.

Meine Flachbandkabellänge ist ungefähr 5cm.

So und das ist mein Quelltext:
#include <avr/io.h>
#include "lcd-routines.h"
#include <util/delay.h>
 
// sendet ein Datenbyte an das LCD
 
void lcd_data(unsigned char temp1)
{
   unsigned char temp2 = temp1;
 
   LCD_PORT |= (1<<LCD_RS);        // RS auf 1 setzen
 
   temp1 = temp1 >> 4;
   temp1 = temp1 & 0x0F;
   LCD_PORT &= 0xF0;
   LCD_PORT |= temp1;               // setzen
   lcd_enable();
 
   temp2 = temp2 & 0x0F;
   LCD_PORT &= 0xF0;
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
   
   _delay_us(45);
}
 
// sendet einen Befehl an das LCD
 
void lcd_command(unsigned char temp1)
{
   unsigned char temp2 = temp1;
 
   LCD_PORT &= ~(1<<LCD_RS);        // RS auf 0 setzen
 
   temp1 = temp1 >> 4;              // oberes Nibble holen
   temp1 = temp1 & 0x0F;            // maskieren
   LCD_PORT &= 0xF0;
   LCD_PORT |= temp1;               // setzen
   lcd_enable();
 
   temp2 = temp2 & 0x0F;            // unteres Nibble holen und maskieren
   LCD_PORT &= 0xF0;
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
   
   _delay_us(45);
}
 
// erzeugt den Enable-Puls
void lcd_enable(void)
{
   LCD_PORT |= (1<<LCD_EN);
    _delay_us(10);                   // kurze Pause
   LCD_PORT &= ~(1<<LCD_EN);
}
 
// Initialisierung: 
// Muss ganz am Anfang des Programms aufgerufen werden.
 
void lcd_init(void)
{
   LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten
 
   // muss 3mal hintereinander gesendet werden zur Initialisierung
 
   _delay_ms(150);
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x03;            
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();
 
   _delay_ms(150);
   lcd_enable();
 
   _delay_ms(150);
   lcd_enable();
   _delay_ms(150);
 
   // 4 Bit Modus aktivieren 
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x02;
   lcd_enable();
   _delay_ms(150);
 
   // 4Bit / 2 Zeilen / 5x7
   lcd_command(0x28);
    
   // Display ein / Cursor aus / kein Blinken
   lcd_command(0x0C); 
 
   // inkrement / kein Scrollen
   lcd_command(0x06);
 
   lcd_clear();
}
 
// Sendet den Befehl zur Löschung des Displays
 
void lcd_clear(void)
{
   lcd_command(CLEAR_DISPLAY);
   _delay_ms(50);
}
 
// Sendet den Befehl: Cursor Home
 
void lcd_home(void)
{
   lcd_command(CURSOR_HOME);
   _delay_ms(50);
}
 
// setzt den Cursor in Zeile y (1..4) Spalte x (0..15)
 
void set_cursor(uint8_t x, uint8_t y)
{
  uint8_t tmp;
 
  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
  }
  lcd_command(tmp);
}
 
// Schreibt einen String auf das LCD
 
void lcd_string(char *data)
{
    while(*data) {
        lcd_data(*data);
        data++;
    }
} 
int main(void)
{
  _delay_ms(250);
    lcd_init();
 
    lcd_data('T');
    lcd_data('e');
 
    set_cursor(0,2);
 
    lcd_string("Hello World!");
 
    while(1)
    {
    }
 
    return 0;
}

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.