Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD Ansteuerung!


von Stefan B. (stefanberker)


Angehängte Dateien:

Lesenswert?

Ich habe ein Program für LCD geschrieben( wie AVR Tutorial ). Ich 
benutze Atmega8515 und LCD mit KS0066U Controller. Es funkzuniert aber 
nicht. Bitte hilf mir!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Da ist der Anhang mit dem Schaltbild verloren gegangen. Ich habe 
gelesen, dass das passieren kann, wenn VORSCHAU gedrückt wird. Bitte 
noch mal posten. Die Schaltung ist für die Lösungsfindung wichtig.

von Stefan B. (stefanberker)


Angehängte Dateien:

Lesenswert?

Hier ist die Schaltung.

von Jack B. (jackbraun)


Lesenswert?

Himmel, Hintern und Nähgarn.

Wie oft soll man es eigentlich noch sagen: kein .bmp sondern png.

1,6MByte für sowas lächerliches.

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

Spontan würde ich sagen, dass dieser Aufbau (im Anhang vergrössert und 
komprimiert) nie und nimmer im Tutorial beschrieben ist.

Welchen Sinn haben die vier Brücken zwischen PORTB und PORTD? Wo sind 
die Pinnummern an PORTB und PORTD? An PORTB kann ich nur 7 IO-Leitungen 
entdecken, an PORTD 8.

Ich würde das neu aufbauen - so einfach wie möglich.

von Stefan B. (stefanberker)


Lesenswert?

Vier Brücken ist für beide Fälle( 4Bits und 8 Bits Ansteuerung).
Du kannst nur 7 IO Leitungen an PORTB entdecken weil ich nur 7 brauche. 
Die andere habe ich mit GND verbunden.
Und im Tutorial steht auch keine Anleitung für LCD Schaltung. Ich habe 
es selbst gemacht.

von Karl H. (kbuchegg)


Lesenswert?

Stefan Berker wrote:
> Vier Brücken ist für beide Fälle( 4Bits und 8 Bits Ansteuerung).
> Du kannst nur 7 IO Leitungen an PORTB entdecken weil ich nur 7 brauche.
> Die andere habe ich mit GND verbunden.

Das (die Brücken und der fixe Anschluss auf GND) ist keine gute
Idee. Damit zerschiesst man sich ganz schnell einen Port,
wenn die Dinger gegeneinander treiben.

> Und im Tutorial steht auch keine Anleitung für LCD Schaltung. Ich habe
> es selbst gemacht.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

von Stefan B. (stefanberker)


Lesenswert?

Für die Schaltung werde ich noch mal überlegen, Ihr habt Recht.  danke 
euch. Und für das Program?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Spontan sieht es bis auf Kleinigkeiten (void main(void)) nicht schlecht 
aus.

Als nulltes ;-) würde ich die Kontrasteinstellung am LCD kontrollieren - 
nicht dass der zu niedrig eingestellt ist und einfach die Anzeige 
"blank" ist.

Wichtig für die sehr wichtigen Delays ist, dass F_CPU korrekt definiert 
ist und dass mit Optimierung übersetzt wurde vgl. AVR-GCC-Tutorial - 
Warteschleifen.

Als zweites würde ich die Pinzuordnung prüfen, bin dann aber am 
Schaltplan gescheitert.

An nächstes wäre dann der Vergleich der Initialisierungssequenz und der 
restlichen Ansteuerung mit dem Datenblatt des LCD-Controllers dran. Das 
müsste ich aber auftreiben lassen; ich glaube in der Artikelsammlung 
sind ein paar Weblinks drin.

Auch habe ich nicht im Kopf, ob alle Pins von PORTB und PORTD beim 
Atmega8515 General-I/O-Pins sind oder ob einige andere Funktionen haben. 
D.h. hier würde ich auch im Datenblatt lesen.

von Karl H. (kbuchegg)


Lesenswert?

Auf die Schnelle drübergeschaut:

Das hier:
 {  PORTB |= (0<<PB0);//RS=0

löscht nicht ein Bit.
 0 << PB0   ist immer noch 0 (Eine 0 kann man nach links
schieben sooft man will, sie bleibt trotzdem 0)

Ergo steht da sinngemäß

   PortBit = PortBit | 0

Wenn du aber irgendein Bit mit 0 veroderst, ändert sich nichts
am Bit

  A   B    A OR B
  0   0       0
  1   0       1
  0   1       1
  1   1       1

(B sei die Maske, also das 0 << PB0. Das Ergebnis ist identisch
zu A. Nur dann wenn B eine 1 aufweist, ändert sich das. Du hast
aber keine 1, 0 << PB0 ist immer 0)

Ein Bit wird so gelöscht

  PORTB &= ~( 1 << PB0 );


Bit setzen     PORTB |= ( 1 << PB0 )
Bit Löschen    PORTB &= ~( 1 << PB0 )
Bit abfragen   PORTB & ( 1 << PB0 )

von Karl H. (kbuchegg)


Lesenswert?

Als nächstes würde ich dann mal hergehen und in
das Programm künstliche Endlosschliefen an strategischen
Punkten einbauen. Daduch bleibt das Pgm quasi stehen und
du hast Zeit genug mit einem Multimeter direkt am Display
zu kontrollieren, ob alle Leitungen den Pegel haben, den
sie haben sollen.

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.