display gráfico ST7920, funciona no lugar do KS0108?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor marcio martins » 11 Jan 2017 14:27

Boa tarde a todos do fórum. Irei fazer uma pergunta talvez um tanto quanto idiota, mas não custa perguntar.
Se eu utilizar o display ST7920 muito usado para Arduíno, no lugar do KS0108 sem trocar programação, somente conectar os pinos, ira funcionar, alguém já tentou esta experiencia?
marcio martins
 
Mensagens: 1
Registrado em: 10 Jan 2017 14:20

Re: display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor andre_luis » 11 Jan 2017 14:40

São chipsets que trabalham diferente. Entretanto se o programa for bem feito, dividido em camadas bem distintas, em teoria bastaria substituir o driver, e mexer em algumas funções, ajustando suas entradas e saídas no máximo. No caso, acredito que deva haver algum #include com nome KS0108.c no seu diretório mas talvez encontre por aí o driver desse outro.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor Maffeis » 11 Jan 2017 17:23

Quanto a enviar dados enable read/write acredito que seja igual

oq eu sei que muda de um para o outro é que um é na horizontal os bytes e outro é na vertical.
se mandar 0xFF para os 2, um deles vai acender os primeiros 8 pixels da primeira linha no outro os primeiros 8 pixels da primeira coluna.
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor Alexandro » 23 Jan 2017 11:29

Tem um driver pra esse LCD que consome muita memoria pra aplicaçoes de baixo custo, vamos tentar resolver isso ?

Segue parte do codigo do driver:

cpp code
typedef union 
{
int16 world;
int8 nbyte[2];
} Dots;

typedef struct
{
int1 refresh;
Dots pix[YVAL][XVAL]; // Max dimensions for display (x,y) = (128,32)
} GD_RAM; // (0,0) corresponds to upper lefthand corner.

GD_RAM gdram;

void glcd_data(unsigned char x){
glcd_check_busy();
output_high(rs); // HIGH RS and LOW RW will put the lcd to
output_low(rw); // Write data register mode
output_d(x);
output_high(e);
delay_us(1);
output_low(e);
}

void glcd_update ()
{
int8 v, h;


if (gdram.refresh)
{
for (v=0; v <YVAL; v++)
{
glcd_instruction( 0x80 | v); // Set Vertical Address.
glcd_instruction( 0x80 | 0); // Set Horizontal Address.

for (h=0; h <XVAL; h++)
{
glcd_data( gdram.pix[v][h].nbyte[1]); // Write High Byte.
glcd_data( gdram.pix[v][h].nbyte[0]); // Write Low Byte.
}
}
gdram.refresh = FALSE;
}
}

void glcd_pixel(int8 x, int8 y, int1 color)
{
int8 v, h, b;
if(y>31){x += 128; y-= 32;};
v = y;
h = x/16;
b = 15 - (x%16);

if (color == ON) bit_set (gdram.pix[v][h].world, b);
else bit_clear (gdram.pix[v][h].world, b);

gdram.refresh = TRUE;
}


Essas instruçoes são as mais basicas pra escrever na tela desse display. Repare que sempre tem que usar a rotina glcd_update(); pra gravar na tela do LCD.

Veja, a variavel gdram consome 512bytes da preciosa memoria RAM do Mcu, será que poderiamos alterar isso pra bem menos ?
Avatar do usuário
Alexandro
Byte
 
Mensagens: 436
Registrado em: 23 Out 2006 16:49
Localização: São José do Rio Preto - SP e Sao Paulo-SP

Re: display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor andre_luis » 23 Jan 2017 12:27

Veja, a variavel gdram consome 512bytes da preciosa memoria RAM do Mcu, será que poderiamos alterar isso pra bem menos ?


A variável pix, se entendi bem, lhe é atribuido um valor na função glcd_pixel(), de modo que aparentemente do modo como está feito, não parece que a definindo como const resolveria.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: display gráfico ST7920, funciona no lugar do KS0108?

Mensagempor Alexandro » 23 Jan 2017 17:21

Isso, é uma funçao que preenche a variavel com 16 bits formando 2 bytes um alto e outro baixo por exigencia do LCD. Esse gdram é uma variavel pois ele é preenchido com o total de de 16bits que representam o eixo X da tela, o Y é linear.
Mas a ideia seria continuar assim conforme o datasheet porem mudar pra uma variavel instantanea. Veja o que da entender nessa rotina é que ele preenche a memoria do Mcu com todos os bits(pixel) e depois descarrega pro LCD.

O que entendi : o glcd_data() = envia os dados pro LCD, o Update() = descarrega os dados no LCD e o glcd_pixel() = monta os dados dos pixels na memoria RAM do Mcu a cada 16bits.

Mas nao sei por onde começar..
Avatar do usuário
Alexandro
Byte
 
Mensagens: 436
Registrado em: 23 Out 2006 16:49
Localização: São José do Rio Preto - SP e Sao Paulo-SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x