Forum: Mikrocontroller und Digitale Elektronik Display nach Tutorial Probleme


von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade ein Display Typ wie im Tutorial verwendet wird in 
Betrieb zu nehmen. Es hat 4x20 Zeichen.
Angeschlossen ist es nach Schaltplan.
Am Display ist die 1. und 3. Zeile bei anlegen von VCC und GND mit einem 
schwarzen Balken, soweit ok.

lcd.h habe ich auf meine verwendeten Portpins angepasst:
1
/  LCD DB4-DB7 <-->  PORTD Bit PD4-PD7
2
#define LCD_PORT      PORTC
3
#define LCD_DDR       DDRC
4
5
// LCD Datenbus, Bitnummer des untersten Bits D4, kann auf den
6
// Portbits 0..4 liegen
7
8
#define LCD_DB        PC2
9
 
10
//  LCD RS      <-->  PORTD Bit PD2     (RS: 0=Data, 1=Command)
11
#define LCD_RS        PC0
12
 
13
//  LCD EN      <-->  PORTD Bit PD3     (EN: 1-Impuls für Daten)
14
#define LCD_EN        PC1

Ebenso die main.h die Prozessorfrequenz von 8Mhz eingetragen. Ich habe 
es schon mit dem internen Oszi versucht, als auch mit den externen.

Das Problem ist, dass das Display einfach nicht reagiert, d.h. egal was 
das Programm hin sendet, es bleiben die schwarzen Balken in Zeile 1 und 
3.
Das Programm läuft ab, ich habe testweise mal eine LED am Ende des 
Programms einschalten lassen, Sie geht dann irgendwann an.
Das Display reagiert aber nicht. Sämtliche Leitungen habe ich auf 
Durchgang geprüft. Leiterplatte ist vom Platinenhersteller und hat auch 
keine Brüche.

Entdeckt jemand einen Fehler im Code und/oder Schaltplan?

Der Code ist prinzipiell bis auf die Port- und Taktanpassung 1:1 aus dem 
erweiterten LCD Tutorial.

Danke.

Sven

von Steffen H. (avrsteffen)


Lesenswert?

Du Musst RW auf GND legen

von Krapao (Gast)


Lesenswert?

Diese Zeile

> /  LCD DB4-DB7 <-->  PORTD Bit PD4-PD7

entspricht nicht deinem Schaltplan. In deinem Schaltplan liegen LCD 
DB4-DB7 auf PC2-PC5, d.h. nich bündig am LSB oder MSB eines Ports. 
Dadurch ist die Bitmaskierung des Nigh- und Low-Nibbles in den 
LCD-Schreibroutinen zerbrochen. Ohne Anpassung dieser Routinen wird es 
mit dieser Schaltung nicht gehen.

Tipp: Beim erstmaligen Inbetriebnehmen einer neuen Hardware (LCD) mit 
unbekannten Softwareroutinen (LCD.c) würde ich die Schaltung benutzen, 
die in den betreffenden Tutorials angegeben ist. Änderungen würde ich 
erst machen, wenn die Funktion grundsätzlich vorhanden ist.

von Michael U. (amiga)


Lesenswert?

Hallo,

auf flüchtigen Blick sehe ich erstmal: AGND und AVCC nicht 
angeschlossen.
Außerdem keine 100n an den VCC/GND-Anschlüssen des AVR (auch wenn das 
hier vermutlich nicht die Ursache ist).
RW vom Display an GND? Laut Plan nicht...

Gruß aus Berlin
Michael

von mr. mo (Gast)


Lesenswert?

die LEDs sind falsch herum. die müssen von +5V weg zeigen.

von Jochen (Gast)


Lesenswert?

> Das Problem ist, dass das Display einfach nicht reagiert, d.h. egal was
> das Programm hin sendet, es bleiben die schwarzen Balken in Zeile 1 und
> 3.

Hast du schon mal den Kontrast zurück genommen???

von Sven (Gast)


Lesenswert?

Also erst einmal danke für die vielen Feedbacks.
RW liegt an GND, mir hats nur die Leitung anscheinend auf dem Schaltplan 
zerschossen beim schön hinschieben für den Screenshot. Aber an der 
Leiterplatte ist Pin 5 des Display Steckers mit GND verbunden.

