www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Display 2x16 Zeichen


Autor: Dietmar P. (dietmar2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bastle immer noch an meinem Display herum, läuft aber nicht.

2x16 Zeichen der Firma Displaytech mit Controller KS0070B (Reichelt LCD 
162C LED).
Geschrieben werden soll über ein Schieberegister 74HC164N. Damit genügen 
drei Anschlüsse CLK, DATA und DATA-ENABLE. Schaltung ähnlich Ulrich 
Radig.
Schaltplan füge ich mal bei.
Zur Steuerung verwende ich einen Atmega 32, Standardansteuerung PORT C.

Leider tut sich da nichts auf dem Display, habe nur einen schwarzen 
Balken in der ersten Zeile.
Verwende ich PORT D, dann kann ich die Hintergrundbeleuchtung an- und 
ausschalten.

Leitungen zwischen Mikrocontroller und IC bzw. LCD-Display sind x-mal 
geprüft.
Weil ich den Atmega ohne externen Quartz betreibe habe ich über "F-CPU" 
den Takt von 1 MHZ bis 12 MHz probiert.

Wo kann da der Knackpunkt sein?

Danke vorab für Eure Hilfe.

Autor: tsaG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Leider tut sich da nichts auf dem Display, habe nur einen schwarzen Balken in der 
ersten Zeile.


Anzeichen auf ein nicht initialisirtes Display

Autor: tsaG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Atmega 32, Standardansteuerung PORT C.

Da kann auch das JTAG Fuse dazwischenfunken. Ist das aktiviert sind 
einige Pins an PORTC für JTAG "reserviert" Ich glaube PC2-PC5

Autor: Sönke O. (soenio)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja denke auch das es nicht richtig Initialisiert ist. DB0 - DB 3 kann 
man/sollte man offen lassen wenn man im 4Bit Modus arbeitet. Bei welcher 
Spannung wird das teil betrieben, wenn diese zu niedrig ist muss man die 
dem LCD Display immer länger zeit geben.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Dietmar P. (dietmar2)

>      Bild1.png

Hast du Windpocken? In deinem Schaltplan sind zuviele Punkte. Die 
gehören nur an Stellen, wo sich mehr als zwei Leitungen treffen, Eagle 
setzt die meist schon automatisch.

DB0..3 MÜSSEN im 4-Bit Modus offen bleiben.

MFG
Falk

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke mal für Eure Antworten.

Vorab bitte ich um Nachsicht, bin noch Anfänger.

Also der Reihe nach:

- Was bedeutet "nicht initialisiert" und initialisiert man?

- Das mit dem JTAG an PC2-PC5 kann hinkommen. Mit einem Testprogrämmchen
  war ich nicht in der Lage die Pins auf low zu setzen.
  Habe auch schon temp. Abschalten mit 2 x MCUCSR |= (1<<JTD);
  leider auch keine Änderung.

- Das Display wird mit 5V betrieben.
- Die Leiterbahn für DB0 - 3 einfach einmal kappen?

- Punkte im Eagle zu setzen habe ich mir angewöhnt, weil manchmal
  keine Verbindung auf der Platine hergestellt wird.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Dietmar P. (dietmar2)

>Vorab bitte ich um Nachsicht, bin noch Anfänger.

Auf ihn mit Gebrüll!

;-)

>- Was bedeutet "nicht initialisiert" und initialisiert man?

Man muss spezielle Kommandos an das LCD schicken, bevor man mit ihm 
arbeiten kann. Steht im Datenblatt und tausenden Websites.

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

>- Das mit dem JTAG an PC2-PC5 kann hinkommen. Mit einem Testprogrämmchen
>  war ich nicht in der Lage die Pins auf low zu setzen.
>  Habe auch schon temp. Abschalten mit 2 x MCUCSR |= (1<<JTD);
>  leider auch keine Änderung.

Muss aber gehen.

>- Das Display wird mit 5V betrieben.

Gut.

