Hallo,
Ich bin dabei ein Nokia 3310 Display anzusteuern. Funktioniert auch
mittlerweile, dass ich irgendwelche Pixel setze.
Doch jetzt habe ich den folgenden COde eingespielt und ab dem Display
CLEAR macht das DIsplay nicht weiter. ALso die init Methode wird
aufgerufen, die Kommandos werden alle gesendet(das letzte KOmmando ist
ALL ON; wird auch ausgeführt) und dann würde das CLEAR RAM kommen, doch
das funktioniert nicht. Ich sehe auf dem Display das die 1. Zeile nicht
gesetzt ist, aber sonst bleibt das display schwarz.
Hat jemand vielleicht eine Idee woran das liegen könnte??
Danke schon im Voraus!!
mfg
Hier mal der COde:
1 | #include<18F4680.h>
|
2 | #use delay (clock=20000000)
|
3 | #fuses HS, NOWDT, NOPROTECT, NOLVP
|
4 |
|
5 | #include<stdlib.h>
|
6 | #include<stdio.h>
|
7 |
|
8 | void init_spi();
|
9 | void init_lcd();
|
10 | void write_data(int8 data);
|
11 | void write_command(int8 command);
|
12 | void write_data(int8 data);
|
13 | void write_zeichen();
|
14 | void clear_ram();
|
15 | void goto_xy(int8 x, int8 y);
|
16 |
|
17 | void main (void) {
|
18 | init_spi();
|
19 | init_lcd();
|
20 |
|
21 | write_zeichen();
|
22 |
|
23 | while(true) { }
|
24 | }
|
25 |
|
26 | void init_spi() {
|
27 | setup_spi(SPI_MASTER | SPI_CLK_DIV_16);
|
28 | }
|
29 |
|
30 | void init_lcd() {
|
31 | output_high(PIN_D2); //COMMAND MODE: D/C -> 1
|
32 | output_high(PIN_D3); // SCE- Chip disabled
|
33 | delay_us(100);
|
34 |
|
35 | //Display reset
|
36 | output_high(PIN_B0); // RES
|
37 | delay_us(0.5);
|
38 | output_low(PIN_B0); // RES
|
39 | delay_ms(20);
|
40 | output_high(PIN_B0); // RES
|
41 |
|
42 | delay_us(100);
|
43 |
|
44 | write_command(0x21); // Enhanced mode
|
45 | write_command(0x90); //Vop
|
46 | write_command(0x13); //bias
|
47 | write_command(0x20); //normalmode
|
48 | write_command(0x09); //All on
|
49 |
|
50 | clear_ram(); //clear RAM
|
51 |
|
52 | write_command(0x08); // mod control blank change (all off)
|
53 | write_command(0x0c); // mod control normal change
|
54 | }
|
55 |
|
56 | void write_data(int8 data) {
|
57 | output_high(PIN_D2); //COMMAND MODE: D/C -> 1
|
58 | delay_us(100);
|
59 |
|
60 | output_low(PIN_D3); // chip enabled
|
61 | delay_us(100);
|
62 | spi_write(data);
|
63 | output_high(PIN_D3); // chip disabled
|
64 | delay_us(100);
|
65 | }
|
66 |
|
67 | void write_command(int8 command) {
|
68 | output_low(PIN_D2); //COMMAND MODE: D/C -> 0
|
69 | delay_us(100);
|
70 |
|
71 | output_low(PIN_D3); // chip enabled
|
72 | delay_us(100);
|
73 | spi_write(command);
|
74 | output_high(PIN_D3); // chip disabled
|
75 | delay_us(100);
|
76 | }
|
77 |
|
78 | void write_zeichen() {
|
79 | goto_xy(0,0);
|
80 | write_data(0xAA);
|
81 | write_data(0xFF);
|
82 | write_data(0xAA);
|
83 | write_data(0xFF);
|
84 | write_data(0xAA);
|
85 | write_data(0xFF);
|
86 | write_data(0xAA);
|
87 | }
|
88 |
|
89 | void clear_ram() {
|
90 | int8 i;
|
91 |
|
92 | goto_xy(0,0);
|
93 | for (i=504; i>0; i--) {
|
94 | write_data(0x00);
|
95 | }
|
96 | }
|
97 |
|
98 | void goto_xy(int8 x, int8 y) {
|
99 | write_command(0x40|(y&0x07)); // Y axe initialisation: 0100 0yyy
|
100 | write_command(0x80|(x&0x7f)); // X axe initialisation: 1xxx xxxx
|
101 | }
|