PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD 4x20 KS0073 Hardwareproblem?



Jannik
31.03.2008, 16:37
Hallo,

Bin noch ziehmlicher Neuling in sachen MCU. Habe vor zwei Jahren schonmal angefangen und mir ein Board gebaut. Jetzt blüht das Ganze neu auf.
Habe mir am We ein neues Board gefertigt mit LCD. Dieses versuche ich nun anzusteuern.

Nachdem ich mir etliche Themen hierzu im Internet durchgeselen habe und auch schon mehrere Initialisierungen versucht habe, wende ich mich mal an Euch.
Könntet Ihr euch mal die Hardware anschauen ob dort vll. ein Fehler ist?
Der Resetpin macht mir leichte sorgen? Dieser liegt bei mir immer auf +5V. Habe ich so gelesen, dass man das wohl so machen kann?!

Fakt ist. Das Display zeigt mir in allen 4 Zeilen die 20 Zeichen als Balken an und es passiert nichts. Nach dem Initialisieren, wo auch das Display gelöscht wird sollten die Balken ja schon mal weg sein, oder nicht?

Nunja, daher schließe ich auf Hardwarefehler.

MC ist ein mega 16 und das Display-Datenblatt ist auf http://www.lcd-module.de/deu/pdf/doma/dip204-4.pdf

Würde mich wirklich sehr über Hilfe freuen.

Gruß
Jannik

Hubert.G
31.03.2008, 17:01
Die freie Seite von R2 gehört auf GND, sonst hast du auf VEE immer +5V.
Ob R3 den Strom der Hintergrundbeleuchtung aushält bezweifle ich.
Den Rest der Schaltung mit Reset hast du unterschlagen.
Du steuerst das Disp mit 8bit an, üblich sind 4bit.
Für C gibt es Lib von z.B. Peter Fleury, die funktionieren ausgezeichnet.
Der LInk ist wohl ein falsches Disp.

Jannik
31.03.2008, 17:17
Die freie Seite von R2 gehört auf GND, sonst hast du auf VEE immer +5V.
Ob R3 den Strom der Hintergrundbeleuchtung aushält bezweifle ich.


Danke für den Hinweis. Es sind z.Z. fixe Widerstände eingebaut und die LCD-Bel. nimmt auch nur ca. 45mA auf. Kontrast, sowie auch die Beleuchtung funktioniert.



Den Rest der Schaltung mit Reset hast du unterschlagen.

Kannst du das genauer erklären?



Du steuerst das Disp mit 8bit an, üblich sind 4bit.
Für C gibt es Lib von z.B. Peter Fleury, die funktionieren ausgezeichnet.


Ich habe es eigentlich bewusst in 8Bit angesteuert, da ich dachte, dass dies "einfacher" ist. Nach der Lib werde ich mal suchen. Sollte ja trotzdem auch im 4Bit Modus laufen?!

Hier der richtige Link (Blau/Weiß)
http://www.lcd-module.de/deu/pdf/doma/dip204-4.pdf

Hubert.G
31.03.2008, 17:53
Mit dem fixen Widerstand könnte der Kontrast zu stark eingestellt sein, so das du nichts erkennen kannst. Es sollte daher schon ein Pot sein.
Auf deiner Schaltung sieht man nur die Hälfte deiner Schaltung (µC)

Jannik
31.03.2008, 19:38
Habe nun ein Poti eingelötet. Der Kontrast lässt sich doch gleich viel besser einstellen :)
Leider passiert immer noch rein garnichts.

Im Anhang habe ich auch noch mal den kompletten Schaltplan. Mit dem Reset meinte ich eigentlich den Reset von dem LCD, den ich auf +5V gelegt habe.
Die Hardware hat außenrum sicherlich noch kleine fehler, aber das wichtigste (denke ich zummindest) läuft erstmal.

Ich poste auch mal meine initialisierung. Mehr möchte ich ja erstmal garnicht haben. Nur ein kleiner blinkender Cursor - ein Lebenszeichen ;)


#include <avr/io.h>
#include <util/delay.h>

#define lcd_data PORTC


void lcd_init(void) {
DDRC = 0xff; //LCD-data als Ausgang
DDRD = 0xe0; //Port D als Ausgang für RS EN RW
PORTD = 0x00;

//lt. datenblatt bsp.
_delay_ms(20);
lcd_data = 0x34; //function set 8Bit, extension bit re = 1
_delay_us(39);
lcd_data = 0x09; //ext. function set 4zeilen modus
_delay_us(39);
lcd_data = 0x0f; //display on, cursor ein, cursor blinken
_delay_us(39);
lcd_data = 0x01; //clear display
_delay_us(1530);
lcd_data = 0x06; //entry mode set

}


void main (void) {
lcd_init();
}

Ich konnte im Datenblatt keine Hinweise zum setzen von dem Enable Bit finden? Wann muss dieser high, wann low? vor jedem Befehl?
Bei der Initialisierung habe ich mich ziehmlich strikt ans Datenblatt gehalten.

