Witam znawców tematu!
podjąłem się jak dla mnie poważnego wyzwania uruchomienia wyświetlacza LCD
S95160 na sterowniku SSD1289Z w połączeniu z Xmegą64A3. Niestety utknąłem i dlatego piszę ten post...
jest to dla mnie początek z wyświetlaczami LCD więc nie jestem w tym temacie zbyt obeznany, mam za sobą parę dni czytania datasheeta tego sterownika ale nie rozumiem jeszcze wszystkiego.
Utknąłem na inicjalizacji. Mimo że wszystko podłączyłem Wg opisu LCD:
1、GND
2、VCC : +3 V DC power supply (Note that voltage can not be more than 3.3V)
3、CS : chip selection, effective when low
4、RS : register selectio n, data register when high, command register when low
5、WR : write
6、RD : Reading
7、RST : reset
8-15、DB15-DB8 : data line
21、DCLK : 7843 clock
22、DCS : 7843 chip selection, effective when low
23、DIN : 7843 data input
24、BUSY : 7843 busy signal output
25、DOUT : 7843 data output
26、PENIRQ : 7843 Interrupt output
27、DB7-DB0 : Data Cable
28-35、 8-bit parallel port is DB15-DB8, 16-bit parallel port is DB15-DB0. Default setting is 8-bit parallel port. If you need 16-bit parallel port, please tell us.
Jest to opisy ze strony sprzedawcy, proszę zwrócić uwagę że na końcu jest napisane że default'owo jest LCD ustawiony na 8-bit i chodzi tu o piny DB15DB8. Niestety nie zgadza się to z datasheetem sterownika SSD1289 gdzie do transmisji 8 bitowej są przypisane piny DB1-DB8. Próbowałem jednak podłączyć to w taki i taki sposób bez pozytywnych skutków. Efekt jaki mam to cały czas biały wyświetlacz...
Na elektrodzie czy to w polskim internecie nie znalazłem nic na temat sterownika SSD1289Z, czy komuś udało się go obsłużyć???? Czy ktoś jest z nim zapoznany?
Jeszcze jedno pytanie do znawców wyświetlaczy, czy inicjalizacja w ogóle wystarczy by zobaczyć jakąś różnicę na LCD, np czarne tło a nie białe? bo może to działa a potrzeba jeszcze dodać jakąś komendę?
oto mój kod C, Kod jest złożony z kawałka kodu z internetu do sterowania takim LCD z naniesionymi moimi zmianami:
Oto mój kod:
Proszę o wszelką pomoc!
podjąłem się jak dla mnie poważnego wyzwania uruchomienia wyświetlacza LCD
S95160 na sterowniku SSD1289Z w połączeniu z Xmegą64A3. Niestety utknąłem i dlatego piszę ten post...
jest to dla mnie początek z wyświetlaczami LCD więc nie jestem w tym temacie zbyt obeznany, mam za sobą parę dni czytania datasheeta tego sterownika ale nie rozumiem jeszcze wszystkiego.
Utknąłem na inicjalizacji. Mimo że wszystko podłączyłem Wg opisu LCD:
1、GND
2、VCC : +3 V DC power supply (Note that voltage can not be more than 3.3V)
3、CS : chip selection, effective when low
4、RS : register selectio n, data register when high, command register when low
5、WR : write
6、RD : Reading
7、RST : reset
8-15、DB15-DB8 : data line
21、DCLK : 7843 clock
22、DCS : 7843 chip selection, effective when low
23、DIN : 7843 data input
24、BUSY : 7843 busy signal output
25、DOUT : 7843 data output
26、PENIRQ : 7843 Interrupt output
27、DB7-DB0 : Data Cable
28-35、 8-bit parallel port is DB15-DB8, 16-bit parallel port is DB15-DB0. Default setting is 8-bit parallel port. If you need 16-bit parallel port, please tell us.
Jest to opisy ze strony sprzedawcy, proszę zwrócić uwagę że na końcu jest napisane że default'owo jest LCD ustawiony na 8-bit i chodzi tu o piny DB15DB8. Niestety nie zgadza się to z datasheetem sterownika SSD1289 gdzie do transmisji 8 bitowej są przypisane piny DB1-DB8. Próbowałem jednak podłączyć to w taki i taki sposób bez pozytywnych skutków. Efekt jaki mam to cały czas biały wyświetlacz...
Na elektrodzie czy to w polskim internecie nie znalazłem nic na temat sterownika SSD1289Z, czy komuś udało się go obsłużyć???? Czy ktoś jest z nim zapoznany?
Jeszcze jedno pytanie do znawców wyświetlaczy, czy inicjalizacja w ogóle wystarczy by zobaczyć jakąś różnicę na LCD, np czarne tło a nie białe? bo może to działa a potrzeba jeszcze dodać jakąś komendę?
oto mój kod C, Kod jest złożony z kawałka kodu z internetu do sterowania takim LCD z naniesionymi moimi zmianami:
Oto mój kod:
#include <avr/io.h>
#include <util/delay.h>
#define DATAOUT_PORT PORTB.OUT
#define DATAOUT_PIN PINB
#define DATAOUT_DDR DDRB
#define CTRLOUT_PORT PORTD.OUT
#define CTRLOUT_PIN PIND
#define CTRLOUT_DDR DDRD
#define CTRLOUT_E 5
#define CTRLOUT_RW 3
#define CTRLOUT_DC 4
#define CTRLOUT_RESET 6
/*
*********************************************************************************************************
* LOW LEVEL COMMAND WRITE TO LCD
*
* Description : This function performs low level command write to LCD
* Arguments : (uint8_t) 'cmd' is the command written to the LCD module
* Returns : none
* Notes : Hardware specific.
*********************************************************************************************************
*/
static inline void cDispWrCmd(uint8_t cmd)
{
DATAOUT_PORT = cmd;
CTRLOUT_PORT &= ~( _BV(CTRLOUT_RW) | _BV(CTRLOUT_DC));
CTRLOUT_PORT |= _BV(CTRLOUT_E);
CTRLOUT_PORT &= ~_BV(CTRLOUT_E);
}
/*
*********************************************************************************************************
* LOW LEVEL DATA WRITE TO LCD
*
* Description : This function performs low level display data write to LCD
* Arguments : (uint8_t) 'dat' is the data written to the LCD module
* Returns : none
* Notes : Hardware specific.
*********************************************************************************************************
*/
static inline void cDispWrDat(uint8_t dat)
{
DATAOUT_PORT = dat;
CTRLOUT_PORT &= ~_BV(CTRLOUT_RW);
CTRLOUT_PORT |= _BV(CTRLOUT_DC);
CTRLOUT_PORT |= _BV(CTRLOUT_E);
CTRLOUT_PORT &= ~_BV(CTRLOUT_E);
}
static inline void SetWriteDataMode( void )
{
CTRLOUT_PORT &= ~_BV(CTRLOUT_RW);
CTRLOUT_PORT |= _BV(CTRLOUT_DC);
}
static inline void WriteData( uint8_t data )
{
DATAOUT_PORT = data;
CTRLOUT_PORT |= _BV(CTRLOUT_E);
CTRLOUT_PORT &= ~_BV(CTRLOUT_E);
}
static void LCD_Init(void)
{
cDispWrCmd(0x07);
cDispWrDat(0x00);
cDispWrDat(0x33);
cDispWrCmd(0x28);
cDispWrDat(0x00);
cDispWrDat(0x06);
cDispWrCmd(0x2F);
cDispWrDat(0x12);
cDispWrDat(0xAE);
cDispWrCmd(0x00); //Start Oscillation
cDispWrDat(0x00);
cDispWrDat(0x01);
cDispWrCmd(0x03); //Power Control (1)
cDispWrDat(0xAA);
cDispWrDat(0xAC);
cDispWrCmd(0x0C); //Power Control (2)
cDispWrDat(0x00);
cDispWrDat(0x02);
cDispWrCmd(0x0D); //Power Control (3)
cDispWrDat(0x00);
cDispWrDat(0x0A);
cDispWrCmd(0x0E); //Power Control (4)
cDispWrDat(0x2C);
cDispWrDat(0x00);
cDispWrCmd(0x1E); //Power Control (5)
cDispWrDat(0x00);
cDispWrDat(0xAA);
cDispWrCmd(0x25); //Frame Freq
cDispWrDat(0x80);
cDispWrDat(0x00);
_delay_ms(15);
cDispWrCmd(0x01); //Driver Output Control (233f)
cDispWrDat(0x29);
cDispWrDat(0x3F);
cDispWrCmd(0x02); //LCD Drive AC Control
cDispWrDat(0x06);
cDispWrDat(0x00);
cDispWrCmd(0x10); //Exit Sleep Mode
cDispWrDat(0x00);
cDispWrDat(0x00);
cDispWrCmd(0x11); //Set Display color mode for 262k color ? 64k
cDispWrDat(0x48);
cDispWrDat(0x38);
_delay_ms(20);
cDispWrCmd(0x05);
cDispWrDat(0x00);
cDispWrDat(0x00);
cDispWrCmd(0x06);
cDispWrDat(0x00);
cDispWrDat(0x00);
cDispWrCmd(0x16); // Horizontal Porch
cDispWrDat(0xEF);
cDispWrDat(0x1C);
cDispWrCmd(0x17); // Vertical Porch
cDispWrDat(0x00);
cDispWrDat(0x03);
cDispWrCmd(0x07); //Display Control
cDispWrDat(0x02);
cDispWrDat(0x33);
cDispWrCmd(0x0B); // Frame Cycle Control
cDispWrDat(0x53);
cDispWrDat(0x12);
cDispWrCmd(0x0F); // Gate Scan Start position
cDispWrDat(0x00);
cDispWrDat(0x00);
cDispWrCmd(0x23);
cDispWrDat(0x00);
cDispWrDat(0x00);
cDispWrCmd(0x24);
cDispWrDat(0x00);
cDispWrDat(0x00);
_delay_ms(30); //delay 30ms
cDispWrCmd(0x44); //Horizontal RAM address position start/end setup
cDispWrDat(0xEF); //dec 239
cDispWrDat(0x00); //dec 0, i.e. horizontal ranges from 0 -> 239
//POR value is 0xEF00 anyway. This address must be set before RAM write
cDispWrCmd(0x45); //Vertical RAM address start position setting
cDispWrDat(0x00); //0x0000 = dec 0
cDispWrDat(0x00);
cDispWrCmd(0x46); //Vertical RAM address end position setting
cDispWrDat(0x01); //0x013F = dec 319
cDispWrDat(0x3F);
}
int main(void){
//----------------------------- USTAWIAMY CLOCK NA 32 MHZ!!!!
OSC.CTRL = OSC_RC32MEN_bm; //enable 32MHz oscillator
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); //wait for stability
CCP = CCP_IOREG_gc; //secured access
CLK.CTRL = 0x01; //choose this osc source as clk
//------------------------------------------------------------
/*
* Inicjalizacja portu D
* piny 6,5,4,3 - wyjścia
*/
(&PORTD)->OUT = 0x00; /* Port D jako wyjscie piny 6,5,4,3 */
(&PORTD)->DIRSET = 0x78; /* ustaw piny 6,5,4,3 jako wyjście */
/* port B cały jako wyjście szyna 8 bit! */
(&PORTB)->OUT = 0xFF; /* Port B jako wyjscie piny wszytskie */
(&PORTB)->DIRSET = 0xFF; /* ustaw piny wszytskie jako wyjście */
/* nieskończona pętla... */
/*-----------------------------------------------------------------------------*/
CTRLOUT_PORT |= _BV(CTRLOUT_RESET);
_delay_ms(20);
CTRLOUT_PORT &= ~_BV(CTRLOUT_RESET);
_delay_ms(100);
CTRLOUT_PORT |= _BV(CTRLOUT_RESET);
_delay_ms(100);
LCD_Init();
}
Proszę o wszelką pomoc!