Forum: Mikrocontroller und Digitale Elektronik Ansteuerung LCD ILI9341


von H. D. (lactobacillus)


Lesenswert?

Hallo,
ich möchten ein ILI934-Display 
(http://www.elecfreaks.com/wiki/index.php?title=2.2S%22_TFT_LCD:_TFT01-2.2S) 
mit einem MSP430G2553 ansteuern. Hier mein Code bisher:
1
#include  <msp430g2553.h>
2
3
void main(void) {
4
    WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
5
    BCSCTL1 = CALBC1_1MHZ; // Set range
6
    DCOCTL = CALDCO_1MHZ;
7
    BCSCTL3 = LFXT1S_2;
8
    BCSCTL2 = 0;
9
10
    //Port1(ILI9341)
11
    P1DIR = BIT0;
12
    P1OUT = 0;
13
    P1SEL = BIT1 + BIT2 + BIT4;
14
    P1SEL2 = BIT1 + BIT2 + BIT4;
15
16
    UCA0CTL0 |= UCMSB + UCMST + UCMODE1; // 4-pin, 8-bit SPI master
17
    UCA0CTL1 |= UCSSEL_1; // SMCLK
18
    UCA0BR0 = 0; //
19
    UCA0BR1 = 0; //
20
    UCA0CTL1 &= ~UCSWRST;
21
22
    _delay_cycles(500000);
23
    UCA0TXBUF = 0x11;//Sleep Out
24
    _delay_cycles(500000);
25
    UCA0TXBUF = 0x29;//Display ON
26
    _delay_cycles(500000);
27
    UCA0TXBUF = 0x21;//Display Inversion ON
28
    _delay_cycles(500000);
29
    UCA0TXBUF = 0x04;//Read display identification information
30
    _delay_cycles(500000);
31
    unsigned int a = UCA0RXBUF;
32
}


Der Plan war, dass sich das Display verfinstert durch die Inversion des 
selbigen. Leider passiert nichts. Die Display Identifikation spuckt auch 
nichts aus. Hat jemand einen Tipp für mich?

von leluno (Gast)


Lesenswert?

H. D. schrieb:
> UCA0TXBUF = 0x11;//Sleep Out
>     _delay_cycles(500000);

Für eine spi-steuerung scheint das Beschreiben eines buffers ein bischen 
kurz zu sein. Wo bleibt das CS Signal an den slave?

Beim ili9320 werden Register ausgewählt und mit Werten gefüllt. Das sind 
immer 3bytes. wird beim 9420 auch nicht viel anders sein. Du hast nur 1 
byte. Kann so eigentlich nicht stimmen.

Versuch mal das ganze als software-spi aufzubauen. Wenn das funktioniert 
kannst du auf dem msp-spezifischen hardware-spi umstellen.

von H. D. (lactobacillus)


Lesenswert?

leluno schrieb:
> Für eine spi-steuerung scheint das Beschreiben eines buffers ein bischen
> kurz zu sein. Wo bleibt das CS Signal an den slave?

CS ist habe ich an GND gekettet.

leluno schrieb:
> Beim ili9320 werden Register ausgewählt und mit Werten gefüllt. Das sind
> immer 3bytes. wird beim 9420 auch nicht viel anders sein. Du hast nur 1
> byte. Kann so eigentlich nicht stimmen.

Die verwendeten Commands scheinen lauf Datasheet 
(http://www.orientdisplay.com/pdf/ILI9341.pdf) nur ein byte lang zu 
sein.

leluno schrieb:
> Versuch mal das ganze als software-spi aufzubauen. Wenn das funktioniert
> kannst du auf dem msp-spezifischen hardware-spi umstellen.

Ich ich hatte gehofft, dass Hardware-SPI besser geeignet ist für den 
Anfang, da weniger fehleranfällig.

von leluno (Gast)


Lesenswert?

H. D. schrieb:
> Die verwendeten Commands scheinen lauf Datasheet
> (http://www.orientdisplay.com/pdf/ILI9341.pdf) nur ein byte lang zu
> sein.

auf Seite 64 ist der Aufbau eines spi-Befehls dargestellt. Das sind 
mehrere Bytes, eingeleitet durch den Wechsel von cs  von high auf low.


>CS ist habe ich an GND gekettet.
Das ist dann aber kein spi mehr.

von H. D. (lactobacillus)


Lesenswert?

Neuer Versuch. Keine Wirkung :-(
1
#include  <msp430g2553.h>
2
3
#define MISO BIT1
4
#define SCK  BIT4
5
#define MOSI BIT2
6
#define DCX  BIT0
7
#define CS   BIT3
8
#define RST  BIT5
9
10
11
void main(void) {
12
    WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
13
    BCSCTL1 = CALBC1_1MHZ; // Set range
14
    DCOCTL = CALDCO_1MHZ;
15
    BCSCTL3 = LFXT1S_2;
16
    BCSCTL2 = 0;
17
18
    //Port1(ILI9341)
19
    P1DIR = DCX + CS + RST;
20
    P1OUT = CS;
21
    P1SEL = MISO + SCK + MOSI;
22
    P1SEL2 = MISO + SCK + MOSI;
23
24
25
    UCA0CTL0 = UCMSB + UCMST + UCMODE1; // 4-pin, 8-bit SPI master
26
    UCA0CTL1 = UCSSEL_1; // SMCLK
27
    UCA0BR0 = 0; //
28
    UCA0BR1 = 0; //
29
    UCA0CTL1 &= ~UCSWRST;
30
31
    P1OUT = CS + RST;
32
    _delay_cycles(500000);
33
    P1OUT = RST;
34
35
    _delay_cycles(500000);
36
    UCA0TXBUF = 0x11;
37
    _delay_cycles(500000);
38
    UCA0TXBUF = 0x29;
39
    _delay_cycles(500000);
40
    UCA0TXBUF = 0x21;
41
    _delay_cycles(500000);
42
    UCA0TXBUF = 0x04;
43
    _delay_cycles(500000);
44
    unsigned int a = UCA0RXBUF;
45
}

von leluno (Gast)


Lesenswert?

Das kann so nicht gehen, weil du die Konventionen über den spi- 
Datenaustausch – Seite 64 des manuals – nicht einhältst.

Du müsstest dir zunächst grundsätzliche Kenntnisse über den 
Datenaustausch per spi verschaffen

von H. D. (lactobacillus)


Lesenswert?

leluno schrieb:
> Du müsstest dir zunächst grundsätzliche Kenntnisse über den
> Datenaustausch per spi verschaffen

Naja, das ist der Sinn dessen, das ich hier mache. Das Problem ist nur, 
dass ich nicht damit rumprobieren kann, solange nichts geht, weil ich 
keine Effekte sehe.

leluno schrieb:
> Das kann so nicht gehen, weil du die Konventionen über den spi-
> Datenaustausch – Seite 64 des manuals – nicht einhältst.

Ok, streichen wir einfach den letzten Befehl. Dann stehen da nur 3 
Befehle, die keine Daten anfordern, folglich sollte es auch keine 
Antwort geben, richtig?


Noch einmal zu dem CS: Ich dachte, dass das nur auswählt welcher Slave 
verwendet wird, weshalb ich davon ausgegangen war, dass ich ihn einfach 
immer aktivieren kann. Ist es stattdessen richtig, dass CS den Slave 
auswählt und ihm den Startimpuls gibt, Daten zu empfangen/senden?

Wie kann das dann mit dem Hardware-SPI überhaupt funktionieren, wenn CS 
nicht daran gekoppelt ist. Dann stimmt doch das Timing gar nicht.


Lese ich aus der Abbildung richtig, dass D/CX bei Befehlen dauerhaft 0 
sein darf? Bzw. nur die D/CX Einstellung beim übertragen des letzen Bits 
von Interesse ist?

von leluno (Gast)


Lesenswert?

H. D. schrieb:
> Lese ich aus der Abbildung richtig, dass D/CX bei Befehlen dauerhaft 0
> sein darf?
nein
Bzw. nur die D/CX Einstellung beim übertragen des letzen Bits
> von Interesse ist?
ja

auf dem von dir angegebenen link
(http://www.elecfreaks.com/wiki/index.php?title=2.2...)
ist ein verstädlicher code mit sw-spi abgedruckt. Nimm diesen Code und 
versuch ihn nachzuvollziehen bzw. abzuarbeiten. Dann hast du eine 
Chance, dein lcd zum laufen zu bringen.

Für eine eigene Entwicklung fehlen dir - mir auch- die Grundlagen.

von H. D. (lactobacillus)


Lesenswert?

Ich hab jetzt mal in den sauren Apfel gebissen und aus dem Code den 
Arduino-Müll rausgeworfen. Hier der neue Code:
1
#include <msp430g2553.h>
2
3
#define LCD_WR   BIT4   //SCL
4
#define LCD_MOSI BIT2   //SDA
5
#define LCD_DC   BIT0   //A0
6
#define LCD_REST BIT5   //RESET
7
#define LCD_CS   BIT3   //CSE
8
9
/*#define MISO BIT1*/
10
//#define SCK  BIT4
11
//#define MOSI BIT2
12
//#define DCX  BIT0
13
//#define CS   BIT3
14
//#define RST  BIT5
15
16
void LCD_Writ_Bus(char data)
17
{
18
  P1OUT &= ~LCD_CS;
19
  unsigned char c = 0;
20
  for (c=0; c<8; c++)
21
  {
22
  if (data & 0x80)
23
    P1OUT |= LCD_MOSI;
24
  else
25
    P1OUT &= ~LCD_MOSI;
26
  data = data<<1;
27
  P1OUT &= ~LCD_WR;
28
  asm ("nop");
29
  P1OUT |= LCD_WR;
30
  }
31
  P1OUT |= LCD_CS;
32
}
33
34
void LCD_Write_COM(char VL)
35
{
36
  P1OUT &= ~LCD_DC;
37
  LCD_Writ_Bus(VL);
38
}
39
40
void LCD_Write_DATA(char VL)
41
{
42
  P1OUT |= LCD_DC;
43
  LCD_Writ_Bus(VL);
44
}
45
46
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
47
{
48
   LCD_Write_COM(0x2a);
49
   LCD_Write_DATA(x1>>8);
50
   LCD_Write_DATA(x1);
51
   LCD_Write_DATA(x2>>8);
52
   LCD_Write_DATA(x2);
53
54
   LCD_Write_COM(0x2b);
55
   LCD_Write_DATA(y1>>8);
56
   LCD_Write_DATA(y1);
57
   LCD_Write_DATA(y2>>8);
58
   LCD_Write_DATA(y2);
59
60
   LCD_Write_COM(0x2C);
61
}
62
63
void LCD_Init(void)
64
{
65
66
67
  P1OUT &= ~LCD_REST;
68
  _delay_cycles(10000);
69
  P1OUT |= LCD_REST;
70
71
        LCD_Write_COM(0xCB);//Power control A
72
        LCD_Write_DATA(0x39);
73
        LCD_Write_DATA(0x2C);
74
        LCD_Write_DATA(0x00);
75
        LCD_Write_DATA(0x34);
76
        LCD_Write_DATA(0x02);
77
78
        LCD_Write_COM(0xCF);//Power control B
79
        LCD_Write_DATA(0x00);
80
        LCD_Write_DATA(0XC1);
81
        LCD_Write_DATA(0X30);
82
83
        LCD_Write_COM(0xE8);//Driver timing control A
84
        LCD_Write_DATA(0x85);
85
        LCD_Write_DATA(0x00);
86
        LCD_Write_DATA(0x78);
87
88
        LCD_Write_COM(0xEA);//Driver timing control B
89
        LCD_Write_DATA(0x00);
90
        LCD_Write_DATA(0x00);
91
92
        LCD_Write_COM(0xED);//Power on sequence control
93
        LCD_Write_DATA(0x64);
94
        LCD_Write_DATA(0x03);
95
        LCD_Write_DATA(0X12);
96
        LCD_Write_DATA(0X81);
97
98
        LCD_Write_COM(0xF7);//Enable 3G
99
        LCD_Write_DATA(0x20);
100
101
        LCD_Write_COM(0xC0);    //Power control
102
        LCD_Write_DATA(0x23);   //VRH[5:0]
103
104
        LCD_Write_COM(0xC1);    //Power control
105
        LCD_Write_DATA(0x10);   //SAP[2:0];BT[3:0]
106
107
        LCD_Write_COM(0xC5);    //VCM control
108
        LCD_Write_DATA(0x3e);   //Contrast
109
        LCD_Write_DATA(0x28);
110
111
        LCD_Write_COM(0xC7);    //VCM control2
112
        LCD_Write_DATA(0x86);   //--
113
114
        LCD_Write_COM(0x36);    // Memory Access Control
115
        LCD_Write_DATA(0x48);   //C8
116
117
        LCD_Write_COM(0x3A);//COLMOD: Pixel Format Set
118
        LCD_Write_DATA(0x55);
119
120
        LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors)
121
        LCD_Write_DATA(0x00);
122
        LCD_Write_DATA(0x18);
123
124
        LCD_Write_COM(0xB6);    // Display Function Control
125
        LCD_Write_DATA(0x08);
126
        LCD_Write_DATA(0x82);
127
        LCD_Write_DATA(0x27);
128
129
        LCD_Write_COM(0x11);    //Exit Sleep
130
        _delay_cycles(120000);
131
132
        LCD_Write_COM(0x29);    //Display on
133
        LCD_Write_COM(0x2c);
134
}
135
136
void Pant(char VL)
137
{
138
  int i,j;
139
  Address_set(0,0,240,320);
140
  for(i=0;i<320;i++)
141
  {
142
    for (j=0;j<480;j++)
143
    {
144
      LCD_Write_DATA(VL);
145
    }
146
  }
147
}
148
149
void setup()
150
{
151
  P1DIR = BIT0 + BIT2 + BIT3 + BIT4 + BIT5;
152
  LCD_Init();
153
}
154
155
void loop()
156
{
157
  Pant(0xFF);
158
  Pant(0xF0);
159
  Pant(0xE0);
160
  Pant(0x05);
161
  Pant(0x1F);
162
  Pant(0x00);
163
}
164
165
void main(void){
166
  WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
167
  BCSCTL1 = CALBC1_1MHZ; // Set range
168
  DCOCTL = CALDCO_1MHZ;
169
  BCSCTL3 = LFXT1S_2;
170
  BCSCTL2 = 0;
171
  
172
  setup();
173
174
  for(;;){
175
    loop();
176
    /*LCD_Write_COM(0x21);
177
    _delay_cycles(500000);
178
    LCD_Write_COM(0x20);*/
179
    //_delay_cycles(500000);
180
  }
181
}


Funktioniert soweit mit der Demo "loop".


leluno schrieb:
> H. D. schrieb:
>> Lese ich aus der Abbildung richtig, dass D/CX bei Befehlen dauerhaft 0
>> sein darf?
> nein
>> Bzw. nur die D/CX Einstellung beim übertragen des letzen Bits
>> von Interesse ist?
> ja
Hm, aus dem Code geht hervor, dass D/CX immer 0 sein darf bei Befehlen. 
Funktioniert auch.

Dieser Code lässt MISO komplett aus. Wird er nur ignoriert, da nichts 
gelesen werden soll?


Mein nächster Schritt wird wohl die Umstellung auf Hardware-SPI sein. 
Irgendwie muss das doch gehen!

von leluno (Gast)


Lesenswert?

H. D. schrieb:
> Funktioniert auch.


Gratulation, das ist doch ein toller ERfolg, habe ich so schnell nicht 
erwartet.

> Hm, aus dem Code geht hervor, dass D/CX immer 0 sein darf bei Befehlen.
Nach dem manual gibt es einen 3line(ohne dcx) und einen 4line modus (mit 
dcx). 4line ist wahrscheinlich schneller. Sonst hätten die das nicht 
gemacht.

Der umstieg auf hw ist so schwierig nicht. Du hast schon die richtige 
Frage gestellt.
>...hardware-SPI überhaupt funktionieren, wenn CS
nicht daran gekoppelt ist. Dann stimmt doch das Timing gar nicht.

Normalerweise macht man das timing mit einer Warteschleife. musst du dir 
in der msp dokumentation anschauen

von H. D. (lactobacillus)


Lesenswert?

leluno schrieb:
>> Hm, aus dem Code geht hervor, dass D/CX immer 0 sein darf bei Befehlen.
> Nach dem manual gibt es einen 3line(ohne dcx) und einen 4line modus (mit
> dcx). 4line ist wahrscheinlich schneller. Sonst hätten die das nicht
> gemacht.

Ich muss sowieso 4-wire nehmen.
1. Es ist fest so eingestellt bei dem Display.
2. Der MSP430 kann nur 7- oder 8-Bit-SPI

von H. D. (lactobacillus)


Lesenswert?

Und es klappt nicht ...
1
#include  <msp430g2553.h>
2
3
#define LCD_MISO BIT1
4
#define LCD_CLK  BIT4
5
#define LCD_MOSI BIT2
6
#define LCD_DC   BIT0
7
#define LCD_CS   BIT3
8
#define LCD_REST BIT5
9
10
11
void LCD_Writ_Bus(char data)
12
{
13
  P1OUT &= ~LCD_CS;
14
  UCA0TXBUF = data;
15
  while(UCA0TXIFG & UC0IFG){
16
    _delay_cycles(120000);
17
  }
18
  _delay_cycles(120000);
19
  P1OUT |= LCD_CS;
20
}
21
22
void LCD_Write_COM(char VL)
23
{
24
  P1OUT &= ~LCD_DC;
25
  LCD_Writ_Bus(VL);
26
}
27
28
void LCD_Write_DATA(char VL)
29
{
30
  P1OUT |= LCD_DC;
31
  LCD_Writ_Bus(VL);
32
}
33
34
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
35
{
36
   LCD_Write_COM(0x2a);
37
   LCD_Write_DATA(x1>>8);
38
   LCD_Write_DATA(x1);
39
   LCD_Write_DATA(x2>>8);
40
   LCD_Write_DATA(x2);
41
42
   LCD_Write_COM(0x2b);
43
   LCD_Write_DATA(y1>>8);
44
   LCD_Write_DATA(y1);
45
   LCD_Write_DATA(y2>>8);
46
   LCD_Write_DATA(y2);
47
48
   LCD_Write_COM(0x2C);
49
}
50
51
void LCD_Init(void)
52
{
53
54
55
  P1OUT &= ~LCD_REST;
56
  _delay_cycles(120000);
57
  P1OUT |= LCD_REST;
58
59
        LCD_Write_COM(0xCB);//Power control A
60
        LCD_Write_DATA(0x39);
61
        LCD_Write_DATA(0x2C);
62
        LCD_Write_DATA(0x00);
63
        LCD_Write_DATA(0x34);
64
        LCD_Write_DATA(0x02);
65
66
        LCD_Write_COM(0xCF);//Power control B
67
        LCD_Write_DATA(0x00);
68
        LCD_Write_DATA(0XC1);
69
        LCD_Write_DATA(0X30);
70
71
        LCD_Write_COM(0xE8);//Driver timing control A
72
        LCD_Write_DATA(0x85);
73
        LCD_Write_DATA(0x00);
74
        LCD_Write_DATA(0x78);
75
76
        LCD_Write_COM(0xEA);//Driver timing control B
77
        LCD_Write_DATA(0x00);
78
        LCD_Write_DATA(0x00);
79
80
        LCD_Write_COM(0xED);//Power on sequence control
81
        LCD_Write_DATA(0x64);
82
        LCD_Write_DATA(0x03);
83
        LCD_Write_DATA(0X12);
84
        LCD_Write_DATA(0X81);
85
86
        LCD_Write_COM(0xF7);//Enable 3G
87
        LCD_Write_DATA(0x20);
88
89
        LCD_Write_COM(0xC0);    //Power control
90
        LCD_Write_DATA(0x23);   //VRH[5:0]
91
92
        LCD_Write_COM(0xC1);    //Power control
93
        LCD_Write_DATA(0x10);   //SAP[2:0];BT[3:0]
94
95
        LCD_Write_COM(0xC5);    //VCM control
96
        LCD_Write_DATA(0x3e);   //Contrast
97
        LCD_Write_DATA(0x28);
98
99
        LCD_Write_COM(0xC7);    //VCM control2
100
        LCD_Write_DATA(0x86);   //--
101
102
        LCD_Write_COM(0x36);    // Memory Access Control
103
        LCD_Write_DATA(0x48);   //C8
104
105
        LCD_Write_COM(0x3A);//COLMOD: Pixel Format Set
106
        LCD_Write_DATA(0x55);
107
108
        LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors)
109
        LCD_Write_DATA(0x00);
110
        LCD_Write_DATA(0x18);
111
112
        LCD_Write_COM(0xB6);    // Display Function Control
113
        LCD_Write_DATA(0x08);
114
        LCD_Write_DATA(0x82);
115
        LCD_Write_DATA(0x27);
116
117
        LCD_Write_COM(0x11);    //Exit Sleep
118
        _delay_cycles(120000);
119
120
        LCD_Write_COM(0x29);    //Display on
121
        LCD_Write_COM(0x2c);
122
}
123
124
void Pant(char VL)
125
{
126
  int i,j;
127
  Address_set(0,0,240,320);
128
  for(i=0;i<320;i++)
129
  {
130
    for (j=0;j<480;j++)
131
    {
132
      LCD_Write_DATA(VL);
133
    }
134
  }
135
}
136
137
void loop()
138
{
139
  Pant(0xFF);
140
  Pant(0xF0);
141
  Pant(0xE0);
142
  Pant(0x05);
143
  Pant(0x1F);
144
  Pant(0x00);
145
}
146
147
void main(void) {
148
    WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
149
    BCSCTL1 = CALBC1_12MHZ; // Set range
150
    DCOCTL = CALDCO_12MHZ;
151
    BCSCTL2 = 0;
152
153
    //Port1(ILI9341)
154
    P1DIR = LCD_DC + LCD_CS + LCD_REST;
155
    P1OUT = LCD_CS;
156
    P1SEL = LCD_MISO + LCD_CLK + LCD_MOSI;
157
    P1SEL2 = LCD_MISO + LCD_CLK + LCD_MOSI;
158
159
160
    UCA0CTL0 = UCMSB + UCMST + UCMODE1; // 4-pin, 8-bit SPI master
161
    UCA0CTL1 = UCSSEL_2; // SMCLK
162
    UCA0BR0 = 3; //
163
    UCA0BR1 = 0; //
164
    UCA0CTL1 &= ~UCSWRST;
165
166
    LCD_Init();
167
    loop();
168
169
}


UCA0TXBUF leert sich nicht und ich weiß nicht warum ...

: Bearbeitet durch User
von leluno (Gast)


Lesenswert?

H. D. schrieb:
> P1OUT &= ~LCD_CS;
>   UCA0TXBUF = data;
>   while(UCA0TXIFG & UC0IFG){

>     _delay_cycles(120000);

>   }
>   _delay_cycles(120000);
>   P1OUT |= LCD_CS;


das delay in der Schleife ist zumindest überflüssig

while(UCA0TXIFG & UC0IFG){;} bleibt so lange in der Schleife wie die 
Bedingung erfüllt ist.


mÜSSTE aber trotzdem funktionieren. Bei anderen Systemen muss spi erst 
initialisiert werden. Braucht man ds bei msp gar nicht?

von leluno (Gast)


Lesenswert?

unter
http://www.mikrocontroller.net/attachment/157489/main.c
ist ein hw_spi Beispiel.

Das müsste die Initialisierung sein:
  P1SEL = BIT1 + BIT2 + BIT4;
  P1SEL2 = BIT1 + BIT2 + BIT4;
  UCA0CTL1 |= UCSWRST;
  UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;  // 3-pin, 8-bit SPI 
master
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 |= 0x02;                          // /2
  UCA0BR1 = 0;                              //
  UCA0MCTL = 0;                             // No modulation
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state 
machine**
  //IE2 |= UCA0RXIE;                          // Enable USCI0 RX 
interrupt

  P1OUT |= BIT3 + BIT6;

  P1OUT &= ~BIT5;                           // Now with SPI signals 
initialized,


du musst im Handbuch nachlesen, was genau für die spi-init gemacht 
werden muss.

von Jens-Uwe (Gast)


Angehängte Dateien:

Lesenswert?

H. D. schrieb:
> void LCD_Init(void)
> {
>
>   P1OUT &= ~LCD_REST;
>   _delay_cycles(120000);
>   P1OUT |= LCD_REST;
>
>         LCD_Write_COM(0xCB);//Power control A
>         LCD_Write_DATA(0x39);
>         LCD_Write_DATA(0x2C);
Du hast zwar bei Reset aktiv eine Pause, aber danach nicht. Das Display 
braucht etwas Zeit, nachdem man den Reset deaktiviert hat.
Siehe Datenblatt, Kapitel 12.4.

Viele Grüße
Jens-Uwe

P.S.: Mein Display läuft auch ohne die vielen Registerinitialisierungen. 
Es reicht RESET, SLEEP_OUT und DISPLAY_ON.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

> Siehe Datenblatt, Kapitel 12.4.

Witzbold
auf Kapitel 12.3 (Seite 213) folgt unmittelbar 13.1 (Seite 214)

egal ob Datenblatt-Version 1.02 1.09 oder 1.11/1.13
(siehe meine Anmerkungen hier: 
Beitrag "Re: 2.2" GLCD 320x240 mit ILI9341" )

von Jens-Uwe (Gast)


Lesenswert?

Christoph Kessler (db1uq) schrieb:
> Witzbold
:-)
Freudscher Vertipper: ich meinte Kapitel 15.4
Aus den Ausführungen in Kapitel 12 werde ich auch nicht so richtig 
schlau...

Viele Grüße
Jens-Uwe

von ilitek (Gast)


Lesenswert?

Kurze Frage: Könnt ihr mir sagen wie ihr auf die LCD_init kommt? ich 
werde aus diesem datenblatt iwie nicht schlau...
danke schonmal im voraus

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.