Forum: Compiler & IDEs Display TC1602E.01


von Matthias K (Gast)


Angehängte Dateien:

Lesenswert?

Hallo



Habe ein Problem mit der Ansteuerung dieses Displays.
MEGA 128 16Mhz


#define sport  PORTA
#define dport  PORTC
#define RS  PA6
#define RW  PA4
#define E  PA2
#define D0  PC1
#define D1  PC0
#define D2  PC3
#define D3  PC2
#define D4  PC5
#define D5  PC4
#define D6  PC7
#define D7  PC6
#define DELAY1  asm volatile ("nop\n nop\n nop\n nop\n nop\n
nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");


void main()
{
DDRC=0xff;
DDRA=0xff;

//init Display
PORTA &=~(1<<PA2);
//Function Set
PORTA &=~ (1<<PA4) | (1<<PA6);
PORTC &=~(1<<PC1) | (1<<PC0) | (1<<PC3);
PORTC |=(1<<PC2) | (1<<PC5) | (1<<PC4);
PORTC &=~(1<<PC7) | (1<<PC6);
PORTA |=(1<<PA2);
PORTA &=~(1<<PA2);
DELAY1
//Display on
PORTA &=~ (1<<PA4) | (1<<PA6);
PORTC |=(1<<PC1) | (1<<PC0) | (1<<PC3) | (1<<2);
PORTC &=~ (1<<PC5) | (1<<PC4) | (1<<PC7) | (1<<PC6);
PORTA |=(1<<PA2);
PORTA &=~(1<<PA2);
//clear display
PORTA &=~ (1<<PA4) | (1<<PA6);
PORTC |=(1<<PC1);
PORTC &=~(1<<PC0) |(1<<PC2) | (1<<PC3) | (1<<PC5) | (1<<PC4)
|(1<<PC7)|(1<<PC6)  ;
PORTA |=(1<<PA2);
PORTA &=~(1<<PA2);
DELAY1
//entry mode
PORTA &=~ (1<<PA4) | (1<<PA6);
PORTC &=~(1<<PC1);
PORTC |=(1<<PC0) | (1<<PC3);
PORTC &=~(1<<PC2) | (1<<PC5) | (1<<PC4) | (1<<PC7)|(1<<PC6);
PORTA |=(1<<PA2);
PORTA &=~(1<<PA2);
}


es tut sich nichts.

ist das Display nicht HD44780 kompatible???

Ist meine Ansteuerung richtig habe diese aus folgendem Datenbaltt
http://www.lcd-module.de/deu/pdf/doma/dip162-d.pdf

Danke

von Matthias K (Gast)


Lesenswert?

Hallo

Habe die Lib von Fleury gefunden und angepasst an meine Ports und alles
geht wunderbar.

Mein fehler erst suchen und lesen dann Schreiben.

Trotzdem

Vielen Dank

Das Dispaly gibts bei Pollin für 4,95 hat Backlight und ist super.
Gibt es auch in Blau /weiss aber dann für 7,95 trotzdem ein super
preis.

Danke

von remote1 (Gast)


Lesenswert?

hab genau das gleiche display (zumindest vom Typ), bekomm die lib aber 
net angepasst, bzw erscheint aufm display nichts (hab nen atmega32 mit 
16MHz)

hab erst mal nur das angepasst:
...
#define XTAL 16000000
...
#define LCD_LINES           2
#define LCD_DISP_LENGTH    16
...
#define LCD_PORT         PORTA
#define LCD_DATA0_PORT   LCD_PORT
#define LCD_DATA1_PORT   LCD_PORT
#define LCD_DATA2_PORT   LCD_PORT
#define LCD_DATA3_PORT   LCD_PORT
#define LCD_DATA0_PIN    4
#define LCD_DATA1_PIN    5
#define LCD_DATA2_PIN    6
#define LCD_DATA3_PIN    7
#define LCD_RS_PORT      LCD_PORT
#define LCD_RS_PIN       0
#define LCD_RW_PORT      LCD_PORT  //der hängt bei mir eigentlich auf
masse
#define LCD_RW_PIN       2
#define LCD_E_PORT       LCD_PORT
#define LCD_E_PIN        1


