Forum: Mikrocontroller und Digitale Elektronik Ansteuern eines HD44780 LCD Displays


von Sören J. (soeren85)


Lesenswert?

Ich habe mir vor ca. 2 Wochen ein Starterset gekauft, mit einem Atmega8 
Kontroller. Bisher hab ich noch nicht geschafft einen String auf diesem 
Display auszugeben. Wenn ich Spannung auf das Board geben leuchtet auf 
dem Display nur die 1.te Zeile. Wenn ich den Kontrast verändere, kommt 
die 2.te nicht zum Vorschein. Hab auch schon mehrere Programme versucht, 
aber es ändert sich nicht. So langsam weiss ich nicht mehr weiter, für 
kleine Tipps oder Ideen wäre ich sehr dankbar.

von holger (Gast)


Lesenswert?

>Hab auch schon mehrere Programme versucht,

Dann ist das Ding vermutlich falsch angeschlossen.

von Falk B. (falk)


Lesenswert?


von Peter D. (peda)


Lesenswert?


von Sören J. (soeren85)


Lesenswert?

Leider kann ich kein Assembler, nur C

von Paul Baumann (Gast)


Lesenswert?

Na das, was Falk angegeben hat ist doch in C geschrieben?!

(Staun, Kopf kratz)

Paul

von Sören J. (soeren85)


Lesenswert?

Ja auf die Idee bin ich auch schon gekommen, nur leider mit einem 
negativem Ergebnis!! Sonst würde ich ja auch nicht fragen

von Michael H* (Gast)


Lesenswert?

display kaputt? mal dein "Liquid Crystal Display Display" getauscht? mal 
simuliert? proteus (kostenlose demo bei www.gidf.de) hat das disp und 
atmels in bibs. mal mit nem oszi an die signalleitungen geschaut, ob das 
rauskommt, was rauskommen soll?

von Sören J. (soeren85)


Lesenswert?

Nen Oszi hab ich leider nicht. hab nur die versorgungsspannung 
überprüft. und die stimmt.

von Michael H* (Gast)


Lesenswert?

und zum rest meinen posts fällt dir nix ein?

von Michael U. (amiga)


Lesenswert?

Hallo,

das mit der ersten Zeile schwarz ist erstmal ok, das Display hat seinen 
Reset erledigt und ist nicht initialisiert.
Wenn die Software es erfolgreich initialisiert hat, ist es komplett aus 
oder beide Zeilen grau/schwarz, wenn die Kontrastspannung zu hoch 
eingestellt ist.

Da Du sonst nichts weiter über Deine Hard- und Software verraten hast 
und meine Glaskugel auch nur einen schwarzen Balken anzeigt...

Gruß aus Berlin
Michael

von Sören J. (soeren85)


Lesenswert?

Tauschen geht nicht. Hab nur das eine da.

von holger (Gast)


Lesenswert?

>hab nur die versorgungsspannung überprüft.

Hast du auch mal die anderen Anschlüsse überprüft ?

1. Wo hast du was angeschlossen ?
2. Welchen C Code hast du verwendet ?
3. ein Starterset gekauft. Welches ?

Muss man dir alles einzeln aus der Nase ziehen ?

von Sören J. (soeren85)


Lesenswert?

2) Ich habe den Code aus dem AVR-GCC-Tutorial(diese Seite) benutzt. Hab 
die Defines für die Ports geändert. Aber geändert hat sich nix.

3)
Hab mir das Set ( http://www.myavr.de/shop/article.php?artDataID=41 ) 
gekauft

1) Habs an die Anschlussports gesteckt, die dafür vorher gesehen sind

von Michael H* (Gast)


Lesenswert?

Sören J. wrote:
> Tauschen geht nicht. Hab nur das eine da.

simuliern? ja, simulieren!

von Sören J. (soeren85)


Lesenswert?

Mit simulieren hab ich mich noch nicht so recht beschäftigt. Hab bisher 
immer nur WINAVR und nicht AVR-Studio benuzt, lade es aber gerade 
runter.

von holger (Gast)


Lesenswert?

Dein Display ist mit DB4..7 an PD4..7 auf dem Board
angeschlossen. Im Tutorial werden aber PD0..3 an DB4..7
angeschlossen. Das ist dein Problem !

von Michael H* (Gast)


Lesenswert?

nimm gleich proteus, da siehst mehr als die port-zustände.
da kannst du einfach dein display und deinen µC als bauteile einfügen 
und zusammenschalten.
da gibts auch ein virtuelles oszi und diverse lustige sachen. lieder 
kann die demo nicht speichern. aber zum bestimmen der problemquelle 
software/hardware tuts die demo.

von Sören J. (soeren85)


Lesenswert?

Ne das hab ich ja auch gemerkt und die Belegung der Pins geändert. Aber 
es tut sich halt einfach nix

von Sören J. (soeren85)


Lesenswert?

Ist das richtig, dass das Programm Proteus 7 Demonstration heisst?? So 
durchsichtig sieht das Programm aber auf den ersten Blick nicht aus.

