Página 1 de 1
PIC e GLCD - fazendo linhas

Enviado:
23 Set 2013 09:15
por Alexandro
O compilador é o CCSC com a biblioteca do GLCD (64x128 e 80x160).
Eu não sei porque as linhas feitas nos LCD graficos com processadores diferentes falham quando em tamanhos acima de 100 pixels. elas não passam desse tamanho, alguem ja teve esse problema ?
Ja olhei o codigo da biblioteca do GLCD mas não tem o porque disso.
Re: PIC e GLCD - fazendo linhas

Enviado:
23 Set 2013 11:24
por tcpipchip
explique melhor para turma...
Re: PIC e GLCD - fazendo linhas

Enviado:
25 Set 2013 16:03
por ze2
por coincidencia estive fazendo (com relativo sucesso) um driver pra um glcd em c puro. o módulo que usei tem 2 controladores (tem glcd com mais). tem-se que habilitar 1 a cada metade da área do lcd. bem, seu problema pode até não ser este, pelo menos poderia lhe servir de inspiração. o problema II é que está usando os mastigados do ccs e fica difícil depurar a um nível + baixo.
Re: PIC e GLCD - fazendo linhas

Enviado:
25 Set 2013 16:30
por tcpipchip
hummm....entao é um KS0108 ?
Voce vai ter 2 CS, uma para a página 1 e outro para página 2.
É muito parecido com o hitachi, voce vai ter um uma barramento para dados ou instruções e um bit informando a funcao do barramento e pino de escrita leitura.
Uma vez selecionada a pagina, dentro dela voce tem endereços de bytes que formam pixels, que sao escritos verticalmente. Coluna a coluna.
Se duvidas continuarem,te mando o emulador.
TCPIPCHIP
Re: PIC e GLCD - fazendo linhas

Enviado:
27 Set 2013 16:01
por ze2
permita-me registrar o método que usei para selecionar os 2 controladores. num é lá grande coisa não e não está 100% mas com transpirações atendeu minhas aspirações. Note-se que procuro maximizar o minimalismo (cara acho que ja disse isso)
- Código: Selecionar todos
#define GLCD_SET_PAGE 0xB8 // 10111XXX: set lcd page (X) address --- ver datasheet
#define GLCD_SET_Y_ADDR 0x40 // 01YYYYYY: set lcd Y address --- ver datasheet
#define GLCDCS1 RA4
#define GLCDCS2 RA5
#define GLCDDI RB4 //instrução , dado
#define GLCDRW RB5
#define GLCDEN RB6
#define GLCDRST RB7
#define GLCDDATA PORTC
#define GLCDDDR TRISC
#define GLCDCTR PORTB
#define GLCDCS PORTA
#define GLCDBUSY RC7
void glcdDataWrite(uchar controller, uchar data)
{
GLCDCS=controller<<4;//seleciona o chip << aqui está a extensão do pulo do gato: aciona cada cs em RA5,4
glcdBusyWait(controller);//espera controlador
GLCDDDR=0;//saída
GLCDDI=1;//dado
GLCDRW=0;//escrita
GLCDEN=1;//habilita controlador
GLCDDATA=data;
asm ("nop"); asm ("nop");
asm ("nop"); asm ("nop");
asm ("nop"); asm ("nop");
asm ("nop"); asm ("nop");
GLCDEN=0;
}
void glcdWriteChar(uchar x, uchar y, uchar c, uchar color) //x,y,caracter em asc-ii,invertido ou não
{
uchar i,cs;
cs=x/64;cs++; //<< aqui está o pulo do gato. o argumento x que é a coluna ... x! de 0 a 127 ja vai me identificar qual controlador na rotina acima
//GLCDCS=cs;//seleciona o chip
glcdControlWrite(cs,GLCD_SET_Y_ADDR|(x%64)); //cada controlador controla 64 pixels
glcdControlWrite(cs,GLCD_SET_PAGE | y);//posição y
for(i=0; i<5; i++)
{
if (color)
glcdDataWrite(cs,Font5x7[((c - 0x20) * 5) + i]); //preto
else
glcdDataWrite(cs,~Font5x7[((c - 0x20) * 5) + i]); //branco
}
}

até que lembra (e dá pra adaptar) um osciloscopio digital didático meia boca. é pra uma giga de testes simples pra medir um pulso bem como mostrar sua aparência. Ninguém tá perguntando eu sei, mas essencialmente o mc lê só 16 valores analógicos o + rápido possível e plota na telinha com o algoritimo de bresenham. O título do seu tópico me fez lembrar deste treco que fiz...
abç e bfds...
ops ... se o desenho estiver muito grande pra sua tela... sorry. moderador pode deletar
Re: PIC e GLCD - fazendo linhas

Enviado:
14 Out 2013 08:53
por Alexandro
Bom desculpe a demora, mas pelo que vi esse GLCD não precisa selecionar os processadores, o problema mesmo é o codigo de calculos da bilioteca CCSC. Eu esqueci de informar , a gpu : LC7981.
Acontece que eu nao conseguia desenha uma linha com mais de 128 pixels, pq a rotina disso era unsigned int8, ou seja só 0~127 e até -127.
Mas consegui resolver esse problema alterando as variaveis da rotina. O problema é q tem uma função chamada abs() justamente pra tirar o - quando se quer fazer um traço ao contrario( da direita pra esquerda ).
Se quiserem q eu poste a rotina modificada eu coloco aki.
Valeu !