Autor Tema: Alguien puede ayudarme con mi GLCD T6963??  (Leído 6108 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Alguien puede ayudarme con mi GLCD T6963??
« en: 10 de Octubre de 2008, 20:53:19 »
Hola, tengo una GLCD controlada por un T6963cfg de 240x128. Tengo problemas con su libreria (escrita por mi con ayuda de busquedas en internet). Resulta que parece inicializar bien, pero cuando quiero escribir una sola letra en determinado lugar, salen 8 veces la misma letra y en cualquier lado. Lo mismo ocurre si quiero pintar un solo pixel. La verdad es que no se por donde encarar el problema.

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #1 en: 21 de Noviembre de 2008, 22:12:08 »
Nadie puede darme una manito con esto???

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #2 en: 21 de Noviembre de 2008, 22:49:20 »
podrias dar mas detalles al respecto?? que microcontrolador estas usando, en que lenguaje programas, si podes subi algo de codigo.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #3 en: 25 de Noviembre de 2008, 13:57:39 »
Hola gera. Disculpa la tardanza. Estoy usando un modulo winstar wg240128b, un pic 16f877 (aunque al principio tambien use in 16f84a). Aqui posteo la libreria que escribi en CCS (basada en una libreria escrita en assembler que encontre en estos foros y en codigos escritos en C de la web, que son todos mas o menos lo mismo).

Código: [Seleccionar]
#include <16f877.h>
#use delay(clock=4000000)
#fuses XT

const int CURSOR_PTR_SET = 0x021; //Cursor Pointer Set: Data = X,Y
const int OFFSET_REG_SET = 0x022;   //Offset Register Set: Data = data,0
const int ADDR_PTR_SET = 0x024;    //Address Pointer Set: Data = low, high addr

/*Control Word Set commands:-*/
const int TEXT_HOME_SET = 0x040; //Text Home Address Set: Data = low, high addr
const int TEXT_AREA_SET = 0x041; //Text Area Set: Data = columns, 0
const int GRAPH_HOME_SET = 0x042;   //Graphics Home address Set: Data = low, high addr
const int GRAPH_AREA_SET = 0x043;   //Graphics Area Set: Data = columns, 0

/* Mode Set commands (OR with CG rom commands):-*/
const int OR_MODE = 0x080; //OR mode
//const int XOR_MODE = 0x081; //XOR mode
//const int AND_MODE = 0x083; //AND mode
//const int TEXT_ATTR_MODE = 0x084; //Text Attribute mode
//const int INT_CG_MODE = 0x080; //Internal CG ROM mode
//const int EXT_CG_MODE = 0x088; //External CG ROM mode

/* Display Mode commands (OR together required bits):-*/
//const int DISPLAY_OFF = 0x090; //display off
//const int BLINK_ON = 0x091;
//const int CURSOR_ON = 0x092;
//const int TEXT_ON = 0x094;
//const int GRAPHIC_ON = 0x098;

/*Cursor Pattern Select*/
//const int CURSOR_1LINE = 0x0A0;
//const int CURSOR_2LINE = 0x0A1;
//const int CURSOR_3LINE = 0x0A2;
//const int CURSOR_4LINE = 0x0A3;
//const int CURSOR_5LINE = 0x0A4;
//const int CURSOR_6LINE = 0x0A5;
//const int CURSOR_7LINE = 0x0A6;
//const int CURSOR_8LINE = 0x0A7;

/*Data Auto Read/Write*/
const int DATA_AUTO_WR = 0x0B0;
//const int DATA_AUTO_RD = 0x0B1;
const int AUTO_DATA_RESET = 0x0B2;

/*Data Read/Write*/
const int DATA_WR_INC = 0x0C0; //Data write and increment addr: Data = data
//const int DATA_RD_INC = 0x0C1; //Data read and increment addr
//const int DATA_WR_DEC = 0x0C2; //Data write and decrement addr: Data = data
//const int DATA_RD_DEC = 0x0C3; //Data read and decrement addr
//const int DATA_WR = 0x0C4; //Data write - no addr change: Data = data
//const int DATA_RD = 0x0C5; //Data read - no addr change

/*Screen Peek*/
//const int16 SCREEN_PEEK = 0x0E0;

/*Screen Copy*/
//const int16 SCREEN_COPY = 0x0E8;

/*Bit Set/Reset (OR with bit number 0-7)*/

//const int BIT_RESET = 0x0F0;
//const int BIT_SET = 0x0F8;

const int16 GRAPHICS_HOME = 0x0200;
const int16 TEXT_HOME = 0x0000;
//const int16 CGRAM_HOME = 0x1800;

const int MaxBytePorFila = 30; //240/8=30 8 es el tamaño de letra
const int MaxCantFilas = 16; //16=128/8 8 es el tamaño de letra
const int MaxPixelsFila = 240;

#byte PORTA = 0x05
#byte TRISA = 0x85
#bit PORTA0 = PORTA.0
#bit PORTA1 = PORTA.1
#bit PORTA2 = PORTA.2
#bit PORTA3 = PORTA.3
#bit PORTA4 = PORTA.4
#bit PORTA5 = PORTA.5
#bit TRISA0 = TRISA.0
#bit TRISA1 = TRISA.1
#bit TRISA2 = TRISA.2
#bit TRISA3 = TRISA.3
#bit TRISA4 = TRISA.4
#bit TRISA5 = TRISA.5

#byte PORTB = 0x06
#byte TRISB = 0x86

#byte PORTC = 0x07
#byte TRISC = 0x87
#bit PORTC0 = PORTC.0
#bit PORTC1 = PORTC.1
#bit PORTC2 = PORTC.2
#bit PORTC3 = PORTC.3
#bit PORTC4 = PORTC.4
#bit PORTC5 = PORTC.5
#bit PORTC6 = PORTC.6
#bit PORTC7 = PORTC.7
#bit TRISC0 = TRISC.0
#bit TRISC1 = TRISC.1
#bit TRISC2 = TRISC.2
#bit TRISC3 = TRISC.3
#bit TRISC4 = TRISC.4
#bit TRISC5 = TRISC.5
#bit TRISC6 = TRISC.6
#bit TRISC7 = TRISC.7

#byte PORTD = 0x08
#byte TRISD = 0x88

#byte PORTE = 0x09
#byte TRISE = 0x89
#bit PORTE0 = PORTE.0
#bit PORTE1 = PORTE.1
#bit PORTE2 = PORTE.2
#bit TRISE0 = TRISE.0
#bit TRISE1 = TRISE.1
#bit TRISE2 = TRISE.2
#bit TRISE4 = TRISE.4

//Control pin setting
//#define RESET PORTC3 // LCD RST_ line
#define RD PORTC5 // LCD Read control line  pin number
#define WR PORTC6 // LCD Write control line pin number
#define CD PORTC4 // LCD Control/data Select line
#define CE     PORTC7

#define PSP TRISE4

#define salidas 0x00
#define entradas 0xff

void CheckEstado();
void EnviarComando(int comando);
void EnviarByte(int dato);
void PunteroHome();
void PunteroHomeGraficos();
void Inicializar();
void AutoEscribir(int dato);


void PunteroHomeGraficos(){
EnviarByte(GRAPHICS_HOME);
EnviarByte(GRAPHICS_HOME >> 8); //parte alta de GRAPHICS_HOME
EnviarComando(ADDR_PTR_SET);
}

void PunteroHome(){
EnviarByte(TEXT_HOME);
EnviarByte(TEXT_HOME >> 8); //parte alta de TEXT_HOME
EnviarComando(ADDR_PTR_SET);
}

void EnviarByte(int dato){

CheckEstado();
TRISC4 = salidas;
TRISC5 = salidas;
TRISC6 = salidas;
TRISC7 = salidas;
TRISB = salidas;

PORTB = dato;

WR = 0;
RD = 1;
CD = 0;
CE = 0;

delay_us(5);

CE = 1;

}

void EnviarComando(int comando){

CheckEstado();
TRISC4 = salidas;
TRISC5 = salidas;
TRISC6 = salidas;
TRISC7 = salidas;
TRISB = salidas;

PORTB = comando;

CE = 0;
WR = 0;
RD = 1;
CD = 1;

delay_us(5);

CE = 1;
}

void CheckEstado(){
int estado = 0;
TRISC4 = salidas;
TRISC5 = salidas;
TRISC6 = salidas;
TRISC7 = salidas;
TRISB = entradas;
do{
CE = 1;
WR = 1;
CD = 1;
RD = 0;
CE = 0;
estado = PORTB;
}while ((estado & 0x03) != 0x03);
estado=0;
CE = 1;
}

void AutoEscribir(int dato){
int estado = 0;
do{
CE = 1;
TRISB = entradas;
CD = 1;
WR = 1;
RD = 0;
CE = 0;
estado = PORTB;
}while ((estado & 0x08) !=0x08);

CE = 1;
TRISB = salidas;

PORTB = dato;

RD = 1;
WR = 0;
CD = 0;
CE = 0;

delay_us(5);

CE = 1;
}

void Inicializar(){
unsigned int16 c=0;
PSP = 0; //PSP: Parallel Slave Port, 0 el PORTB i/o es de proposito general, 1 modo puerto paralelo esclavo
TRISC=salidas;
TRISB=entradas;

EnviarComando(OR_MODE);
EnviarComando(0x9c);

EnviarByte(GRAPHICS_HOME);
EnviarByte(GRAPHICS_HOME >> 8); //parte alta de GRAPHICS_HOME
EnviarComando(GRAPH_HOME_SET);

EnviarByte(MaxBytePorFila);
EnviarByte(0x00);
EnviarComando(GRAPH_AREA_SET);

EnviarByte(TEXT_HOME);
EnviarByte(TEXT_HOME >> 8); //parte alta de TEXT_HOME
EnviarComando(TEXT_HOME_SET);

EnviarByte(MaxBytePorFila);
EnviarByte(0x00);
EnviarComando(TEXT_AREA_SET);

EnviarByte(0x03);
EnviarByte(0x00);
EnviarComando(OFFSET_REG_SET);

EnviarByte(0x00);
EnviarByte(0x00);
EnviarComando(CURSOR_PTR_SET);

EnviarByte(0x00);
EnviarByte(0x00);
EnviarComando(ADDR_PTR_SET);

EnviarComando(DATA_AUTO_WR);
for(c=0;c<0x1fff;c++)
{
AutoEscribir(0x00);
}
EnviarComando(AUTO_DATA_RESET);
}

void main(){

Inicializar();

EnviarByte(0);
EnviarByte(0x00);
EnviarComando(ADDR_PTR_SET);

EnviarByte(0x2D);
EnviarComando(DATA_WR_INC);

}

Si en lugar de DATA_WR_INC uso el comando DATA_WR_DEC o DATA_WR las letras se repiten! :( Desde ya gracias por el interes.

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #4 en: 11 de Diciembre de 2008, 18:55:50 »
Buenas! Les comento que intentando averiguar donde puede estar el error, borre la linea que dice CheckEstado dentro de las funciones de Enviarbyte y EnviarComando y el resultado es que hace exactamente lo mismo! Por lo que asumo que el problema esta en la funcion CheckEstado. Asi que voy a ver como me las ingenio para corregirla (lo peor es que nose que puede estar mal en esa funcion tan "basica").

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #5 en: 14 de Diciembre de 2008, 20:42:59 »
Probe grabar el pic con LVP (en ves de NOLVP) y en la pantalla sale cualquier cosa (ruido). No se si tiene algo que ver con la fuente de alimentacion, pero si muevo dos cables (font select y mode 2) que van directo a lineas de alimentacion (una a positivo y otro a negativo) la pantalla hace cosas erraticas pero con la partcularidad de que salen caracteres/pixels de a ocho (o sea el problema principal) pero creo porque el pic esta ya enviando la "libreria" al modulo del glcd. Alguien con alguna idea de que se trate? porque yo no.  :(

Desconectado XAVICOROSS

  • PIC12
  • **
  • Mensajes: 93
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #6 en: 04 de Julio de 2009, 15:07:48 »
hola, no se que tan olvidado se encuentre este tema, lo cierto es que si me respondes te enviare tu libreria corregida, lo hice en base al datasheet del procesador de la glcd

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #7 en: 18 de Octubre de 2009, 20:18:39 »
que tal XAVICOROSS, como veras esta muuuuuuuyy olvidado y se debe a que dedique mi tiempo a otras partes del proyecto del que esta glcd forma parte. Te comento que la programacion la hice en base a la datasheet del t6963. Te agradezco tu interes en el tema y si todavia queres, enviala. Yo no aseguro respuesta rapida por lo que comente al inicio de esta respuesta. Saludos!!!

Desconectado danrod

  • PIC10
  • *
  • Mensajes: 16
    • http://www.greenledlite.com
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #8 en: 09 de Diciembre de 2009, 13:30:16 »
que tal XAVICOROSS, como veras esta muuuuuuuyy olvidado y se debe a que dedique mi tiempo a otras partes del proyecto del que esta glcd forma parte. Te comento que la programacion la hice en base a la datasheet del t6963. Te agradezco tu interes en el tema y si todavia queres, enviala. Yo no aseguro respuesta rapida por lo que comente al inicio de esta respuesta. Saludos!!!


Buen dia riojanito:
Estoy creando una libreria para CCS del T6963 240X128. Quizas nos podramos colaborar........
Reviza lo que he adelantado.......... tengo problemas con el cursor y el modo grafico...... en este foro descarga los adjuntos y revizalo en proteus.
Espero tu pronta respuesta. Gracias
http://www.forosdeelectronica.com/f24/inicializar-lcd-concontrolador-t6963c-11700/index3.html#post228479

"Enviorement Proteccion and energy economy"
http://www.greenledlite.com
Saludos...

Desconectado xtian23

  • PIC10
  • *
  • Mensajes: 1
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #9 en: 19 de Enero de 2010, 03:30:25 »
Gente, Yo estuve y estoy trabajando con un LCD que tiene el controlador TC6963 y en principio tuve unos problemas que fui solucionando. Si tienen alguna consulta sobre algo, no duden en preguntarme. Saludos

Desconectado XAVICOROSS

  • PIC12
  • **
  • Mensajes: 93
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #10 en: 28 de Octubre de 2010, 16:26:53 »
A ver, poner todo el trabajo sería regalar las cosas... que les parece si vamos poniendo poco a poco las sentencias y subrutinas para manejar esta GLCD. En lo personal, he hechos trabajos grandes con estas librerías y funcionan magnífico hasta hoy. Empecemos por el lenguaje, el compilador y la marca de microcontrolador. Trabajo con atmel, microchip y freescale en cualquier lenguaje... Espero sus respuestas...

Desconectado riojanito

  • PIC10
  • *
  • Mensajes: 29
Re: Alguien puede ayudarme con mi GLCD T6963??
« Respuesta #11 en: 08 de Agosto de 2011, 18:29:44 »
Hola a todos! Sigo con el mismo problema! Estoy trabajando con un PIC16F877, una glcd winstar 240x128 con el t6963cfg. Ahora estoy escribiendo en assembler
Código: [Seleccionar]
list p=16f877
include <p16f877.inc>
radix hex
;******NOTA!!!******
; Para evitar ICD0152 asegurarce que los FIFO del puerto COM esten deshabilitados
;
; Para evitar los "Warning[203]: Found opcode in column 1" y "Warning[205] Found directive in column 1"
; hay que respetar lo siguiente:
;
; Columna 1   Columna 2   Columna 3   Columna 4
; Etiqueta   Instruccion   Operandos   Comentario

#define glcd_reset PORTA,0

cblock 0x20
byte_alto, byte_bajo
loop_h, loop_l
temp
delay
endc

org 0x00
goto inicio
org 0x05

inicio
bsf STATUS, RP0 ;cambio al banco 1
bcf STATUS, RP1
bcf RCSTA,SPEN ;Puerto serie deshabilitado
clrf OPTION_REG
bsf OPTION_REG,7 ;Resistencias pull-up del PORTB deshabilitadas
movlw 0x06 ;Configuro PORTA como puerto ed E/S digitales
movwf ADCON1
clrf TRISA ;Configuro a PORTA como salidas
clrf TRISC ;Configuro a PORTC como salidas
bcf STATUS, RP0 ;cambio a banco 0
aqui
call GLCD_INI
call limpiar_grafico
call limpiar_texto
clrf byte_bajo
movlw 0x10
movwf byte_alto
call add_point ;ubico el puntero en la posicion inicial del area de grafico en la pantalla
movlw 0x2d ;pixels que quiero mostrar
call enviar_dato
movlw 0xc0 ;0xc4 es el comando para escribir en
;memoria sin incrementar la posicion
;del address pointer
call enviar_comando

clrf byte_bajo
clrf byte_alto
call enviar_dos_datos

bucle
goto bucle

GLCD_INI
;Rutina de inicializacion del controlador del GLCD
bcf glcd_reset
nop ;Resteo el GLCD por mas de 80ns
bsf glcd_reset
;Configuro el inicio de la memoria de grafico en la direccion 0x0000
clrf byte_bajo
clrf byte_alto
call enviar_dos_datos
movlw 0x42 ;0x42 es el comando para setear el inicio del area de grafico
call enviar_comando
;Configuro el area de la memoria de grafico: 240 pixels / 8 bits (1 byte)= 30 bytes
;escojo 32 (0x0020) para facilitar operaciones logicas, tiene que coincidir con el tamaño de la pantalla
movlw 0x20
movwf byte_bajo
clrf byte_alto
call enviar_dos_datos
movlw 0x43 ;0x43 es el comando para setear el area de graficos
call enviar_comando
;Configuro el inicio de la memoria de texto: el area grafico es 32 byte * 128 lineas = 4096 (0x1000)
clrf byte_bajo
movlw 0x10
movwf byte_alto
call enviar_dos_datos
movlw 0x40 ;0x40 es el comando para setear el inicio del area de texto
call enviar_comando
;Configuro el area de la memoria de texto: 240 pixels / 8 bits (1 byte)= 30 bytes
;escojo 32 (0x0020) para facilitar operaciones logicas, tiene que coincidir con el tamaño de la pantalla
movlw 0x20
movwf byte_bajo
clrf byte_alto
call enviar_dos_datos
movlw 0x41 ;0x41 es el comando para setear el area de texto
call enviar_comando
;Configuro el modo como: CG=0 (uso caracteres internos), MD2=0 , MD0=0, MD0=0 para modo OR
modo_set
movlw b'10000000'
call enviar_comando
;Configuro el modo como: GRPH=1, TEXT=1, CUR=0, BLK=0 para texo y graficos a la vez sin cursor
display_set
movlw b'10011100'
call enviar_comando
;Configuro el offset register
movlw 0x02
movwf byte_bajo
clrf byte_alto
call enviar_dos_datos
movlw 0x22 ;0x22 es el comando para la direccion
;del offset register
call enviar_comando
return

check_estado
;Comprueba el estado STA0/STA1, si ambos son 1 al mismo tiempo el
;controlador esta listo para recibir datos/comandos
banksel TRISB
movlw 0xff
movwf TRISB ;Configuro PORTB como entradas
banksel PORTC
movlw b'01010000'
movwf PORTC ;Configuro /CE=0, /WR=1, /RD=0 y CD=1 para leer estdo del GLCD
nop
check1
btfss PORTB,0 ;Pregunto si el bit de STA0 es 1
goto check1 ;si no es 1 vulevo a preguntar hasta que lo sea
check1a
btfss PORTB,1 ;Pregunto si el bit de STA1 es 1
goto check1a ;si no es 1 vulevo a preguntar por el primero
movlw b'11110000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
nop
banksel TRISB
clrf TRISB ;Configuro PORTB como salidas
banksel PORTB
return

enviar_dato
;Guarda en temp el dato a enviar, configura los pines de control (/CE, /WR, /RD y CD) y luego envia temp al PORTB
movwf temp
movlw b'11100000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=0
movf temp,W
movwf PORTB
nop
movlw b'00100000'
movwf PORTC ;Configuro /CE=0, /WR=0, /RD=1 y CD=0 para escribir un dato al GLCD
nop
movlw b'11100000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=0
nop
movlw b'11110000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
nop
return

enviar_dos_datos
;Comprueba el estado STA0/STA1 para despues enviar los datos en byte_bajo y byte_alto
call check_estado
movf byte_bajo,W
call enviar_dato
call check_estado
movf byte_alto,W
call enviar_dato
return

enviar_comando
;Guarda el comando en el registro temp, comprueba el estado
;STA0/STA1 y despues envia temp por el PORTB
movwf temp
call check_estado
movf temp,W
movwf PORTB
nop
movlw b'00110000'
movwf PORTC ;Configuro /CE=0, /WR=0, /RD=1 y CD=1
nop
movlw b'11110000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
nop
return

limpiar_grafico
;La memoria del GLCD es de 240 pixels / 8 bits = 30 (elijo 32 para facilitar calculos)
;de ancho y 128 pixels de alto, o sea 32 * 128 = 4096 bits (0x10000) de memoria
clrf byte_bajo
clrf byte_alto
call add_point
movlw 0xb0 ;0xb0 es el comando para setear el modo de auto escritura
call enviar_comando
movlw 0x10
movwf loop_l ;filas 128 pixels / 8 bits = 16
lazo1
movlw 0x00
movwf loop_h ;columnas 240 pixels / 8 bits = 30 (elijo 32)
lazo2
clrw
;movlw 0x00
call auto_escribir
decfsz loop_h,F
goto lazo2
decfsz loop_l,F
goto lazo1
call check_estado_sta3
movlw 0xb2 ;0xb2 es el comando para resetear el modo de auto escritura/lectura
call enviar_comando
return

limpiar_texto
;La memoria del GLCD es de 240 pixels / 8 bits = 30 (elijo 32 para facilitar calculos)
;de ancho y 128 pixels de alto, o sea 32 * 128 = 4096 bits (0x10000) de memoria
clrf byte_bajo
movlw 0x10
movwf byte_alto
call add_point
movlw 0xb0 ;0xb0 es el comando para setear el modo de auto escritura
call enviar_comando
movlw 0x10
movwf loop_l ;filas 128 pixels / 8 bits = 16
lazo1a
movlw 0x00
movwf loop_h ;columnas 240 pixels / 8 bits = 30 (elijo 32)
lazo2a
clrw
;movlw 0x00
call auto_escribir
decfsz loop_h,F
goto lazo2a
decfsz loop_l,F
goto lazo1a
call check_estado_sta3
movlw 0xb2 ;0xb2 es el comando para resetear el modo de auto escritura/lectura
call enviar_comando
return

check_estado_sta3
;Sub rutina que comprueba el estado del bit STA3 (Auto mode data write capability)
banksel TRISB
movlw 0xff
movwf TRISB ;Configuro PORTB como entradas
banksel PORTB
movlw b'01010000'
movwf PORTC ;Configuro /CE=0, /WR=1, /RD=0 y CD=1 para leer estdo del GLCD
nop
check_sta3
btfss PORTB,3 ;Pregunto si el bit de STA3 es 1
goto check_sta3 ;si no es 1 vulevo a preguntar hasta que lo sea
movlw b'11110000'
movwf PORTC ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
nop
banksel TRISB
clrf TRISB ;Configuro PORTB como salidas
banksel PORTB
return

add_point
;Configuro el address pointer en la ubicacion dada por byte_bajo (low address) y byte_alto (high address)
call check_estado
movf byte_bajo,W
call enviar_dato
call check_estado
movf byte_alto,W
call enviar_dato
movlw 0x24 ;0x24 es el comando para el address pointer
call enviar_comando
return

auto_escribir
;Rutina que escribe en memoria con "auto write mode" el valor en el registro temp
movwf temp
call check_estado_sta3
movf temp,W
call enviar_dato
return

retardo
;Retardo 1ms
movlw 0x03
movwf loop_h
la1a
movlw 0xff
movwf loop_l
la2a
decfsz loop_l,F
goto la2a
decfsz loop_h,F
goto la1a
return
fin
END

;PORT_A0 GLCD_RESET
;PORT_B0...PORT_B7 GLCD_D0...GLCD_D7
;PORT_C4 GLCD_CD
;PORT_C5 GLCD_/RD
;PORT_C6 GLCD_/WR
;PORT_C7 GLCD_/CE

Desconectado diego_z

  • PIC16
  • ***
  • Mensajes: 225
,,,,option,,,,,,,,,,,explicit,,,,,,,

DR800 big a la venta ,solo argentina por privado