Forum: Mikrocontroller und Digitale Elektronik GLCD mit NT7534 initialisieren


von Jepp T. (jepp)


Lesenswert?

Hallo Allerseits,

hab einen kleines Projekt gestartet bestehend aus ein Demo Board 
angebunden an einem Grafischen Display. Das Demo Board(SmartRF 04) ist 
von Chipcon(jetzt TI), die ist bestückt mit einem cc2510 MCU, dieser 
kommuniziert über SPI mit einem GLCD. Als Treiner dient ein NT7534.

In den Foren ware ich fündig gewesen. GLCD Treiber wie die von ST sind 
weit verbreitet relativ zu Novatek, sind aber weitestenhend kompatible.

Die SPI Anbindung funktioniert einwandfrei, was mein Logic analyser es 
auch zeigt. Die Initialisierungsroutine zum Display steht im folgenden 
Quellcode:
1
#include <hal_types.h>
2
#include <hal_defs.h>
3
#include <hal_cc8051.h>
4
#include <ioCCxx10_bitdef.h>
5
#include <ioCC2510.h>
6
#include "SpiToNovatek.h"
7
8
#define SI  P1_6
9
#define CLK P1_5
10
#define RES  P0_0
11
#define A0 P1_3
12
#define CS  P1_4
13
#define LOW 0
14
#define HIGH 1
15
16
void SpiWriteData(uint8 Data){
17
  A0 = HIGH;
18
  asm("NOP");
19
  CS = LOW;
20
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");
21
  U1DBUF = Data;
22
  while(!(U1CSR & U1CSR_TX_BYTE));
23
  U1CSR &= ~U1CSR_TX_BYTE;
24
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");
25
  CS = HIGH;
26
  A0 = LOW;
27
  }
28
29
  void SpiWriteCmd(uint8 cmd){
30
  A0 = LOW;
31
  asm("NOP");
32
  CS = LOW;
33
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");
34
  U1DBUF = cmd;
35
  while(!(U1CSR & U1CSR_TX_BYTE));
36
  U1CSR &= ~U1CSR_TX_BYTE;
37
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");
38
  A0 = HIGH;
39
  CS = HIGH;
40
 }
41
42
void delay(void){
43
  for (unsigned int i=0; i<10000; i++)
44
    {
45
      asm("NOP");
46
    }
47
}
48
49
void Init_LCD(void){
50
  RES = LOW;
51
  delay();                // delay min 20us
52
  RES = HIGH;
53
  asm("NOP");asm("NOP"); // delay Max 1us
54
  CS = LOW;
55
  SpiWriteCmd(0xA2); // 11 - Set bias 1/9 (Duty 1/65)
56
  SpiWriteCmd(0xA1); // 8 - ADC reverse
57
  SpiWriteCmd(0xC0); // 15 - Normal COM0~COM63
58
  SpiWriteCmd(0x2F); // Booster, Regulator and Follower on
59
  SpiWriteCmd(0x00);
60
  SpiWriteCmd(0x27); // 17 - Contrast set  
61
  SpiWriteCmd(0x81); // 18 - xxx 
62
  SpiWriteCmd(0xA7); // A6 Display normal // A7 invertiert
63
  SpiWriteCmd(0xA5); // All point are ON
64
  SpiWriteCmd(0x40); // Display start line (Start line 0)
65
  SpiWriteCmd(0xAF); // Display on
66
}
67
68
void SpiInit(void){
69
SLEEP &= ~SLEEP_OSC_PD;
70
while( !(SLEEP & SLEEP_XOSC_S) );
71
CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
72
while (CLKCON & CLKCON_OSC);
73
SLEEP |= SLEEP_OSC_PD;
74
// Master Mode
75
PERCFG |= 0x02;           // PERCFG.U1CFG = 1
76
P1SEL |= BIT6 | BIT5;     // SI and clk are peripherals
77
P1SEL &= ~(BIT4 | BIT3);  // CS and Res are set as GPIO
78
P1DIR |= BIT4 | BIT3;     // output
79
P0SEL |= ~BIT0;           // A0 is as GPIO
80
P0DIR |= BIT0;            // output
81
A0 = HIGH;
82
RES = HIGH;
83
CS = HIGH;
84
85
U1BAUD = 0x00; // BAUD_M = 0
86
U1GCR |= 0x11; // BAUD_E = 17
87
U1CSR &= ~0xA0;
88
U1GCR &= ~0x80; // SPI CPOL
89
U1GCR &= ~0x40; // SPI CPHA
90
U1GCR |= 0x20; //  SPI ORDER
91
}
92
93
int main(void)
94
{
95
  SpiInit();
96
  Init_LCD();
97
return 0;
98
}

Bis jetzt konnte ich am Display nichts angezeigt, auch die Invertierung 
mittles
1
0xA7
 hat nichts gewirkt. Villeicht habe ich doch was übersehen!!

Für euren Feedbak freue ich mich ;)

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.