>- Die Leiterbahn für DB0 - 3 einfach einmal kappen?

Ja.

>- Punkte im Eagle zu setzen habe ich mir angewöhnt, weil manchmal
>  keine Verbindung auf der Platine hergestellt wird.

Ist trotzdem Unsinn und nervt. Wenn man ein Leiterbahn an einem Pin 
beginnt oder beendet, wird das Pin automatisch angeshlossen. Wenn man 
prüfen will, ob an einem Bauteil alle Pins angeschlossen sind, clickt 
man es mit MOSVE an und verschiebt es leicht. Denn sieht man die 
Gummibänder. Das kann man einfach mit der ESC Taste abbrechen.

MFG
Falk

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

Bewertung
0 lesenswert
nicht lesenswert
Dietmar P. schrieb:
>
> - Was bedeutet "nicht initialisiert" und initialisiert man?

Auch das LCd benötigt eine Initialisierungssequenz
* wie ist die Übertragung; 4Bit - 8Bit
* Zeichengröße etc.
* ...
letzten Endes ist auf dem LCD auch nichts anderes als ein spezieller µC, 
der erst mal seine Grundkonfiguration wissen will
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

> - Das mit dem JTAG an PC2-PC5 kann hinkommen. Mit einem Testprogrämmchen
>   war ich nicht in der Lage die Pins auf low zu setzen.
>   Habe auch schon temp. Abschalten mit 2 x MCUCSR |= (1<<JTD);
>   leider auch keine Änderung.

Schalt die Fuse ab.
Wenn du keinen JTAG Adapter hast, kommt die dir immer nur in die Quere.

> - Das Display wird mit 5V betrieben.
> - Die Leiterbahn für DB0 - 3 einfach einmal kappen?

Ja

> - Punkte im Eagle zu setzen habe ich mir angewöhnt, weil manchmal
>   keine Verbindung auf der Platine hergestellt wird.

Dann solltest du dir angewöhnen, die grünen Linien immer bis auf den Pin 
zu ziehen. Bringt auf Dauer mehr, als diese Punktorgie. Zur Kontrolle 
einfach mal ein IC im Schaltplan aufnehmen und ein wenig hin und her 
fahren. Alle grünen Linien, die stehen bleiben sind nicht richtig 
angeschlossen.

