Forum: Mikrocontroller und Digitale Elektronik LCD-MODULE DEM16217-SYH Beispiel code


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Hallo,

ich versuche gerade mit dem Evaluation board von Atmel STK500 das 
Display DEM16217-SYH (ohne Backlight) anzusteuern und ich versage 
kläglich.

Ich betreibe es im 8-bit Mode.

Das Datenblatt ist hier zu finden:
www.display-elektronik.de/DEM16217SYH-LY.PDF
(Es handelt sich hier zwar um das LCD-Modul mit Backlight, aber es deckt 
sich mit meinem, soweit ich das sagen kann.)

Ich weis nicht ob das an meiner Verdrahtung oder an meinem Code liegt.

Meine Verdrahtung:
1
L+ -> open
2
L- -> open
3
01 -> GND (ground vom STK500)
4
02 -> VTG (5V vom STK500)
5
03 -> Mittelabgriff von einem 50M Poti
6
04 -> per Hand von GND und VTG
7
05 -> GND
8
06 -> VTG
9
07 -> PORTA PIN0
10
08 -> PORTA PIN1
11
09 -> PORTA PIN2
12
10 -> PORTA PIN3
13
11 -> PORTA PIN4
14
12 -> PORTA PIN5
15
13 -> PORTA PIN6
16
14 -> PORTA PIN7

Mein C-Code:
1
/*
2
 * LCD_TestProgram.c
3
 *
4
 *  Created on: Oct 16, 2010
5
 *      Author: fabian
6
 */
7
8
#include <avr/io.h>
9
#include <util/delay.h>
10
11
int main (void)
12
{
13
  DDRA = 0xFF;  // for LCD
14
  DDRB = 0xFF;  // for LEDs
15
16
  PORTA = 0x00;
17
  PORTB = 0xFF;
18
19
  _delay_ms(1000);
20
  // Function set | 1-Line Mode | 5x7 Dots
21
  PORTA = 0x30;  //  0011|0000
22
  PORTB = ~0x30;
23
  _delay_ms(1000);
24
  // Display on | Curser on | Blink on
25
  PORTA = 0x0F;  //  0000|1111
26
  PORTB = ~0x0F;
27
  _delay_ms(1000);
28
  // Clear Display
29
  PORTA = 0x01;  //  0000|0001
30
  PORTB = ~0x01;
31
  _delay_ms(1000);
32
  // Entry Mode | Increment Mode on | Entire Shift off
33
  PORTA = 0x06;  //  0000|0110
34
  PORTB = ~0x06;
35
  _delay_ms(3000);  // change RS from GND to 5V per hand
36
  // character 'A'
37
  PORTA = 0x14;  //  0001|0100
38
  PORTB = ~0x14;
39
40
  while(1);
41
}
Es macht im wesentlichen nichts anderes als in dem Datenblatt Kapitel 
11.8 INITIALIZING BY INSTRUCTION beschrieben. Statt dem Busy-Bitflag 
warte ich einfach eine Sekunde. Kann ja später noch ergänzt werden.
Was ich aber nur feststelle, ist, wenn ich an dem Poti drehe und die 
Spannung und damit den Kontrast relativ niedrig einstelle, sehe ich in 
der oberen Reihe Blöcke, aber in der unteren nicht. Das ändert sich auch 
nicht wenn das Programm durchläuft.
Den letzt Punkt habe ich ergänzt um zu sehen ob sich etwas ändert, wenn 
ich etwas schreibe. Aber auch das änderte nichts. Ich sehe keinen 
Curser, er blinkt natürlich auch nicht, und das 'A' sehe ich auch nicht.
Ich denke der Fehler ist schon bevor ich das Display anschalte, denn 
dann müsste es sich ja verändern, denke ich mir.

Ich kann mir einfach nicht erklären, woran das liegen könnte.
Ich habe ja schon Beispielanwendungen gesehen, es scheint ja zu 
funktionieren. Aber ich habe keinen Beispielcode gefunden. Ich frage 
mich langsam ob das wirklich ein so gut gehütetes Geheimnis ist.

Wenn mir jemand Links zu einem Forum (Thread) schicken könnte, in dem 
das schon ausreichen diskutiert wurde oder einen Link zu einem Beispiel 
hätte oder natürlich den/die Fehler in meiner Anwendung findet, wäre ich 
außerordentlich dankbar.


