Problem bei der Initialisierung von EA W404B-NLW mit Atmega8515

Twarx

Neues Mitglied
29. Juni 2010
5
0
0
Sprachen
Hallo zusammen!

Möchte wie im Titel beschrieben ein LCD-Display (EA W404B-NLW) über mein Board (STK500, AtMega8515, AVR-Studio) ansteuern. Problem besteht aber schon bei der Initialisierung. Ich möchte das Display im 4-Bit Modus betreiben. Die Pins DB4-DB7 sind mit den Anschlüssen 0-3 an Port A verbunden. Enable mit Pin A6, R/W mit Pin A4 und RS an Pin A5. Kontrastspannung ist auch korrekt eingestellt. Mit der folgenden Initialisierung sollte am Ende der Cursor in der 1.Spalte und 1.Zeile zu sehen sein, und zwar blinkender Weise. Macht es aber nicht.

PHP:
int main (void)

{
	DDRB  = 0xFF;				//LED's zur Funktionsprüfung
	DDRA  = 0xFF;
	while (1)
	{
		PORTB = 0b00000000;
		_delay_ms(1000);
		

		if (disp_on==0)
		{
			PORTB = 0b11110000;
			_delay_ms(1000);
			
			PORTA = 0b01000010;		//4bit-Modus Display
			PORTA = 0b00000010;
			_delay_ms(10);

			PORTA = 0b01000010;		//1-zeiliges Display
			PORTA = 0b00000010;
			PORTA = 0b01000000;
			PORTA = 0b00000000;
			_delay_ms(10);

			PORTA = 0b01000000;		//Display ein, Cursor ein, Cursor blinken
			PORTA = 0b00000000;
			PORTA = 0b01001111;
			PORTA = 0b00001111;
			_delay_ms(10);

			PORTA = 0b01000000;		//Display Löschen, Cursor auf 1. Spalte, 1. Zeile
			PORTA = 0b00000000;
			PORTA = 0b01000001;
			PORTA = 0b00000001;
			_delay_ms(10);

			disp_on=1;
		}  

		PORTA = 0b01000000;		//Cursor Auto-Increment
		PORTA = 0b00000000;
		PORTA = 0b01000110;
		PORTA = 0b00000110;
		_delay_ms(10);	*/
	}	
}

Gruß
Steffen
 
Hallo Steffen,

ich habe mir die Initialisierung jetzt nicht genau angesehen. Hast du "disp_on" vor der while-Schleife initialisiert? Wenn nicht, dann wird eventuell der Bereich innerhalb der if-Schleife nicht aufgerufen.

Ich würde die ganze Initialisierung in eine Routine (InitDisplay) verpacken und nach der Initialisierung des DDRA Registers aufrufen, dann brauchst du "disp_on" nicht.

Gruß,
Dirk
 
Hallo Dirk,

disp_on wird vor der Schleife noch initialisiert. Und er ruft die Schleife dann auch genau einmal auf. Hab ich mittels Led's überprüft.

Gruß
Steffen
 
Hallo Steffan,

ich habe mal im Datenblatt des Displays nachgesehen, also nach meiner Meinung stimmt die Initialisierung. Die Delays werden sicher auch stimmen,das habe ich aber nicht nachgeprüft.

Was mir nicht ganz klar ist, warum du EntryModeSet in der while-Schleife permanent beschreibst, das gehört normalerweise ebenfalls in die Initialisierung. Ich weiß nicht, wie sich das Display hier verhält, möglich dass beim Übertragen von CursorAutoIncrement der Blinktimer initialisiert wird und dass du dadurch eventuell nichts blinken siehst.

Ansonsten ... vielleicht überträgst du zu schnell (Leitungslänge), Takte testweise den Mikrocontroller einfach langsamer.

Gruß,
Dirk
 
Also hab Takt testweise runtergeschraubt, hat aber nicht gewünschten Erfolg gebracht. Hab mal etwas umgebaut und das Display jetzt im 8-Bit Modus angesteuert, und siehe da es funktioniert. Ich vermute mal, dass es am enable Befehl liegt. Den habe ich jetzt an einem anderen Port, so dass jetzt bei Änderung des Enable-Zustandes weiterhin die Daten an PortA anliegt und nicht neugeschrieben werden.
 
Hi Twarx,

ich tippe mal drauf das dem Display das Timing im 4Bit-Modus einfach zu
rasant war. Wenn du die Portausgaben einfach nur hintereinander packst,
dann ist der Atmel für das Display wohl etwas schnell. Nach dem Enable-Puls
müssen die Daten normalerweise noch ein wenig am Bus anliegen. Hast du dir
das Timing im Datenblatt mal angesehen ?

e404-n.gif

Datenblatt für alle Textdisplays der BlueLine (pdf, 803kB)

Auf Seite 4 ist das Timing zu sehen. Das muß eingehalten werden. Vor allem
tH, PWEH, tCYCE.
Rechne dir mal aus wie lang deine Befehlsausführung mit deinem Quarz beim
Atmel dauert und wie schnell die Ausgaben am Port hintereinander sind. Dann
sieh dir mal das benötigte Timing am LCD-Bus an und ob das zusammen paßt.
Ich schätze mal das da irgendwas im 4Bit-Modus nicht zusammen gepaßt
hat.

Die Umschaltsequenz auf 4Bit-Betrieb ist bei manchen Displays auch etwas
zickig. Das muß man bei manchen LCDs etwas tricksen. Schau dir mal im
Internet ein paar Beispiele von anderen ann. Sprache ist jetzt egal. Nur die
Abfolge der Steuerbefehle auf dem Daten-Bus ist wichtig.

Gruß
Dino
 
An der Stelle mal nen kleines Update. Hab anstelle des Atmega8515 einen Atmega32 gesetzt (weil ich den eh fürs Gesamtprojekt nutzen will) und seitdem funktioniert auch der 4-Bit-Modus ohne Zicken. Eine Erklärung hab ich dafür nicht parat, ich vermute lediglich, dass es mit den schon erwähnten Zeitabläufen zu tun hat.

Gruß
Steffen
 
Hi Steffen,

Hab anstelle des Atmega8515 einen Atmega32 gesetzt (weil ich den eh fürs Gesamtprojekt nutzen will) und seitdem funktioniert auch der 4-Bit-Modus ohne Zicken.
Das ist doch was erfreuliches :D

Eine Erklärung hab ich dafür nicht parat, ich vermute lediglich, dass es mit den schon erwähnten Zeitabläufen zu tun hat.
Hab ich auch keine Erklärung dafür. Außer evtl es war doch nen Fehler in der
Verkabelung oder der interne Takt ist anders (wenn du keinen Quarz verwendet
hast) => das wäre dann Timing :rolleyes:

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)