Autor: tsaG (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hast du schona mal ein Display an einem µC betrieben? ohne SPI, wenn 
nein würde ich damit mal anfangen.

>DB0..3 MÜSSEN im 4-Bit Modus offen bleiben.
Ich leg die immer auf Masse, funktionert problemlos.

JTAG deaktivieren: Markierte Fuse im Anhang im AVR Studio löschen

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>DB0..3 MÜSSEN im 4-Bit Modus offen bleiben.
Kann mir mal jemand zeigen in welchem Datenblatt das steht, in meinen 
jedenfalls nicht. Persöhnlich halte ich das für ein Gerücht, lasse mich 
allerdigs gerne belehren, dann aber bitte kein blabla sondern schwarz 
auf weiss.

schönen Abend noch, Uwe

Autor: MagIO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie man das initialisiert findest Du im Datenblatt des Displays 
beschrieben. Nach dem Reset muss man da bestimmte Nibbels schicken und 
verschiedene Wartezeiten müssen eingehalten werden.

Vorgehensweise zum Daten rüberschicken ist klar, oder? Erst ins 
Schieberegister reinschieben, dann E kurz aktivieren ( war das high oder 
low activ? - habs vergessen), E wieder deaktivieren und nächsten Nibbel 
schieben.
Wird E nicht richtig gehandhabt, dann hast Du ständig resets.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Kann mir mal jemand zeigen in welchem Datenblatt das steht, in meinen
>jedenfalls nicht. Persöhnlich halte ich das für ein Gerücht, lasse mich
>allerdigs gerne belehren, dann aber bitte kein blabla sondern schwarz
>auf weiss.

Zumindest der der Urvater, der HD44780, hat interne Pull-Ups. In meinem 
Datenblatt S.221. Einen Reim darauf kannst du dir selbst machen.

MfG Spess

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst ein Schieberegister mit einem Ausgangs-Buffer.

Bei dem '164 wird offensichtlich jedes Bit seriell direkt an den 
Ausgängen ausgegeben.
Damit kannst Du ein Lauflicht bauen, aber keinen seriell zu parallel 
Wandler, den Du benötigst.

Oder habe ich etwas übersehen?

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab gerade mal im Datenblatt nachgesehen:

http://www.nxp.com/documents/data_sheet/74HC_HCT164.pdf

Das '164 ist für Deine Anwendung völlig ungeeignet. Die seriellen Bits 
laufen am Ausgang wie bei einem Lauflicht durch.

Ein '595 würde gehen.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
@Spess
>Zumindest der der Urvater, der HD44780, hat interne Pull-Ups. In meinem
>Datenblatt S.221. Einen Reim darauf kannst du dir selbst machen.
mache ich, wenn nicht auf GND gelegt bekommst du kein 2 zeiliges Init 
hin weil Eingänge als High gelesen werden und F=H=5x10 Dots kein 
zweizeilig zulässt. Pull Down hätte Sinn gemacht.
SET
FUNCTION
L L L L H DL N F X X 42ms
DL: H 8 bits interface; L 4 bits interface
N: H 2 line display; L 1 line display
F:H 5 X 10 dots; L 5 X 7 dots

schönen Abend noch, Uwe

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das '164 ist für Deine Anwendung völlig ungeeignet.
> Die seriellen Bits laufen am Ausgang wie bei einem Lauflicht durch.
Macht doch nichts.
Interessant wirds ja erst, wenn der Enable Impuls kommt.

>>> DB0..3 MÜSSEN im 4-Bit Modus offen bleiben.
Sowas gibts bei mir nicht.
Mit offenen unbenutzten Busleitungen gibts jedesmal Scherereien bei der 
EMV-Burst-Prüfung...   :-/

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> Das '164 ist für Deine Anwendung völlig ungeeignet.
>> Die seriellen Bits laufen am Ausgang wie bei einem Lauflicht durch.
> Macht doch nichts.
> Interessant wirds ja erst, wenn der Enable Impuls kommt.

Sehe gerade, dass der EN nicht über den 164 läuft. Stimmt, dann geht's.

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die rege Diskussion.

Werde das alles einmal moreg verdauen.

Noch 'nen schönen Abend.

Gruß
Dietmar

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin ein Schritt weiter.

JTAG temp. ausgeschaltet, hat funktioniert.

DB0 - 3 waren auf GND, Leiterbahn unterbrochen, jetzt erhalte ich eine 
Anzeige von Zeichen.

Nächstes Problem: Die Zeichen sind nicht lesbar, das sind irgendwelche 
Punktkombinationen. Habe mir mal im Datenblatt die "Standard Pattern" 
angesehen. So besteht offenbar ein "A" aus den "upper 4 bit" 0100 und 
den "lower 4 bit" 0001. Soweit verstanden.
Entsteht das Zeichen jetzt durch senden der 2 x 4 Bits an den Controller 
des Displays? Wenn ja, dann haut da was in meiner Schaltung mit dem 
Senden bzw. der Reihenfolge nicht hin.

Wieder ein paar Tipps parat? Danke im Voraus.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Entsteht das Zeichen jetzt durch senden der 2 x 4 Bits an den Controller
Ja, du mußt erst das high-Nibble und dann das low-Nibble senden.
Denn sonst könntest du ja nur 16 Zeichen darstellen...

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, soweit klar.

Wie entstehen aber nun die 2 x 4 Bits z.B. für den Buchstaben A. Im 
Datenblatt stehen die ganzen Kombinationen, aber wie erfolgt die 
Umsetzung. Ich könnte mir vorstellen über eine Tabelle, die finde ich 
aber in der Software nicht.
Da stehe ich noch auf dem Schlauch und um weitere Hilfe.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt vom LCD steht doch der Zeichensatz; z.B. 64 bzw. 0x41 für 
ein 'A'.
Das macht dann 4 Bits mit 0x4 (binär 0100) und vier mit 0x1 (0001).

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie sieht denn deine Ausgaberoutine aus. Übrigens, das es an PortC nicht 
funktioniert, liegt mit grosser Sicherheit an der JTAG-Fuse.

MfG Spess

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf die Gefahr hin, dass ich als blöd dastehe, aber .........

Das mit der Zeichen-Kombination habe ich schon verstanden.
Mir fehlt der Zwischenschritt. Ich habe im Programm eine Text-Variable 
mit
dem Zeichen A, wie komme ich jetzt zu der Bit- bzw. Hex-Kombination, mit 
einer Rechenroutine, aber wie, oder muss ich im Programm alle Strings 
die ich auf dem Display ausgeben will in der Bit-Kombination 
programmieren.

Ich frage auch deshalb, weil die U.-Radig Software im main.c folgendes 
stehen hat:

  lcd_print(0,0,"HALLO!"); // Zeile 1
  lcd_print(1,0,"2 TEST!"); // Zeile 2

Davor gibt es zwar ein lcd-init, etc., aber ich kann die Routine  nicht 
entdecken. die aus dem HALLO die Bit-Kombination macht.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dietmar

>Wie entstehen aber nun die 2 x 4 Bits z.B. für den Buchstaben A?

Gaaanz einfach!
Der Buchstabe A hat den Hexwert  0x41 und steht nun im Akku!
Den wert auf den Stack ablegen.
Den Akkuinhalt musst mit 0xF0 verunden und mit SWAP high/lowbyte 
vertauschen oder alternativ rechts schieben so dass 0x04 im akku steht.
den sendest dann zum LCD.
Als nächstes holst den Stackwert wieder in den Akku und verundest mit 
0x0F
so das jetzt im Akku 0x01 steht und sendest es zum LCD.

Jetzt hast du ein Byte gesendet.

Wenn ich das richtig sehe musst du zusätzlich dein zu sendentes Byte 
jedesmal einmal nach links schieben damit es an der richtigen stelle im 
Schieberegister landet.

Ich hoffe geholfen zu haben.

Autor: Rolf Degen (rolfdegen)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen..

So hab ich das Display angeschlossen und es funktioniert.

Hier noch der Link zur Projektseite: 
http://www.cczwei-forum.de/cc2/thread.php?postid=2...

Gruß Rolf

Autor: Dietmar P. (dietmar2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke.

Dann muss das doch gehen, verflixt noch mal!

Also weiter basteln, verschiebe es aber auf morgen, habe schon ganz 
eckige Augen.
Schönes Wochenende!

Gruß
Dietmar

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietmar P. schrieb:
> Auf die Gefahr hin, dass ich als blöd dastehe, aber .........
>
> Das mit der Zeichen-Kombination habe ich schon verstanden.
> Mir fehlt der Zwischenschritt. Ich habe im Programm eine Text-Variable
> mit
> dem Zeichen A, wie komme ich jetzt zu der Bit- bzw. Hex-Kombination, mit
> einer Rechenroutine, aber wie, oder muss ich im Programm alle Strings
> die ich auf dem Display ausgeben will in der Bit-Kombination
> programmieren.

tja und genau da liegt eben der Unterschied zwischen einem C 
Programmierer und einem ASM Programmierer. ASM setzt ZWINGEND ein 
Hardwareverständnis voraus. Wir müssen jedes Bit und Byte mit Vornamen 
kennen. Bei C ist das eben nicht der Fall. Deshalb tun sich auch viele C 
Programmierer mit ganz simplen Zusammenhängen sehr schwer (so wie ich 
mit C ). Aber das kommt mit der Zeit. Und vielleicht kann auch ich 
irgendwann mal C wenigstens richtig lesen.

Gruß

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.