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