Hubert.G
31.03.2008, 20:50
Damit das Disp die Daten übernimmt muss nach dem Anlegen der Daten das Enable ca. 1µs auf high gelegt werden. RS muss auch auf high sein.
Schau auch mal hier www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung
ist zwar für 4bit Mode, aber man kann doch etwas erkennen.

pacer_one
02.04.2008, 11:45
Hallo,

ich experimentiere derzeit ebenfalls mit meinem Display, allerdings scheint ein KS0070 drauf zu sein. Ich habe mal für meinen ATMega8 ein Ansteuerung über 8Bit in Assembler zusammengebastelt.
Du müsstest nur die Ports und die MC-Frequenz anpassen. Sollte aber kein Problem sein, Assembler ist ja leichter als C ;-)

Also einfach mal ausprobieren und Rückmeldung geben

Jannik
02.04.2008, 18:39
Ich habe eben mal die Datenleitungen am Display gemessen, ob diese den passenden Pegel (High, Low), den ich am PORT C ausgebe, haben.
Dabei ist mir folgendes aufgefallen. Wenn ich den ganzen PORTC = 0x00 setze habe ich am Display pin 10 (Datenbit3), sowie an einem weiteren Pin 4,96V. Der Pegel ist also immer High. Woran kann das liegen ? Display defekt?

Ich sollte vll dazu sagen, dass das Display gebraucht ist. KA wo das herstammt.

Ich habe mal nur die den PORTC ohne Verbindung zum Display gemessen. Bei 0x00 Sind trotzdem 3Pinne auf 4,95V und der rest auf etwa 6-8mV gegen Masse!
Hier würde ich sagen, ist ganz klar der Controller defekt?!

Das Display ändert irgendwie seine Datenpegel. Ebenfalls Ende offen und nicht mit Port C verbunden. Mal sind die Datenleitungen D0 -D7 High und mal Low. Wie sollte es normalerweise sein? Vll ist das auch defekt und in folge ist der AVR kaputt gegangen?. Wollte mir jetzt nicht zum "testen" ein neues Display für rund 27 euronen kaufen.. :)

Nun bin ich der Meinung, dass es wahrscheinlich garnicht an meiner initialisierung liegt (dort vll auch drann, aber erstmal die Hardware i.O. bringen).

Hubert.G
02.04.2008, 19:25
Ich würde eher sagen du hast JTAG nicht disabled, damit kannst du PC2 bis PC5 nicht benutzen.

Jannik
02.04.2008, 20:19
Ah, ich werd bekloppt. Das ist ja wenn man zum ersten mal son mega16 benutzt. Hatte vorher einen 8515, der hat ja keinen jtag. :) Ich versuchs mal ;)

Jannik
02.04.2008, 21:41
So, jetzt läuft alles. Vielen Dank Hubert.
Die Daten kommen Hardwaremäßig alle richtig am LCD an. Habe alle Initialisierungsbefehle nachgemessen! Es passt.

Bleibt nur noch das Problem bestehen, dass ich immer noch keinen blinkenden cursor nach der abgearbeiteten Initialisierung sehe :(

Vll hilft hier nochmal mein Code weiter.. Ist ja wirklich nicht viel.
Wär super wenn sich den wer anschaut :^o


#include <avr/io.h>
#include <util/delay.h>

#define lcd_data PORTC

void lcd_enable(void) {
PORTD |= (1<<PD7); //bit setzen
_delay_us(1);
PORTD &= ~(1<<PD7); //bit löschen
}


void lcd_init(void) {
PORTD &= ~ (1<<PD5) | (1<<PD6) | (1<<PD7);//RS 0, RW 0, EN 0

lcd_enable();
_delay_ms(4);
lcd_enable();
_delay_ms(1);
lcd_enable();
_delay_ms(1);

//lt. datenblatt bsp.
lcd_data = 0x34; //function set 8Bit, extension bit re = 1
lcd_enable();
_delay_us(39);

lcd_data = 0x09; //ext.0x09 function set 4zeilen modus
lcd_enable();
_delay_us(39);

lcd_data = 0x0f; //display on, cursor ein, cursor blinken
lcd_enable();
_delay_us(39);

lcd_data = 0x01; //clear display
lcd_enable();
_delay_us(1530);

lcd_data = 0x06; //entry mode set
lcd_enable();
_delay_us(39);
}


int main (void) {
_delay_ms(20); //warten bis versorgungsspannung anliegt

DDRC = 0xff; //LCD-data als Ausgang
DDRD = 0xff; //Port D als Ausgang für RS EN RW

lcd_init();
lcd_init();
lcd_init();
while(1){}

}

Hubert.G
02.04.2008, 22:00
Im Datenblatt steht ein Initialisierungbeispiel für den 8bit Modus, nach dem fehlt dir eine Zeile.

Jannik
02.04.2008, 22:19
Und ich dachte immer das wär entweder oder, da die zeile zwischen den function sets etwas dicker war. Vll hilft da weniger denken oder doch etwas mehr :-b

Aber es geeeeht :) \:D/ \:D/
Jetzt kann ich endlich schlafen gehen.

many many thanks \:D/