von Michael H* (Gast)


Lesenswert?

ja, ist richtig

ist ein bisschen gewöhnungsbedürftig, aber doch noch recht intuitiv.
library -> pick...
da fügst du bauteile zu deiner device-liste hinzu. wenn du das bauteil 
dann links in der device list angeklickt hast, kannst du es platzieren. 
wenn kein bauteil im schematic markiert ist, kannst du verbindungen 
ziehen.

quellen: rechtsklick im schematic -> place -> generator.
auf die gleich weise kannst du auch dmm's oder oszis einbaun.

mit debug -> start... und debug -> execute kannst die simulation 
starten.

von holger (Gast)


Lesenswert?

>mit debug -> start... und debug -> execute kannst die simulation
>starten.

Fein, dann simulieren wir das Display einfach. Zeigt damit
in der Realität aber auch nichts an.

Man könnte die falsche Pinbelegung im Programm ändern.
Aber das wäre ja zu einfach ;)

von Michael H* (Gast)


Lesenswert?

Sören J. wrote:
> Ne das hab ich ja auch gemerkt und die Belegung der Pins geändert. Aber
> es tut sich halt einfach nix

.

von Sören J. (soeren85)


Lesenswert?

Das ist meine PIN- Belegung von meinem Display:
1 = Port D.2 LCD     PIN 4 RS = Enable
2 = Port D.3 LCD    PIN 6 E = Enable
3 = Port D.4 LCD    PIN 11 DB4 = Datenbit 4
4 = Port D.5 LCD    PIN 12 DB5 = Datenbit 5
5 = Port D.6 LCD    PIN 13 DB6 = Datenbit 6
6 = Port D.7 LCD    PIN 14 DB7 = Datenbit 7
7 = Port B.0 (Jumper R/W) LCD PIN 5 R/W =Read/Write (oder fest auf Low)
8 = Port B.1 (Jumper PWM) LCD PIN 15 Hintergrundbeleuchtung (Anode)
Kontrastreglung LCD PIN 3 Vo
13 = 5V LCD PIN 1 Vss
14 = Masse LCD PIN 2 Vdd
LCD PIN 7 DB0 = Datenbit 0
LCD PIN 8 DB1 = Datenbit 1
LCD PIN 9 DB2 = Datenbit 2
LCD PIN 10 DB3 = Datenbit 3
LCD PIN 10 DB3 = Datenbit 3
LCD PIN 15 Hintergrundbeleuchtung (Kathode)

Das ist der Auszug aus der Header von einem fertigem Programm, hab die 
Definitionen so geändert wie ich es für richtig gehalten habe. Läuft 
trotzdem nicht.

#define LCD_PORT         PORTB        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    7            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    8            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    9            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    10            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       4            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       5            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        6            /**< pin  for Enable line     */

von holger (Gast)


Lesenswert?

Oh Mann, versuchs mal so:

#define LCD_PORT         PORTD        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    4            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    5            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    6            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    7            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       2            /**< pin  for RS line         */
#define LCD_RW_PORT      PORTB     /**< port for RW line         */
#define LCD_RW_PIN       0            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        3            /**< pin  for Enable line     */

von Sören J. (soeren85)


Lesenswert?

Hm ne klappt immer nocht nicht. Ich verstehe auch nicht warum Data_bit0 
- Data_bit3 nicht vom Display auf Pin 7-10 liegen. Oder lese ich das 
Datenblatt falsch??

von holger (Gast)


Lesenswert?

JP2 auf R/W gesteckt ?

>Ich verstehe auch nicht warum Data_bit0
>- Data_bit3 nicht vom Display auf Pin 7-10 liegen.

Weil es keinen PORTD10 gibt ;)

von Sören J. (soeren85)


Lesenswert?

LCD PIN 7 DB0 = Datenbit 0
LCD PIN 8 DB1 = Datenbit 1
LCD PIN 9 DB2 = Datenbit 2
LCD PIN 10 DB3 = Datenbit 3

das sind doch die Ports über die die Daten geschickt werden  an dem 
LCD-Modul?? DB0 is doch das Kontrollermodul  und LCD PIN7 das Display. 
Jumper sind auch gesetzt.

von holger (Gast)


Lesenswert?

>LCD PIN 7 DB0 = Datenbit 0
>LCD PIN 8 DB1 = Datenbit 1
>LCD PIN 9 DB2 = Datenbit 2
>LCD PIN 10 DB3 = Datenbit 3

>das sind doch die Ports über die die Daten geschickt werden  an dem
>LCD-Modul??

Falsch, DB0..3 liegen an Masse. Die Daten werden über DB4..7
geschickt. Sieh in den Schaltplan deines LCD Moduls. Das sind
die Pins 11 bis 14 am LCD. Aber auch PORTD11..14 gibt es nicht
beim uC ;) Der kennt nur PORTD0 bis PORTD7. Was sagt dir das ?

von Sören J. (soeren85)


Lesenswert?

Ich hab immer falsch gedacht, aus der Sicht des Displays. Werde es noch 
mal versuche. Danke

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.