@ Krapo
das ist nur das Kommentar (das ist vom Tutorial so übernommen). Die 
Portanpassung ist dort auf PC2 gemacht (unterster Pin), siehe Quelltext.

Die 100nF habe ich "manuell" noch eingefügt, danke für die Hinweis.

@mo.mo
Die LEDs spielen hier keine Rolle, aber dennoch ist das auch egal, je 
nachdem ob ich die acitve low oder active high ansteuere.

@Jochen
ja, mit dem Poti habe ich den Kontrast schon zurückgenommen.

von Michael A. (Gast)


Lesenswert?

Sven schrieb:
> @mo.mo
> Die LEDs spielen hier keine Rolle, aber dennoch ist das auch egal, je
> nachdem ob ich die acitve low oder active high ansteuere.

Solange +5V die höchste Spannung in deiner Schaltung ist, sind die LEDs 
zumindest falschrum eingezeichnet. Das hat nichts mit active Low oder 
High zu tun.

von Sven (Gast)


Lesenswert?

Ok, das stimmt.

Ich habe nun das Display an die Ports wie im Tutorial auf dem Steckbrett 
angeschlossen (und auch dessen Code verwendet), habe das gleiche 
Problem.
Noch eine Idee oder kann auch das Display defekt sein?

von Sven (Gast)


Lesenswert?

Hallo,

ich bin leider immernoch nicht weiter.
Ich vermute, dass die Initialisierung nicht richtig ist.
Hier ist das Datenblatt:
http://www.csd-electronics.de/data/pdf/DEM16481SYH-LY.pdf
Dort steht zumindest bei der 4-bit Initialisierung: "wait for more than 
30ms after power on". Das Tutorial sieht nur 15ms Sekunden vor. Das habe 
ich schon einmal erhöht auf 50ms. Allerdings immernoch ohne Erfolg.
Die init() Funktion aus dem Tutorial sieht auch zwischen Display ON/OFF 
Einstellungen und Display clear keine Pausen vor. Das Datenblatt aber 
mind. 39us. Kann es daran liegen?

Da ich mich noch nicht so gut auskenne, wäre ich sehr dankbar, wenn 
jemand mal die Initialisierung des Tutorials mit dem Datenblatt 
abgleichen könnte.
Meine Taktfrequenz stimmt, ich habe nebenbei mal eine LED mit delays an 
und ausschalten lassen...

Besten Dank.

von Oliver J. (skriptkiddy)


Lesenswert?

Sven schrieb:
> Das Datenblatt aber
> mind. 39us. Kann es daran liegen?
Durchaus möglich. Wenn das Datenblatt eine Initialisierungssequenz 
vorgibt, dann bilde sie doch nach.

Gruß Oliver

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe immernoch das Problem.
Die Initialisierungsroutine habe ich mir mal genau angeschaut und 
angepasst. Die Wartezeiten habe ich großzügig gehalten, aber dennoch 
zeigt das Display keine Reaktion, Zeile 1 und 3 mit schwarzen Balken.
Die Datenbits werden gesendet, wenn ich mit dem Messgerät auf DB4 und 
DB7 messe, ändern sich die Spannungen mit Programmablauf auf 0V und 5V 
durchweg....
Anbei nochmals der aktuellste Code.

Hat jemand eine Idee? Oder kann man irgendwie testen, ob das Display 
bzw. dessen Controller noch funktionsfähig ist?

Danke.

von holger (Gast)


Lesenswert?

>Hat jemand eine Idee? Oder kann man irgendwie testen, ob das Display
>bzw. dessen Controller noch funktionsfähig ist?

Ja, mit korrektem Code.
Welchen Controller verwendest du? Stimmt die Pinbelegung?
Mach mal ne Tabelle AVR Pins zu LCD.

von Sven (Gast)


Lesenswert?

Controller ist ein ATMEGA8 und läuft mit 8Mhz externen Takt (intern habe 
ich auch versucht). Die Taktfrequenz stimmt ebenso, da ich testweise mal 
mit einem delay eine LED für 2 Sekunden angeschaltet habe und die 
leuchtet auch 2 Sekunden.

