Hallo, ich versuche vergebens meinen kleinen LCD Display zum laufen zu
bringen.
VCC -> +5V
GND -> 0V
VEE (Kontrast) -> über 1k Potentiometer (0.3V/1.2V laut Datenblatt).
RS -> PD2 (Atmega32 @16mhz)
R/W -> GND weil ich ja eh nur schreiben will
E -> PD3 (Atmega32 @16mhz)
D4-D7 -> PD4-PD7 (Atmega32 @16mhz)
Eigentlich sollten doch wenigstens schon bei Stromzufuhr und korrektem
Kontrast die "Balken" zu sehen sein, ist aber nicht der Fall.
Softwaremäßig verwende ich folgendes Programm, entnommen aus einem Buch
(AVR-Mikrocontroller in C programmieren):
> VEE (Kontrast) -> über 1k Potentiometer (0.3V/1.2V laut Datenblatt).
Wie hast du das konkret gemacht?
> Eigentlich sollten doch wenigstens schon bei Stromzufuhr und> korrektem Kontrast die "Balken" zu sehen sein
Exakt. Wenn Vcc und GND an den richtigen Pins liegen UND der Kontrast am
Poti richtig eingestellt ist, DANN sollte man am LCD (ohne Ansteuerung)
den/die Balken sehen können.
Bei Vcc bzw. GND kannst du nicht viel falsch machen. Ob +5V am richtigen
Pin liegt, lässt sich mit einem Voltmeter leicht feststellen.
Aber was ist mit der Kontrastspannung? Die wird durch das Poti als
Spannungsteiler festgelegt. Hast du das so gemacht?
Karl Heinz Buchegger schrieb:> Wie hast du das konkret gemacht?
Danke für die schnelle Antwort!
Also hab am Poti einmal die +5V und einmal GND angeschlossen, am
Schleifer hängt dann eben VEE... hab mit einem Voltmeter nachgemessen,
Spannung passt...
> Hallo, ich versuche vergebens meinen kleinen LCD Display zum laufen zu> bringen.> VCC -> +5V> GND -> 0V> VEE (Kontrast)
VSS != VCC
Schau doch bitte bei Reichelt nochmal ins Datenblatt und vergleiche die
Bezeichnungen auf der Platine bei Dir!
Im Datenblatt von Reichelt sehe ich eindeutig:
Pin1 VSS "Low" 0V GND
Pin2 VDD "High" Stromversorgung 5V
Pin3 VEE Kontrast
etc...
Meine 1602-LCDs vom China-Versender haben auch allesamt Pin1 and Ground.
VSS = Ground = 0 Volt!
Woher kommt Dein "VCC"? Steht das wirklich da?
Also genau genommen steht da
"Pin: 1, Symbol: VSS, Level: L, Funktion: Stromversorgung 0V (GND)"
und
"Pin: 2, Symbol: VDD, Level: H, Funktion: Stromversorgung +5V"
Also eigentlich alles korrekt, oder?
Edit:
Sorry, aber bevor Missverständnisse auftreten:
Habe dementsprechend Pin1 auf GND und Pin2 auf +5V.
Ach und falls es relevant ist, 3. Punkt im Datenblatt:
"Pin: 3, Symbol: VEE, Level: -, Funktion: Kontrastspg. (ca. 0,3V /
1,2V)"
Also ebenfalls korrekt...
_lcd_problem schrieb:> Funktion: Kontrastspg. (ca. 0,3V / 1,2V)"> Also ebenfalls korrekt...
Schaltung wie am Poti angeschlossen?
Links und Rechts am Poti 0V und 5V, den Mittelabgriff an den
Pin3/Kontrastpin?
_lcd_problem schrieb:> Also hab am Poti einmal die +5V und einmal GND angeschlossen, am> Schleifer hängt dann eben VEE... hab mit einem Voltmeter nachgemessen,> Spannung passt...
Ja ;)
> Ja ;)
Hört sich alles korrekt an.
Wenn es ein Display mit schwarzer Schrift ist, wie bei Reichelt
abgebildet, sollte es so laufen. Sehr merkwürdig, wenn nicht.
Wenn es eines mit weißer Schrift ist, würde ich unbedingt auch noch die
Hintergrundbeleuchtung anschließen.
_lcd_problem schrieb:
> VEE (Kontrast) -> über 1k Potentiometer (0.3V/1.2V laut Datenblatt).
hast du die Spannung nur nach dem Multimeter eingestellt oder auch
einfach mal am Poti gedreht und geschaut ob / wann du den passenden
Kontrast hast? Vll stimmen die Werte im Datenblatt nicht genau.
Michael L. schrieb:> hast du die Spannung nur nach dem Multimeter eingestellt oder auch> einfach mal am Poti gedreht und geschaut ob / wann du den passenden> Kontrast hast? Vll stimmen die Werte im Datenblatt nicht genau.
Auch das habe ich öfters versucht - ohne Erfolg...
Georg G. schrieb:> In einigen Datenblättern wird die Kontrastspannung auf PLUS bezogen.
Was heißt das jetzt genau?
Gruß
_lcd_problem schrieb:> Was heißt das jetzt genau?
deine beschaltung ist ok.
1 an gnd
2 an +5v
3 an den schleifer des potis.
e/a des potis* an gnd und +5v
so funzen alle gekauften und auch fast alle ausgebauten lcd´s bei mir.
fast weil ich n paar ausgebaut habe die wollen ! -5v an pin 3 haben.
die sind für den erweiterten temp. bereich geeignet ( waschmaschine,
trockner z.b.)
allerdings werden nur wenige µa benötigt-->ladungspumpe...
der hd44780 kann am v_lcd pin max. +-11v ab...
mfg
_lcd_problem schrieb:> Was heißt das jetzt genau?
Ich habe übrigens gerade die Spannung am Kontrast-Pin an einem hier bei
mir offen liegenden LCD mit blauer Hintergrundbeleuchtung und weisser
Schrift gerade mal ausgemessen. Bei korrekt eingestelltem Kontrast messe
ich 1,05 Volt vom Kontrast-Pin gegen GND (und 3,78 Volt zwischen
Kontrast-Pin und 5V).
So, ´tschuldigung, dass ich einen alten Thread wiederbelebe aaaber:
ich habe nun das selbe Modell, dieses mal sogar mit Beleuchtung.
Und es funktioniert wieder nicht, ich weiß langsam nicht mehr weiter!
Das Produkt:
"ELECTRONIC ASSEMBLY": "EA DIPS082-HNLED"
Schaltung:
Pin1, VSS = 0V
Pin2, VDD = +5V
Pin3, VEE = 0,6V
RS = PD2
R/W = 0V, weil ich ja eh nur schreiben will
E = PD3
D4-D7 = PD4-PD7
So, nach wie vor tut sich, wie gesagt, nichts. Noch nicht einmal die
LCD-Beleuchtung geht an, obwohl die dauerhaft an sein sollte.
Nebenbei wird das Teil aber doch nach kurzer Zeit, recht ordentlich
warm, ist das normal?
Gruß!
>Nebenbei wird das Teil aber doch nach kurzer Zeit, recht ordentlich>warm, ist das normal?
Nein, da wird nix warm wenn es RICHTIG angeschlossen ist.
Falsch rum angeschlossen wird warm!
>Noch nicht einmal die>LCD-Beleuchtung geht an
Auch falsch rum angeschlossen. Dann leuchtet da nix.
>Ist aber alles korrekt so, laut Datenblatt... :/
Träum weiter. Mach mal ein Foto.
Entweder du hast VDD und VSS vertauscht oder das Ding
komplett verdreht eingelötet.
holger schrieb:> Entweder du hast VDD und VSS vertauscht
Definitiv nicht.
holger schrieb:> oder das Ding> komplett verdreht eingelötet.
Alles auf einem Steckboard.
Im Anhang auch noch einmal das Datenblatt.
Foto kann ich schlecht machen, da man wohl nicht viel erkennen würde.
Allerdings ist alles so wie beschrieben aufgebaut...
Gruß
_lcd_problem schrieb:> Alles auf einem Steckboard.
Kontaktproblem? Sind die Pins vom Display lang genug?
Hast Du mal die Spannungen direkt am Display gemessen? Dann brauchst Du
allerdings einen Adapter, um an die Pins zu kommen.
Gruß Dietrich
_lcd_problem schrieb:> holger schrieb:>> Entweder du hast VDD und VSS vertauscht> Definitiv nicht.
Versteif dich nicht darauf.
Wenn da etwas warm wird, dann ist das definitiv falsch rum eingelötet.
LCD werden nicht warm.
_lcd_problem schrieb:> Foto kann ich schlecht machen,
Probiers trotzdem.
In den meisten Schaltungen kann man anhand der Leiterbahnführung ganz
gut auch so erkennen, welcher Anschluss die Masse ist.
Was mich in deinem Datenblatt zb stutzig machen würde ist, dass die
Pinbeschriftung darin auf dem Kopf stehend abgedruckt ist.
D.h. orientier dich an der eingezeichneten Brücke, um rauszufinden, wo 1
ist (wenn es nicht auf der Platine draufsteht). Nimm einen Edding und
markier dir diesen Pin auf dem Gehäuse, so dass du die 1 auch sicher
wiederfindest, wenn das LCD dann im Steckbrett steckt.
Noch eine Fehlermöglichkeit:
Im Datenblatt ist die Nummerierung der Pins mit Blick auf die
Anschlussstifte gezeichnet. Hast Du das berücksichtigt?
Es gibt da dummerweise 4 Möglichkeiten: gespiegelt und/oder um 180°
gedreht. Nur eine Variante ist richtig :-((
Gruß Dietrich
Edit: Karl-Heinz hatte auch schon die Idee...
Übrigens.. meine Displays von EA waren bis jetzt immer beschriftet..
also von daher..
Mach' doch einfach ein Foto - danach kann dir ganz bestimmt jemand
helfen.
Na wenn ihr meint, Bild im Anhang, hoffe ihr erkennt etwas ;)
Nur noch einmal, damit keine Missverständnisse auftreten: der zweite Pin
auf Masse ist der R/W Pin, den ich immer auf Low liegen habe, da ich nur
schreibe.
Ach ja, es ist ein "experimentier"-Board, also nicht meckern wegen
meiner perfekten Ordnung ;)
Dietrich L. schrieb:> Kontaktproblem? Sind die Pins vom Display lang genug?> Hast Du mal die Spannungen direkt am Display gemessen?
Habe ich mir auch gedacht und deshalb direkt am +5V Pin die Spannung
gemessen, ist jedoch korrekt.
Karl Heinz Buchegger schrieb:> Versteif dich nicht darauf.
Also das traue ich mir so eben noch zu, aber okay, kann ja immer mal was
sein ;)
Zum Thema Beschriftung der Pins.
Jep, habe ich beachtet...
Gruß
Wenn das so ist, sorry mein Fehler!!!
Hab´s gerade alles "so mal eben schnell" zusammengesteckt für das Foto,
war vorher definitiv alles korrekt, hab´s mir sogar bestätigen lassen.
Werde es aber nochmals prüfen.
Edit:
Nein, du hast völlig recht! Hab´s zwar noch nicht ausprobiert, aber ich
sehe, wo mein (Denk-)Fehler liegt.
Bei dem Pinout sieht es so aus, als wären Pin1 und Pin8(mein
ReferenzPin) parallel zueinander.
Ist jedoch nicht der Fall, verdammt da habe ich mir jetzt ein
wunderschönes Eigentor geschossen!
Mal gucken, ob das gute Teil mir verzeiht oder kaputt ist :(
Danke euch jedenfalls, so etwas blödes passiert mir nicht wider.
Falls es jemanden interessiert:
Display funktioniert soweit, dass die Beleuchtung an geht.
Bekomme nur noch keine Reaktion, wenn ich programmiertechnisch darauf
zugreife um Zeichen zu senden. Da weiß ich aber noch nicht, ob der
Display durch meine wunderbare Aktion kaputt ist, oder ob es am Programm
liegt.
Schöne Grüße
@_lcd_problem
Bist Du sicher,dass das hier geht.
> / Send Byte to LCD Controller> void lcd_send(unsigned char type, unsigned char c)> { unsigned char sic_c; // Backup for c>> // send high nibble> sic_c = c; // save original c> sic_c &= ~0x0f; // set bit 0-3 == 0> if (type==DATA)> sic_c |= (1<<LCD_PIN_RS); // Data: RS = 1> LCDPORT = sic_c; // send high nibble> toggle_enable_pin();>> // send low nibble> sic_c = c; // save original c> sic_c = sic_c<<4; // exchange nibbles> sic_c &= ~0x0f; // set bit 0-3 == 0> if (type==DATA)> sic_c |= (1<<LCD_PIN_RS); // Data: RS = 1> LCDPORT = sic_c; // send low nibble> toggle_enable_pin();>> _delay_ms(5); // Wait for LCD controller> }
Du willst das High-nibble zuerst senden aber löscht den inhalt weg.
>sic_c &= ~0x0f; // set bit 0-3 == 0
Was soll der quatsch?
Versuch es doch mal so!
Zuerst das übegebene Zeichen sichern sic_c = c;
Dann Hihbyte isolieren also (Bits 4-7) c &= 0xF0;
Dann folgt setzen von RS und Enable
Danach Lowbyte isolieren:
c = sic_c;
c = (c << 4);
c &= 0xF0;
Dann folgt setzen von RS und Enable.
An deiner INIT-Routine hätte ich auch noch was zum rum Mäkeln aber dazu
später vielleicht.
_lcd_problem schrieb:> holger schrieb:>> Entweder du hast VDD und VSS vertauscht> Definitiv nicht.
Und was lernst Du daraus?
Wenn man nach einem Fehler sucht, darf man in der ersten Phase durchaus
solche Annahmen treffen und in Bereichen suchen, in denen man eher den
Fehler vermutet. Wenn man dann aber nicht weiterkommt, muss man alles
in Frage stellen und darf an nichts mehr glauben, besonders nicht an
sich selbst.
Auch wenn es weh tut....
Gruß Dietrich
Dietrich L. schrieb:> Fehler vermutet. Wenn man dann aber nicht weiterkommt, muss man /alles/> in Frage stellen und darf an nichts mehr glauben,
und nichts bedeutet auch wirklich NICHTS!
Das fängt auch damit an, dass man seine eigene Ablesung im Datenblatt
kontrolliert.
Ideal wäre es, wenn du den kompletten Vorgang, von vorne bis hinten,
jemandem erklärst. Der muss davon nichts verstehen .. es kommt nur
darauf an, dass du deine Gedanken laut aussprichst und die auf diese Art
so ordnen musst, dass sie jemand prinzipiell verstehen könnte. Dieser
jemand kann auch ein Teddybär sein ... spielt so gesehen keine Rolle.
Der Zuhörer ist nicht wichtig - das Aussprechen und Formulieren in
verständlichen Sätzen ist das Wichtige. Es hilft DIR!
(Und wenn mal niemand zur Hand ist, dann erkläre ich mir die Dinge eben
selber. Das bringt mir in einem neuen Job immer ein paar seltsame Blicke
ein, aber die Leute gewöhnen sich daran. Manchmal hat es auch Vorteile
wenn man schizophren ist :-)
Karl Heinz Buchegger schrieb:> Ideal wäre es, wenn du den kompletten Vorgang, von vorne bis hinten,> jemandem erklärst.
Wie wahr!
Das habe ich auch schon mehrfach erlebt, und das faszinierende ist:
manchmal reicht schon der erste Satz, in dem man nur die Aufgabe und das
Problem schildert, um selber das Ei zu finden.
Gruß Dietrich
Dietrich L. schrieb:> Karl Heinz Buchegger schrieb:>> Ideal wäre es, wenn du den kompletten Vorgang, von vorne bis hinten,>> jemandem erklärst.>> Wie wahr!> Das habe ich auch schon mehrfach erlebt, und das faszinierende ist:
Was auch faszinierend ist:
Du kannst im Editor stundenlang auf einen Code starren und siehst den
Fehler nicht. In dem Moment, in dem du im Debugger auf den ersten
Breakpoint in diesem Code aufläufst, ist der Fehler aber sowas von klar.
Karl Heinz Buchegger schrieb:> Was auch faszinierend ist:> Du kannst im Editor stundenlang auf einen Code starren und siehst den> Fehler nicht. In dem Moment, in dem du im Debugger auf den ersten> Breakpoint in diesem Code aufläufst, ist der Fehler aber sowas von klar.
Irgendwie bringt es das ziemlich genau auf den Punkt. Die eigenen Fehler
übersieht man immer... dafür findet man die der anderen umso besser ;)
Problem ist auch öfters, dass man manche Dinge im Unterbewusstsein schon
als "gegeben" ansieht, und diese dann als Fehlerquelle unbemerkt
ausschließt :/
Zum Thema:
Klaus schrieb:> Bist Du sicher,dass das hier geht.
Der Quellcode stammt aus einem Buch, von daher bin ich davon
ausgegangen, dass er korrekt ist.
Hier noch einmal der Code, etwas anders.
_lcd_problem schrieb:> Klaus schrieb:>> Bist Du sicher,dass das hier geht.> Der Quellcode stammt aus einem Buch, von daher bin ich davon> ausgegangen, dass er korrekt ist.
Du kennst das elfte Gebot?
> Hier noch einmal der Code, etwas anders.> // define pins of LCD port> #define LCD_PIN_RS 2> #define LCD_PIN_E 3> #define LCD_PIN_D4 4> #define LCD_PIN_D5 5> #define LCD_PIN_D6 6> #define LCD_PIN_D7 7
wunderschön.
Nur leider werden LCD_PIN_D6 bzw LCD_PIN_D7 im Code gar nicht verwendet.
> // Send Byte to LCD Controller> void lcd_send(unsigned char type, unsigned char c)> {> unsigned char sic_c; // Backup for c> // send high nibble> sic_c = c; // save original c> sic_c &= ~0x0f; // set bit 0-3 == 0> if (type==DATA)> sic_c |= (1<<LCD_PIN_RS); // Data: RS = 1> LCDPORT = sic_c; // send high nibble> toggle_enable_pin();> // send low nibble> sic_c = c; // save original c> sic_c = sic_c<<4; // exchange nibbles> sic_c &= ~0x0f; // set bit 0-3 == 0> if (type==DATA)> sic_c |= (1<<LCD_PIN_RS); // Data: RS = 1> LCDPORT = sic_c; // send low nibble> toggle_enable_pin();> _delay_ms(5); // Wait for LCD controller> }
Hier steckt eine Pinbelegungsannahme drinnen.
Wenn du Code brauchst, den du tatsächlich auf jeden Pin einzelen
konfigurieren kannst, dann nimm die LCD Routinen vom Peter Fleury. Die
sind getestet und funktionieren.
Karl Heinz Buchegger schrieb:> Nur leider werden LCD_PIN_D6 bzw LCD_PIN_D7 im Code gar nicht verwendet.
Werden doch nur für den 8bit Modus verwendet, der allerdings nicht
implementiert ist ;)
Okay, hab mir die lib mal heruntergeladen, danke für den Hinweis, mal
sehen, ob es jetzt funktioniert.
Melde mich bald ;)
So, hat sich leider nichts ergeben, aber schaut euch mal das Bild im
Anhang an, ist das normal (hab den Kontrast etwas erhöht, damit man das
gut sehen kann)?
Sobald der Display Strom bekommt, erscheint dieses Bild und egal was ich
mache, es ändert sich nie.
Habe die o.g. Library verwendet, mit folgenden Modifikationen:
1
#define XTAL 1000000UL
2
#define LCD_PORT PORTD
3
#define LCD_DATA0_PIN 4
4
#define LCD_DATA1_PIN 5
5
#define LCD_DATA2_PIN 6
6
#define LCD_DATA3_PIN 7
7
#define LCD_RS_PIN 2
8
#define LCD_RW_PIN 0 // brauch ich ja sowieso nicht, weil RW auf 0V
Hi
>Sobald der Display Strom bekommt, erscheint dieses Bild und egal was ich>mache, es ändert sich nie.
Wenn das die übliche 'schwarze' Zeile eines nicht initialisierten
Displays ist, dann dürfte es hinüber sein.
MfG spess
Spess53 schrieb:> Wenn das die übliche 'schwarze' Zeile eines nicht initialisierten> Displays ist, dann dürfte es hinüber sein.
Das bestätigt meine Vermutung, weil genau das ist es ;)
kauf dir halt mal ein LCD mit dem üblichen Standard-Anschluss - alle 16
Pins in einer Reihe anstatt immer wieder denselben Typ eins nach dem
anderen zu verschrotten.
Karl Heinz Buchegger schrieb:> anstatt immer wieder denselben Typ eins nach dem> anderen zu verschrotten.
Fängt aber gerade Spaß zu machen :(
Nein, aber jetzt sollte es ja nicht mehr vorkommen... hab sowieso noch 3
7-Segmentanzeigen da, die sollten erstmal als Alternative reichen :)
holger schrieb:> Brutzel mal die HEX Datei rein. Mal sehen wie das aussieht.
LCD ist kaputt :)