ich hab die Datenleitungen DB4-DB7 and den ports A4-A7

mal ne dumme frage: dieses LCD_DATA0_PIN soll das DB0 beim Display sein
(bin leider nicht @home, sonst würd ichs ausprobieren), kann ja sein ich 
muss die Datenleitungen DB0-DB3 nehmen?!?

von Elektrikser (Gast)


Lesenswert?

Nee, du musst DB4 bis DB7 nehmen...
Da einzige, was mich an dem Display stört ist, dass VCC und GND gegnüber 
der Standardbelegung vertauscht ist.

Gruß Elektrikser

von remote1 (Gast)


Lesenswert?

mein ja nur weil da z.b LCD_DATA0_PIN steht, kann ja sein, dass dieses 
DATA0 sich irgendwie auf DB0 bezieht und ich dann die zahlen abändern 
müsste?!?

von Elektrikser (Gast)


Lesenswert?

Also noch mal langsam zum Mitdenken:
4-Bit-Ansteuerung (nach deinem Listing):
1 -> +5V
2 -> GND
3 -> Kontrast (Schleifer 10k-Poti)
4 -> RS  -> PA0
5 -> R/W -> PA2
6 -> E   -> PA1
7 -> DB0 -> GND
8 -> DB1 -> GND
9 -> DB2 -> GND
10-> DB3 -> GND
11-> DB4 -> PA4
12-> DB5 -> PA5
13-> DB6 -> PA6
14-> DB7 -> PA7

Die Fleury-Lib funktioniert mit diesem Display sehr gut. Habe erst diese 
Woche welche in Betrieb genommen. Schließ mal R/W an.

von remote1 (Gast)


Lesenswert?

r/w is jetzt auch dran, klappt trotzdem nicht

von saddevil (Gast)


Lesenswert?

hab auch dieses LCD mit blauer beleuchtung
als belegung ist wie folgt

1 -> GND
2 -> +5V
3 -> Kontrast
4 -> RS  -> PC5
5 -> R/W -> PC4
6 -> E   -> PC3
7 -> DB0 -> GND
8 -> DB1 -> GND
9 -> DB2 -> GND
10-> DB3 -> GND
11-> DB4 -> PC2
12-> DB5 -> PC1
13-> DB6 -> PC0
14-> DB7 -> PB1
15-> LED +
16-> LED -

die LCD.h dazu sieht SO aus

#define LCD_PORT         PORTC        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   PORTB        /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    2            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    0            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    1            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       5            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       4            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        3            /**< pin  for Enable line     */


data3 port auf PB1  weil ich was vermurkst hatte im plan

von saddevil (Gast)


Lesenswert?

wobei ich seh das du eines mit einem 2x7 connector hast
hast auch daran gedacht die pins richtig anzugehen ?

14 13
12 11
10  9
8   7
6   5
4   3
2   1

ich habe da mal die seiten vertauscht aus dummdusel...

von remote1 (Gast)


Lesenswert?

da es unter BASCOM funktioniert, bin ich mir da ziemlich sicher, dass es 
richtig angeschlossen ist (da muss ich ja auch in der init alle pins 
erst mal BASCOM sagen)
ist es eigentlich wichtig welche 4 Datenleitungen ich vom Display 
nehme???

von saddevil (Gast)


Lesenswert?

ja die letzten 4

die ersten 4  D0 bis D3 auf masse

D4 bis D7 an die PORTs

von Elektrotechniktiger (Gast)


Lesenswert?

ich habe auch das 1602E-01 aber bei mir zieht es 0,5 A und zeigt nur die 
hintergrundbeleutung an... wie sieht das nun mit der Versorgungsspannung 
dabei aus;

1 -> +5V
2 -> GND

oder andersherum?

von MaXX (Gast)


Lesenswert?

lt. Datenblatt sollte es doch eigentl. so sein:

1 -> +5V
2 -> GND

Bin aber auch gerade dran ein Layout zu erstellen und frage mich ob es 
wirklich so ist. Da im Schaltplan vom POLLIN-RFID-Bausatz am Pin 1: GND 
ist und am Pin 2 +5V ?? (dort wird das selbe LCD genutzt)

