Forum: Mikrocontroller und Digitale Elektronik LCD


LCD
von DUDE (Gast)


Lesenswert?

Ich habe ein LCD genau wie im Tutorial beschrieben. Nun wundert mich 
warum ich immer nur ein schwarzer streifen im bild habe?
Der Pin 3 Vee hab ich probiert mit 0V, 5V.
Was braucht der Pin 3 überhaupt? etwa ein Poti um den Kontrast 
einzustellen?

von Rene (Gast)


Lesenswert?

Hallo Dude

Jawohl, für den Kontrast nimmt man am besten ein Poti. Manche Display 
benötigen sogar eine negative Spannung für den Kontrast. Probier doch 
mal ein 10k Poti von Vcc nach GND und mit dem Schleifer an das Display.

Ciao René

von Holger Buss (Gast)


Lesenswert?

Hi Dude!

Versuche mal 220 (oder 100 Ohm) gegen Masse.
Das passt meistens.

Gruss,
Holger

von Rene (Gast)


Lesenswert?

Hallo Dude

Also ich bin nach wie vor der Meinung, dass ein 10k Poti am geeignetsten 
ist. Wenn man sich die Verhältnisse einmal, bei Benutzung eines 100 Ohm 
Potis, veranschaulicht, dann stell man fest, dass das Poti in diesem 
Fall mal ebend locker 250 mW umsetzt, und das ist schon jede Menge. Also 
ein Pt10 von Piher macht das nicht mit   :-(
Also, da kein großer Strom für die Kontraseinstellung benötigt wird, 
meine ich dass ein 10k Poti das Sinnvollste ist.

Ciao René

von DUDE (Gast)


Lesenswert?

Mit dem Kontrast habe ich jetzt lange herumgespielt aber mein LCD
will immer noch nicht.
Warum habe ich nur ein Schwarzen Balken??
Ich hab mal versucht das LCD so anzuschliessen:

1 Vss -> GND
2 Vcc  -> 5V
3 Vee (über 10K Poti aber jetzt wieder auf Masse)
4 RS  -> PD4 am AVR
5 RW -> GND
6 E -> PD5 am AVR

und Wenn ich jetzt einschalte habe ich auch nur ein Schwarzen Balken.

von Christian (Gast)


Lesenswert?

Das hatte ich aber gestern auch. Ich habe die ganzen Teile entlötet und 
auf einer neuen Platine wieder aufgebaut, das Hex mit der LCD.INC und 
der Ansteuerung erneut eingespielt, dann funzte das... Kontrollier 
vielleicht noch einmal Dein Progi und Deine Lötstellen, vielleicht hast 
Du ein Kabel vertauscht....Mit dem Kontrast hatte das bei mir gar nichts 
zu tun.

MfG Christian

von DUDE (Gast)


Lesenswert?

Also ich habe schon 2 LCD ausprobiert und beide sind gekauft, also keine
Löhtstellen. Die Kabel hab ich schon etwa 15x neu angeschlosssen aber 
ich geh heute noch einmal alle Pins neu durch. Progi hab ich den STK500
und Quarz den 8Mhz, 4Mhz und den eingebauten.
Das Hex hab ich vom Tutorial direkt heruntergeladen (LCD.ini und 
LCD.asm).
Das einzige was ich abgeändet habe ist: .include "2333def.inc"     zu 
8515def.inc


Wirklich Komisch :(

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Aha, da ham wir's:

           ldi temp1, RAMEND  ;Stackpointer initialisieren
           out SPL, temp1

muss in


           ldi temp1, low(RAMEND)  ;Stackpointer initialisieren
           out SPL, temp1
           ldi temp1, high(RAMEND)  ;Stackpointer initialisieren
           out SPH, temp1

geändert werden (siehe http://www.mikrocontroller.net/tutorial3.htm)!

MfG
Andreas

von Holger Buss (Gast)


Lesenswert?

@Rene,

ich meinte ja auch kein 100 Ohm Poti als Spannungsteiler, sondern einen 
100-270Ohm Widerstand direkt vom Kontrastpin des Displays gegen Masse.
Probier das mal aus, klappt wunderbar. (auch von ca. 0° bis 40°)
Potis sind immer Mist.

Gruss,
Holger

von DUDE (Gast)


Lesenswert?

Das mit dem Poti hat sich erledigt.

Aber das mit der änderung im Quelltext:

ldi temp1, low(RAMEND) ;Stackpointer initialisieren
out SPL, temp1
ldi temp1, high(RAMEND) ;Stackpointer initialisieren
out SPH, temp1

hat mir leider auch nichts gebracht. BUMMER.

von DUDE (Gast)


Lesenswert?

Jetzt ist mein AVR leer.

Wenn ich jetzt alles verbinde und die Betriebsspannung gebe kommt auch
ein Schwarzer Balken.

Angeschlossen hab ich es sicher richtig laut Anleitung wo ich
beim kauf mitbekomme habe.

von Rudolf (Gast)


Lesenswert?

Hallo Dude,

bist Du sicher, dass Du das Programm auch gestartet hast? Nach dem 
Anlegen der Betriebsspannung startet der HD44780 nämlich im 
1-Zeilen-Mode mit 1:8 duty. Die schwarze Zeile deutet darauf hin, dass 
das Display total übersteuert ist. Die zweite Zeile wird erst 
angesteuert, wenn Dein Programm den Controller initialisiert hat. Also: 
Programm laden, starten, Kontrastspannung so weit von 5V weg drehen, 
bis der Hintergrund in allen Zeilen gleichmäßig hoch kommt, dann wieder 
einen Schritt zurück. Je nach Display kann die LCD-Spannung auch 
negativer als GND werden (z.B. extended temp.-Typen). Das ist erlaubt, 
nur darf die Spannung dann erste später als die Vcc angelegt werden, 
sonst latcht der Controller und wird warm.

Funktionierts?

Rudolf Sosnowsky +++ LC Design
EPSON Technology Partner
E-Mail Rudolf.Sosnowsky@LC-Design.de
Internet http://www.LC-Design.de

von Uwe (Gast)


Lesenswert?

Hi,
Ich denke der schwarze Balken ist nicht wirklich schwarz sondern mehr so 
ein helles Grau, das ist  die Einschaltstellung wenn das Displ. nicht 
initialisiert wird, meine also dein Prog. hat irgendwelche Fehler. 
Untersuche doch mal besonders den LCD-Init Teil, da wird wohl dein 
Probl. stecken.

Gruß Uwe

von DUDE (Gast)


Lesenswert?

Nein es sind keine Hellen Grauen.

Das mit dem initialisieren ist sicher ein problem.

Mein Controller müsste richtig programmiert worden sein.
Wenn ich die LED's vom Testboard anschliesse Leuchten zuerst alle, dann
alle ausser LED4 und LED2.

Nochmal zu meinem Programm, vom Tutorial LCD.ASM und LCD.INC
einmal mit der änderung von diesem Beitrag, und einmal ohne.

von Uwe (Gast)


Lesenswert?

Hi,
Ich habe mir mal das Tutorial angesehen, das Init ist falsch!

 ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
           ldi  temp3,50
powerupwait:
           rcall  delay5ms
           dec  temp3
           brne  powerupwait

           ldi temp1, 0b00000011        ;muss 3mal hintereinander 
gesendet
;Falsch!
;es muß lauten
          ldi temp1, 0b00110000      ;Bit 4+5 müssen 1 sein, nicht Bit 
0+1

           out PORTD, temp1             ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall delay5ms
           rcall lcd_enable             ;2
           rcall delay5ms
           rcall lcd_enable             ;und 3!
           rcall delay5ms

Gruß Uwe

von Uwe (Gast)


Lesenswert?

Ich noch mal ,
Nehme alles zurück! DB4 - DB7 sind ja an Port D0 - Port D3 
angeschlossen! Dann stimmt natürlich alles, sorry.

Gruß Uwe

von DUDE (Gast)


Lesenswert?

Kann ich überprüfen ob mein LCD richtig init. wurde?

von Jonas Diemer (Gast)


Lesenswert?

DUDE, oben haste aufgelistet, was du alles angeschlossen hast. in der 
auflistung fehlen die 4 datenleitungen! Vergessen aufzulisten?

von Jonas Diemer (Gast)


Lesenswert?

Andreas: Die änderung ist nur für AVRs notwendig, die mehr als 256 byte 
SRAM haben, oder?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ja, da bei diesen die Adresse länger als ein Byte ist und somit High- 
und Low-Byte nacheinander übergeben werden müssen.

MfG
Andreas

von Freudi (Gast)


Lesenswert?

Hey DUDE. Bei mir war es aehnlich, aber was hatte ich Trottel gemacht..
Die Pins der LCD fingen mit L+- (Hintergrundbeleuchtung) an , darueber 
stand aber die 1 fuer Pin1. Und im Datenblatt stand auch das 14/15 die 
Beleuchtung waere. Komisch das 14/15 vor 1 kommt...
Lange Rede Pin1 war bei mir der Dritte und nicht der erste.
Die Fehlersuche war auch nicht so schlimm weil immer die Hintergrund-LED 
anging und schwarze Balken erschienen, hab aber trotzdem ne 1 Stunde
gesucht bis ich drauf kam.
Vielleicht hilfts ja, zumindest seelisch

Freudi

von Jonas Diemer (Gast)


Lesenswert?

du meinst 15/16, nicht 14/15 (oder?)!

von DUDE (Gast)


Lesenswert?

Die Pins müssten stimmen den ich habe die Beleuchtung an einem Labor 
Netzgerät angehänt und soblad ich das netzteil einschalte leuchtet die 
beleuchtung.

Nochmals zu den displays. 1x habe ich das gleiche Sharp wie hier auf der 
Homepage unter LCD, und einmal habe ich Displaytech 402A.

von Freudi (Gast)


Lesenswert?

@jonas Sorry 15/16 ist ein LM162KS1 von Sharp betrieben an M16C via 8 
Bit. Hat bis zum Init (FunctionSet) schwarze Balken in der ersten Zeile, 
danach sind sie weg und der Cursor blinkt links oben.

Freudi

von Axel(ojojo) (Gast)


Lesenswert?

Hallo

ich habe soeben ein LCD an meinem 4433 angeschlossen und alles hat 
sofort wunderbar funktioniert

Jetzt würde ich gerne den Text komfortabler eingeben
zB so

text1:

  ldi  temp4,10  ; für 10 Zeichen
  ldi  zl,low(tabelle1*2) ; Zeige auf Z-Pointer Lowbyte von Tabelle1
loop_msg1:
  lpm    ; lade R0 mit Wert auf der der Z-Pointer zeigt
  mov  temp1,r0  ; kopiere R0 in temp1
  rcall  lcd_data  ; Daten senden
  inc  zl  ; Incrementiere Z-Pointer LOW
no_carry1:
  dec  temp4  ; 8 Zeichen senden
  brne  loop_msg1
  ret

tabelle1:

.db  "Hallo Test"

Warum geht das bei mir nicht
ich bekomme nur 10 schwarze 4Ecke ?!

jo
Axel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo,

Du musst auch das High-Byte des Z-Pointers (ZH) setzen.
Probier's mal mit dem Programm 'Stringkonstanten mit lpm laden' in der 
Codesammlung, das funktioniert auf jeden Fall.

MfG
Andreas

von Axel(ojojo) (Gast)


Lesenswert?

Hallo Andreas,

es ging jetzt !! :-)

ich glaube ich hatte den Pointer falsch erhöt
warum hatte ich mit "inc" keinen Erfolg ?


Damit ging`s:
adiw ZL, 1   ;den Z-Pointer um 1 erhöhen, adiw = "add immediate to word"


jo
Axel

von Axel(ojojo) (Gast)


Lesenswert?

Wie mache ich mir ne Uhr ?

:-)
kennt bestimmt jemand nen Link, oda!?

jo
Axel

von Remo Markgraf (Gast)


Lesenswert?

Auf der atmel hompage gibt es unter der Bezeichnung
"AVR242: 8-bit Microcontroller Multiplexing LED Drive & a 4x4 Keypad." 
ein Application Note die genau das macht:

http://www.atmel.com/atmel/products/prod201.htm

Da gibt es ausserdem viele andere Beispiele die nicht schlecht sind.

Viel Spass damit und ciao
Remo

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo Axel,

der Z-Pointer besteht aus 2 Bytes, du musst immer das Low- UND das 
Highbyte initialisieren. Dass es in diesem Fall auch so funktioniert hat 
liegt nur daran dass die Adresse von tabelle1 zufällig <=0xFF war. Beim 
Inkrementieren mit inc bist du dann wahrscheinlich über die 0xFF-Grenze 
gekommen, so dass der Z-Pointer auf den Anfang des ROMs gezeigt hat und 
lpm somit nur Müll liefern konnte. Beim erhöhen von adiw wird ZH erhöht 
wenn ZL überläuft, deshalb stimmt dann die Adresse.

MfG
Andreas

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.