Der Schaltplan mit Pin Belegung ist ganz oben im Thread. Dieser ist 
korrekt, nur Pin5 des Wannensteckers R/W ist mit Ground verbunden auf 
der Leiterplatte (das ist leider im Schaltplan aus Versehen gelöscht).
Aber hier gerne nochmal die Pin Config:

PC0 AVR ist mit RS Display verbunden (Pin4)
PC1 AVR ist mit E Display verbunden (Pin6)
PC2 AVR ist mit DB4 verbunden
PC3 AVR ist mit DB5 verbunden
PC4 AVR ist mit DB6 verbunden
PC5 AVR ist mit DB7 verbunden

Pin 1 und Pin 5 Display liegen auf GND
Pin 2 auf 5V (vom Festspannugsregler)
Pin 3 ist mit einem Schleifer vom Poti verbunden und ist auf ca. 0.46V 
(gemessen) eingestellt, Kontrast ist damit ok.

Sämtliche Pins habe ich mit dem Multimeter auf Durchgang gemessen. Und 
im Betrieb messe ich auch wechselnde Pegel an den Datenbits.

Bis auf die 3 Software-Resets und die boot-Zeit am Anfang ist die 
Initialisierungsroutine meines Erachtens identisch mit der aus dem 
Tutorial. Die Boot-Zeit habe ich entsprechend erhöht und die 3 
Software-Resets auskommentiert (mit diesen hat es aber auch nicht 
funktioniert).

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Tut sich mit dieser HEX Datei was?

von Sven (Gast)


Lesenswert?

Leider nicht :-(
Immernoch Balken in der 1. und 3. Zeile.

von holger (Gast)


Lesenswert?

>Leider nicht :-(
>Immernoch Balken in der 1. und 3. Zeile.

Dann schliess es richtig an. Foto machen.

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Ich würde mal behaupten, dass es korrekt angeschlossen ist. Ich habe ein 
Flachbandkabel von Pin1 bis Pin 16 der Reihe nach angelötet und wie man 
oben im Schaltplan sieht, den dazugehörigen Wannenstecker geroutet.
Wannenstecker ist auch richtig herum montiert und wie gesagt, es hat 
alles Durchgang.
Die Leiterplatte habe ich mit EAGLE erstellt, d.h. Schaltplan und Board 
sind konsistent und ist auch vom Leiterplattenhersteller gemacht (also 
nicht selbst geätzt).
Anbei 2 Fotos vom Display.
Einmal mit anliegender Spannung und den besagten Streifen in Zeile 1 und 
3.

von holger (Gast)


Lesenswert?

>Einmal mit anliegender Spannung und den besagten Streifen in Zeile 1 und
>3.

Nicht initialisiert, was soll man dazu mehr sagen.
Wie sieht es unter der Platine aus? Liegt Pin5 vom
LCD (RW) wirklich auf GND? Keine Kurzschlüsse zwischen
den Leitungen?

von Sven (Gast)


Lesenswert?

Ich habe gemessen, Pin5 liegt auf GND und hat Durchgang zu Pin1.
Kurzschluss ist auch keiner vorhanden, habe beim Löten auch aufgepasst, 
Platine ist wie gesagt auch vom Leiterplattenhersteller und daher sehr 
sauber geäzt ohen Brücken (habe auch mit der Lupe nachgesehen).
Ich glaube langsam wirklich, dass das Display bzw. der Display 
Controller einen weg hat. Ach ja, habe auch schon verschieden (neue) 
Atmega8 versucht, am AVR liegt es auch nicht.
Vielleicht sollte ich einfach mal ein neues LCD bestellen.

Trotzdem vielen Dank Holger für die Unterstützung bei der Fehlersuche. 
Falls dir aber noch etwas einfällt, ich versuche gerne noch etwas.

von Sven (Gast)


Lesenswert?

Hallo Holger,

ich wollte nochmal Rückmeldung geben.
Habe mir ein neues LCD bestellt (gleiches) und mit gleichem Code (oben 
gepostet) läuft es nun.
Es scheint wohl wirklich das Display selbst gewesen zu sein, kein 
Verdrahtungs- oder Software Fehler.

Gruß
Sven

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.