Weiß jemand etwas genaueres??

Gruß

von Benedikt K. (benedikt)


Lesenswert?

MaXX wrote:
> Weiß jemand etwas genaueres??

> 1 -> +5V
> 2 -> GND

Passt bei diesem LCD (TC1602E-01). Keine Ahnung warum sich der 
Hersteller solch eine bescheuerte Abweichung gegenüber dem Standard hat 
einfallen lassen.

von MaXX (Gast)


Lesenswert?

Danke Benedikt!

Gruß
MaXX

von Volker U. (volkeru)


Lesenswert?

Es gibt auch noch andere Merkwürdigkeiten bei diesem Display:

Ich betreibe meine Displays immer so, dass ich die Kontrasteinstellung 
im EEPROM des Microcontrollers speichere und dann über einen PWM-Ausgang 
am Microcontroller den Kontrast-Pin V0 ansteuere. So kann man sich einen 
extra Poti sparen. Der PWM-Ausgang taktet mit etwa 17 kHz und eine 
Glättung über ein RC-Glied war bisher nie nötig. Bei diesem LC-Display 
ist es aber nötig! Wenn man es nämlich nicht tut, merkt man zwar zuerst 
nichts weiter, aber wundert sich, dass Störungen auf dem Display 
auftreten, d.h. es werden Zeichen falsch dargestellt oder auch 
verschluckt. Auch Zeilenwechsel-Kommandos werden dann gerne nicht 
korrekt ausgeführt. Ein 17 kHz Takt am V0-Pin stört also das ganze 
Modul.

Ich kenne kein anderes Modul, bei dem es solche Probleme gibt. Aber ich 
kenne auch kein anderes, bei dem die Stromversorgung so dumm vertauscht 
ist...

Nunja, wenigstens ist es richtig schön billig :-).

Gruß, Volker

von gitarero (Gast)


Lesenswert?

Hallo,
ich habe ein ähnliches Problem mit dem gleichen Display (TC1602E-01 von 
Pollin), wollte deswegen aber auch keinen neuen Beitrag auf machen.

Ich habe alles korrekt angeschlossen (mehrfach überprüft).

Die Portbelegung ist wie folgt:
    PA.0 => RS
    PA.1 => E
    PA.2 bis PA.5 => DB4 bis DB7

    Vdd auf 5V
    Vss und RW auf GND

Mein BASCOM code sieht wie folgt aus:
1
$regfile = "m16adef.dat"
2
$crystal = 16000000
3
4
Config Portd.6 = Output
5
6
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , _
7
   Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
8
Config Lcd = 16 * 2
9
10
Cls
11
Locate 1 , 1
12
Lcd "Hallo Welt"
13
14
Do
15
    Toggle Portd.6
16
    Waitms 500
17
Loop
18
End

An PD.6 hängt nur eine LED, damit ich sehe, dass der µC überhaupt was 
macht - und das tut er auch... die LED blinkt.

Das LCD zeigt allerdings nur eine Reihe schwarze Balken an.

Hat jemand vielleicht eine Idee, was noch helfen könnte?

von Volker U. (volkeru)


Lesenswert?

gitarero schrieb:
> Ich habe alles korrekt angeschlossen (mehrfach überprüft).
>
> Die Portbelegung ist wie folgt:
>     PA.0 => RS
>     PA.1 => E
>     PA.2 bis PA.5 => DB4 bis DB7
>
>     Vdd auf 5V
>     Vss und RW auf GND

Und wo liegt bei dir V0? Auf Masse? Das könnte die schwarzen Balken 
erklären. V0 (Kontrast) muss über einen Spannungsteiler (oder besser 
Poti) auf ca. 0,5-1V gelegt werden.

Und darüber hinaus das Wichtigste: Initialisierst du dein Display 
überhaupt? Ich kann in deinem Code nichts entsprechendes finden!? Aber 
ich kenne mich mit Bascom auch wenig bis gar nicht aus.

von gitarero (Gast)


Lesenswert?