Gruß und Danke
BrEin

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Achja, der Kontrast ist so gewählt, dass die Blöcke nur noch leicht zu 
sehen ist. Und auch sonst habe ich ihn verändert um zu vermeiden, dass 
ich die Lebenszeichen übersehe, wenn ich eine falsche Einstellung habe.

Daran wird es wohl nicht liegen.

von holger (Gast)


Lesenswert?

>Aber ich habe keinen Beispielcode gefunden.

Wenn man nicht sucht findet man auch nicht.

>Wenn mir jemand Links zu einem Forum (Thread) schicken könnte, in dem
>das schon ausreichen diskutiert wurde oder einen Link zu einem Beispiel
>hätte oder natürlich den/die Fehler in meiner Anwendung findet, wäre ich
>außerordentlich dankbar.

Du musst eigentlich nur LCD hier in der Suche eingeben.
Dann findest du 1Mio Posts. Und schliess deine Steuerleitungen
an. Sonst wird das nix.

von spess53 (Gast)


Lesenswert?

Hi

>04 -> per Hand von GND und VTG

Was soll das heissen?

>05 -> GND
>06 -> VTG

Das sind normalerweise R/W und E. R/W kann fest auf GND gelegt werden. E 
dient der Übernahme der Datenleitungen durch das Display und muss zu 
bestimmten Zeiten den Pegel wechseln. Also grob gesagt weder deine 
Hardware noch die Software sind geeignet ein Display anzusteuern. Sieh 
dich hier mal um:

www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

MfG Spess

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Erstmal vielen Dank für eure schnelle Hilfe!

Werde es gleich durcharbeiten! Danke!

von Name (Gast)


Lesenswert?

R/S muss auch an das MCU angeschlossen sein...

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

spess53 schrieb:
>>04 -> per Hand von GND und VTG
>
> Was soll das heissen?

Name schrieb:
> R/S muss auch an das MCU angeschlossen sein...

R/S setzte ich mit Hand.
Da ich einige Monate zuvor schon versuche das LCD anzusteuern und im 
4bit-Mode scheiterte, wollte ich es jetzt erstmal mit dem 8bit-Mode 
versuchen und die eine Steuerleitung per Hand setzen.

Als ich das LCD-Tutorial sah, ließ ich es bleiben und versuchte es 
wieder mit der 4bit-Variante.
Und vielen Dank für den Tipp mit dem Enable-Pin. Ich dachte der Würde 
das Display halt eben nur enablen und nicht dass er für die Übernahme 
verantwortlich sei.

Leider scheiterte auch das.
Auch hier wieder nur der obere Balken und keine Reaktion.

Ich nutze die lcd-routines library und probierte das Beispiel 1 aus.
Ich habe die Verdrahtung so durchgeführt wie beschrieben und auch 2x 
geprüft.

Leider war alles bisher vergebens. Auch die Werte für die Zeitenmacros 
habe ich angehoben. Hat auch nichts geholfen.

Hat noch jemand eine zündende Idee?

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Könnte es sein, dass ich mit meinen früheren Versuchen das LCD zerstört 
habe???

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Super Leute. Es funktioniert!

Ich konnte das Basteln heute nicht sein lassen und habe es einfach 
nochmal ausprobiert. Und et voilà es funktioniert. Ich habe keine 
Ahnung, warum das nicht schon gestern Abend so funktionierte, ich hab ja 
schließlich nichts verändert. Vielleicht habe ich beim Basteln einen 
Fehler gemacht, dass der Controller nicht so gut verkraftet hat und nun 
hat er sich über Nacht erholt.

holger schrieb:
>>Aber ich habe keinen Beispielcode gefunden.
>
> Wenn man nicht sucht findet man auch nicht.
>
>>Wenn mir jemand Links zu einem Forum (Thread) schicken könnte, in dem
>>das schon ausreichen diskutiert wurde oder einen Link zu einem Beispiel
>>hätte oder natürlich den/die Fehler in meiner Anwendung findet, wäre ich
>>außerordentlich dankbar.
>
> Du musst eigentlich nur LCD hier in der Suche eingeben.
> Dann findest du 1Mio Posts. Und schliess deine Steuerleitungen
> an. Sonst wird das nix.

Naja, wenn man nach "DEM 16217 beispiel code" oder ähnliches sucht, 
findet man wirklich nichts was mir geholfen hätte. Jetzt aber schon, da 
dieser Thread (momentan) nun der oberste Eintrag ist. :D

Vielen Dank Leute!

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.