www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD Ansteuerung!


Autor: Stefan Berker (stefanberker)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Berker (stefanberker)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die Schaltung.

Autor: Jack Braun (jackbraun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Berker (stefanberker)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Berker (stefanberker)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.