Hi,
ja Danke erstmal mit dem Tipp von V0. Der hing tatsächlich auf Masse... 
Da hab ich mir erstmal ordentlich an den Kopf gehaun ;)
Habe das dann natürlich nochmal mit einem 10k Poti und V0 auf ca 1V 
probiert.
Zu meiner Ernüchterung bleibt das Display dunkel, bzw zeigt nichts an.

Dann habe ich mir mal ein Programm geschrieben, was alle 200ms einen 
neuen Befehl an das LCD sendet.
Mit einer LED gegen Masse kann man an DB4 bis DB7 auch einen 
"Datenstrom" sehen, sprich die LED blinkt.

E und RS scheinen aber auf Dauerfeuer 5V zu sein. Ist das richtig so?

Habe zum Initialisieren des Displays jetzt auch mal den Befehl "initlcd" 
dazu genommen.
Hilft aber nix :(

Noch Ideen?

Grüße,
Ingo

von Volker U. (volkeru)


Lesenswert?

Also die Initialisierung des Displays ist zwingend notwendig, sonst tut 
sich gar nichts! Bei der Initialisierung ist das Timing extrem wichtig. 
D.h. die Befehle müssen im richtigen Zeitabstand an das Display gesendet 
werden. Darüber hinaus ist bei einer Ansteuerung über 4 statt 8 
Datenleitungen eine spezielle Initialisierung nötig. Normalerweise läuft 
das Display nämlich mit 8 Datenleitungen.

Bitte schau dir dieses Dokument hier an und überprüfe, ob der Vorgang 
wie beschrieben stattfindet (insbesondere die Seiten 5+6, "Initializing 
by Instruction"): 
http://www.afug.uni-goettingen.de/~dk1rm/datasheet/lcd_162c.pdf

Ich würde in jedem Falle immer die "Initialization by Instruction" 
durchführen. Bei 4 Datenleitungen (4-bit Interface Data) ist es ohnehin 
Pflicht. Im Schritt "Function Set" wird das Display dann auf 4 Bit 
eingestellt. Die Datenleitungen DB0-DB3 müssen dabei fest verdrahtet auf 
0 oder 5 Volt sein (je nach gewünschter Zeilenzahl und Character Font). 
Bleiben die Datenleitungen unverbunden, liegen sie allerdings 
automatisch auf High. Wenn es vom Platz her möglich ist, würde ich sie 
aber sicherheitshalber lieber trotzdem fest auf 0 oder 5 Volt legen.

Gruß, Volker

von Volker U. (volkeru)


Lesenswert?

Was ich vergessen habe zu sagen: Ab dem Zeitpunkt der Umstellung auf 4 
Bit müssen natürlich alle Bytes mit zwei(!) Sendevorgängen übertragen 
werden: Zuerst wird jeweils das höherwertige Nibble an DB4-DB7 
übertragen und sofort danach das niederwertige Nibble ebenfalls an 
DB4-DB7. Der Controller im Display baut das Byte aus den beiden Nibbles 
danach wieder zusammen.

von holger (Gast)


Lesenswert?

>Die Datenleitungen DB0-DB3 müssen dabei fest verdrahtet auf
>0 oder 5 Volt sein (je nach gewünschter Zeilenzahl und Character Font).

Bullshit.

>Bleiben die Datenleitungen unverbunden, liegen sie allerdings
>automatisch auf High.

Das ist jetzt mal richtig.

>Wenn es vom Platz her möglich ist, würde ich sie
>aber sicherheitshalber lieber trotzdem fest auf 0 oder 5 Volt legen.

Das ist aber ziemlich blöd wenn mal jemand auf die Idee
kommt die RW Leitung auf lesen zu setzen. Zum Beispiel für
den Busy Check. Dann werden DB0-DB3 Ausgänge und machen einen
netten Kurzschluss gegen GND oder 5V.

von Volker U. (volkeru)


Lesenswert?

holger schrieb:
>>Die Datenleitungen DB0-DB3 müssen dabei fest verdrahtet auf
>>0 oder 5 Volt sein (je nach gewünschter Zeilenzahl und Character Font).
>
> Bullshit.

Benimm dich mal!

> Das ist aber ziemlich blöd wenn mal jemand auf die Idee
> kommt die RW Leitung auf lesen zu setzen. Zum Beispiel für
> den Busy Check. Dann werden DB0-DB3 Ausgänge und machen einen
> netten Kurzschluss gegen GND oder 5V.

Falls du den Beitrag von gitarero gelesen haben solltest, hast du 
vielleicht übersehen, dass er die Leitung RW dauerhaft auf GND gelegt 
hat, weshalb DB0-DB7 grundsätzlich hochohmige Eingänge sind. Das Lesen 
des Displays ist damit unmöglich!

Und jetzt erkläre uns bitte einmal, wie du ohne feste Verdrahtung von 
DB0-DB3, die deiner Meinung nach ja "Bullenscheiße" ist, im 4-Bit 
Betrieb dem Display bei der Initialisierung mitteilen möchtest, dass du 
nur 1 Zeile haben willst, bzw. 5x7 Dots als Character Font!

von Volker U. (volkeru)


Lesenswert?

Eine bisher unbeantwortete Frage ist auch, ob die Leitungen DB0-DB3 im 
4-Bit-Betrieb beim Lesen des Displays überhaupt als Ausgänge geschaltet 
werden. Denn im 4-Bit-Betrieb werden sie ja überhaupt nicht mehr 
benötigt! Ich würde mal vermuten, dass DB0-DB3 im 4-Bit-Betrieb einfach 
abgeschaltet werden, also in einen hochohmigen Dauerzustand versetzt 
werden. Ist aber nur eine Vermutung. Das Datenblatt sagt darüber gar 
nichts. Man müsste es wohl testen. Oder weiß jemand etwas genaueres 
darüber?

von holger (Gast)


Lesenswert?

>Eine bisher unbeantwortete Frage ist auch, ob die Leitungen DB0-DB3 im
>4-Bit-Betrieb beim Lesen des Displays überhaupt als Ausgänge geschaltet
>werden.

Das Display ist nach einem Power On Reset immer im 8Bit Mode.
Warum muss man das wohl sonst per Software erst in den 4Bit Mode 
bringen?

Deine Annahmen sind alle falsch. Und deine Ratschläge auch.
Wieso willst du DB0-DB3 fest an 5V hängen? Da sind doch die
Pullups im Display. Die Leitungen sind bereits auf 5V.
Macht also keinen Sinn.

DB0-DB3 auf 0V zu legen macht auch keinen Sinn.
Alleine die Tatsache das diese Pins Ausgänge werden können
verbietet es geradezu diese per Drahtbrücke auf feste Pegel zu legen.
Wenn da jemand an seinem Steckbrett rumfummelt und R/W mal
rausnimmt werden diese Pins zu Ausgängen weil auch R/W einen
internen Pullup hat.

Du magst ja Sonderfälle:
Nehmen wir mal den Noop der sein Display mit falschen Timings betreibt.
Busycheck wird per R/W gemacht.
Initialisierung auf 4Bit hat nicht geklappt.
Display ist immer noch im 8Bit Mode.
DB0-DB3 liegen an GND oder 5V und werden beim Busy Check zu Ausgängen.
Na herzlichen Glückwunsch. Mal sehen wie lange der LCD Controller
das aushält.

von Volker U. (volkeru)


Lesenswert?

holger schrieb:
>>Eine bisher unbeantwortete Frage ist auch, ob die Leitungen DB0-DB3 im
>>4-Bit-Betrieb beim Lesen des Displays überhaupt als Ausgänge geschaltet
>>werden.
>
> Das Display ist nach einem Power On Reset immer im 8Bit Mode.
> Warum muss man das wohl sonst per Software erst in den 4Bit Mode
> bringen?

Habe ich irgendwas gesagt, was die Annahme rechtfertigt, dass ich hier 
anderer Meinung wäre?

> Deine Annahmen sind alle falsch. Und deine Ratschläge auch.

Bitte erstmal LESEN und GEHIRN EINSCHALTEN vor dem Antworten!

> Wieso willst du DB0-DB3 fest an 5V hängen?

5 Volt nur, um Störungen bei der Initialisierung zu vermeiden. Wie wir 
wissen, ist ein hochohmiger Eingang, der offen rumliegt, sehr 
störanfällig. Es sei denn, er hat Pullups. Es geht auch nicht um 5 Volt, 
sondern um 0 Volt. Bevor du hier umfangreiche Erklärungen lieferst, 
solltest du erstmal meine Frage beantworten. Ich wiederhole sie gerne:

"Und jetzt erkläre uns bitte einmal, wie du ohne feste Verdrahtung von
DB0-DB3, im 4-Bit Betrieb dem Display bei der Initialisierung mitteilen 
möchtest, dass du nur 1 Zeile haben willst!"

4-Bit-Betrieb heißt, dass ich grundsätzlich nur 4 Datenleitungen zur 
Verfügung habe, die ich auf L oder H setzen kann und mehr nicht! Nur so 
zur Klarstellung. Es geht hier auch nicht nur um ein Steckbrett, sondern 
auch um eine fest aufgebaute Schaltung.

> Nehmen wir mal den Noop der sein Display mit falschen Timings betreibt.
> Busycheck wird per R/W gemacht.

Wer Busycheck machen will, kann sein Display ohnehin nicht mit 4 Bit 
betreiben, sofern er es folgendermaßen konfigurieren will: 
1-Zeilen-Modus oder 5x7 Font. Es sei denn, die Leitungen DB0-DB3 werden 
im 4-Bit-Betrieb beim Lesen des Displays nicht als Ausgänge geschaltet 
und bleiben hochohmig. Aber diese Frage kannst du vermutlich auch nicht 
beantworten. Wer immer zwei Zeilen benutzt und einen 5x10 Zeichensatz 
(falls das Display den überhaupt bietet), kann Busycheck machen und 
DB0-DB3 im 4-Bit-Betrieb gerne offen hängen lassen. Das würde ich dann 
auch so machen. Aber mir ging es ja um den allgemeinen Fall, bei dem man 
im 4-Bit-Betrieb evtl. die Konfiguration des Displays ändern will. Da 
gibts kein Busycheck. Da wird R/W fest auf 0 V gelegt und bleibt auch 
dort! Und DB0-DB3 werden fest verdrahtet. Sonst geht das nämlich nicht.

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Ich mag den Thread so nicht stehen lassen. Wieder zu viele falsche 
Annahmen.
Also eine letzte Antwort.

>Und jetzt erkläre uns bitte einmal, wie du ohne feste Verdrahtung von
>DB0-DB3, die deiner Meinung nach ja "Bullenscheiße" ist, im 4-Bit
>Betrieb dem Display bei der Initialisierung mitteilen möchtest, dass du
>nur 1 Zeile haben willst, bzw. 5x7 Dots als Character Font!

Ganz einfach: DB0-DB3 sind beim 4Bit Mode scheissegal.
Es ist Wurst wie die Pegel an den Pins aussehen.
DB0-DB3 sind NICHT daran beteiligt auf eine Zeile und 5x7
umzuschalten. Das geht alles über DB4-DB7. Eben halt in zwei Nibbeln
nacheinander.

Im Anhang mal ein Bild was dir das hoffentlich deutlich macht.
Die Initialisierungssequenz eines HD44780 in den 4 Bit Mode.
Siehst du da irgendwo DB0-DB3?

DB0-DB3 beim 4 Bit Mode fest auf 0 zu legen hat nur
einen Effekt: Unnötig Strom über die Pullups zu verbrauchen.

von Volker U. (volkeru)


Angehängte Dateien:

Lesenswert?

Endlich ein konstruktiver Beitrag! Hättest du dieses Datenblatt gleich 
gepostet, wäre die ganze Diskussion überflüssig gewesen.

Das Datenblatt zum hier besprochenen Display sieht diese Form der 
Initialisierung nämlich nicht vor. Das war das Problem. Ich habe weiter 
oben einen Link zu dem Datenblatt gepostet, auf das ich mich die ganze 
Zeit bezog. Den hattest du dir wohl nicht angeschaut. Von dem Datenblatt 
ausgehend, war eine Konfiguration des Displays nur im 8-Bit-Modus 
möglich, nicht aber in 4 Bit. Siehe beiliegenden Auszug. Unter 
Berücksichtigung dieses Datenblatts war keine meiner Annahmen falsch. 
Hoffen wir mal, dass dieses Display so kompatibel ist, dass die 
Konfigurationsänderung auch NACH dem Umschalten auf 4 Bit noch möglich 
ist.

P.S.: Ist aber auch ne Macke hier im Forum, dass man beim Bearbeiten 
eines Beitrags die beigefügten Bilder nicht mehr bearbeiten (= löschen) 
kann. Oder hab ich was übersehen?

von Peter S. (petershaw)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hatte zwei Tage extreme Probleme dieses Display an meinem ATmega328 
zum laufen zu bringen.
Anfänglich half mir dieser Thread, wurde dann doch aber sehr verwirrend.

Ich habe jetzt nicht die Ahnung wie die anderen hier, jedoch nun ein 
laufendes Display am uC.

Mein Ausgangspunkt war: Display stellte nur die Balken dar, oder nichts.
Programmausführung hing bei:
1
lcd_init(LCD_DISP_ON);

Also genau der Threadbeitrag.

ich habe viel am Board hin und her gelötet, viel am Code geschraubt und 
Stundenlang debgged. Erfolge hatte ich erst, als ich R/W an einen Pin 
angeschlossen hatte, der PWM kann. Ich wieß wirklich nicht, ob dies 
woodoo ist, oder ich sonst ein Zauber gemacht habe, aber jetzt 
funktioniert es.

Anbei meine Belegung. (und ja, die offenen Datenleitungen auf GND 
hängen!)
Hier die Defines;
1
#define   LCD_PORT        PORTC
2
#define   LCD_DATA0_PORT  LCD_PORT
3
#define   LCD_DATA1_PORT  LCD_PORT
4
#define   LCD_DATA2_PORT  LCD_PORT
5
#define   LCD_DATA3_PORT  LCD_PORT
6
#define   LCD_DATA0_PIN   0
7
#define   LCD_DATA1_PIN   1
8
#define   LCD_DATA2_PIN   2
9
#define   LCD_DATA3_PIN   3
10
#define   LCD_RS_PORT     PORTD
11
#define   LCD_RS_PIN      4
12
#define   LCD_RW_PORT     PORTD
13
#define   LCD_RW_PIN      6
14
#define   LCD_E_PORT      PORTD
15
#define   LCD_E_PIN       5

Hoffe dieser Beitrag auf den alten Post und die Belegung hilft andere.

Neben dem angehängten Bild der Belegung noch ein Erfolgsphoto.

von Volker U. (volkeru)


Lesenswert?

Peter Shaw schrieb:

> Programmausführung hing bei:
>
1
> lcd_init(LCD_DISP_ON);
2
>

Die meisten benutzen ja die Routinen von Fleury. Ich habe ursprünglich 
einen anderen Zugang gewählt: Ich hatte damit angefangen, das Display im 
3-Wire Betrieb zu nutzen und über ein Schieberegister 74HCT164 
anzusteuern. Dann kann man es sogar problemlos an einem ATtiny85 
betreiben, weil es nur 3 Leitungen belegt. Später, als die ATmega328 
erschienen und alles preiswerter wurde, habe ich dann die Routinen auf 
4-Bit-Betrieb umgestellt. Auf jeden Fall ist das Konzept mit dem 
Schieberegister aber sehr interessant und erwähnenswert. Auch weil man 
dabei einiges lernen kann:

http://www.micahcarrick.com/avr-3-wire-hd44780-lcd-interface-avr-gcc.html

> Erfolge hatte ich erst, als ich R/W an einen Pin
> angeschlossen hatte, der PWM kann. Ich wieß wirklich nicht, ob dies
> woodoo ist, oder ich sonst ein Zauber gemacht habe, aber jetzt
> funktioniert es.

Das hört sich wirklich nach Woodoo an ;-). Ich kann mir nicht 
vorstellen, dass es etwas mit der PWM zu tun hat, die du an dem Port ja 
gar nicht nutzt :).

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.