TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: hrosales en 17 de Junio de 2004, 16:12:00
-
Hola a todos,
Acabo de suscribirme al foro y quiero solicitar su ayuda con este proyecto.
Estoy construyendo un display basado en el PG320240D de Powertip controlado por un PIC16F877 a 16Mhz y despues de muchas pruebas no he podido conseguir enviar ni un solo caracter. Realmente me siento confundido y no se cual es mi error(es).
Aqui esta el codigo mas reciente que he probado para que le den una checadita y me iluminen. Los diagramas no los he podido adjuntar pero los tengo comprimidos con formato paint, si los necesitan los puedo enviar por mail.
De antemano muchas gracias
Hector Rosales
Mexico, DF
;*********************************************************************************************************
LIST P = 16F877
RADIX HEX
INCLUDE "P16F877.inc"
errorlevel -302 ; supress "register not in bank0, check page bits" message
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
;********************************************************************************************************
;VARIABLES DEFINITION
;********************************************************************************************************
#DEFINE LCD_PWRE PORTB,0 ;Power Up the Diplay
#DEFINE LCD_RST PORTB,1 ;Reset
#DEFINE LCD_RD PORTB,2 ;Read
#DEFINE LCD_A0 PORTC,0 ;A0
#DEFINE LCD_WR PORTC,1 ;Write
#DEFINE LCD_CS PORTC,2 ;Chip Select Enable/Disable the Display
#DEFINE LCD_DAT PORTD ;LCD data on PORTD
J EQU 0x25
K EQU 0x26
;*********************************************************************************************************
;INPUT/OUTPUT PORTS CONFIGURATION
;*********************************************************************************************************
org 0x00 ;Program start
bsf STATUS,5 ;Change to Bank 1
movlw 0x07
movwf ADCON1 ;Set all pins as digital
movlw 0x0F ;Set w = 00001111 for PORTA configuration
movwf PORTA ;Set RA0:RA3 as inputs, RA4:RA7 as outputs
movlw 0x00 ;Set w = 00000000 for PORTB, PORTD & PORTE configuration
movwf PORTB ;Set RB0:RB2 as outputs. Display Power Enable, Reset and Read
movwf PORTC ;Set RC0:RC7 as outputs. Display A0, Write, Chip Select
movwf PORTD ;Set RD0:RD7 as outputs. Display data
bcf STATUS,5 ;Change to Bank 0
;*********************************************************************************************************
;PORTS INITIALIZATION & DISPLAY POWER UP
;*********************************************************************************************************
clrf PORTA ;PORTA = w = 00000000
clrf PORTD ;PORTD = w = 00000000
bsf LCD_PWRE ;LCD Power Up
bsf LCD_RST ;LCD No Reset
bcf LCD_CS ;LCD chip select active /CS
;2msec delay @ 16MHz crystal from POWER UP
call Delay
bcf LCD_RST ;LCD Reset
;2msec delay @ 16MHz crystal
call Delay
bsf LCD_RST ;LCD No Reset
call Delay
;*********************************************************************************************************
;Display SYSTEM SET instruction
;*********************************************************************************************************
movlw 0x40
call send_cmd
movlw 0x30
call send_dat
movlw 0x87
call send_dat
movlw 0x07
call send_dat
movlw 0x1F
call send_dat
movlw 0x52
call send_dat
movlw 0x7F
call send_dat
movlw 0x20
call send_dat
movlw 0x00
call send_dat
;Display SCROLL instruction
movlw 0x44
call send_cmd
movlw 0x00
call send_dat
movlw 0x00
call send_dat
movlw 0x7F
call send_dat
movlw 0x00
call send_dat
movlw 0x10
call send_dat
movlw 0x7F
call send_dat
;Display HDOT SCR instruction
movlw 0x5A
call send_cmd
movlw 0x00
call send_dat
;Display OVLAY instruction
movlw 0x5B
call send_cmd
movlw 0x01
call send_dat
;Display DISP ON/OFF instruction
movlw 0x58
call send_cmd
movlw 0x16
call send_dat
;Clear data in first layer
movlw 0x42
call send_cmd
movlw 0x20
call send_dat
;Clear data in second layer
movlw 0x42
call send_cmd
movlw 0x00
call send_dat
;Display CSRW instruction
movlw 0x46
call send_cmd
movlw 0x00
call send_dat
movlw 0x00
call send_dat
;Display CSR FORM instruction
movlw 0x5D
call send_cmd
movlw 0x04
call send_dat
movlw 0x86
call send_dat
;Display DISP ON/OFF instruction
movlw 0x59
call send_cmd
movlw 0x16
call send_dat
;Display CSR DIR instruction
movlw 0x4C
call send_cmd
;Display MWRITE instruction
movlw 0x42
call send_cmd
movlw 0x45 ;E
call send_dat
movlw 0x50 ;P
call send_dat
movlw 0x53 ;S
call send_dat
movlw 0x4F ;O
call send_dat
movlw 0x4E ;N
call send_dat
;*********************************************************************************************************
;Subroutines
;*********************************************************************************************************
;LCD Command Subroutine
send_cmd:
bsf LCD_A0 ;A0=1
movwf LCD_DAT ;Place data in PORTD
bcf LCD_CS ;Activate CS pin CS=0
bcf LCD_WR ;Activate WR pin WR=0
nop
bsf LCD_WR ;Deactivate CS pin CS=1
bsf LCD_CS ;Deactivate WR pin WR=1
return
;Send Data to LCD Subroutine
send_dat:
movwf LCD_DAT ;Place data in PORTD
bcf LCD_A0 ;A0=0
bcf LCD_CS ;Activate CS pin CS=0
bcf LCD_WR ;Activate WR pin WR=0
nop
bsf LCD_WR ;Deactivate CS pin CS=1
bsf LCD_CS ;Deactivate WR pin WR=1
return
;2msec delay Subroutine
Delay:
movlw 0x34 ;w = 52 decimal for 2msec delay
movwf J ;J = w
loopj movwf K ;K = w
loopk decfsz K,f ;K=K-1, jump if K=0
goto loopk
decfsz J,f ;J=J-1, jump if J=0
goto loopj
return
end
-
Hola:
No se si te interesa pero si lo realizas en PBP lo resuleves en no mas de 10 lineas de programa,no te lo tomes como una respuesta ofensiva simplemente si te gusta el picbasic pro o el plus lo puedes realizar en segundos......
saludos
khasistos
-
No, no, no, esta muy bien la observacion, podrias decirme como o donde puedo obtener el PBP o el plus?
Ahora, que tal de los errores, encuentras algo raro en el codigo?
Gracias
Hector Rosales
-
Hola hrosales, yo estoy tambien trabajando en un proyecto con PG320, en mi proyecto uso un pic16f84 y lo conecto por serie a la pc.
Has podido hacerlo andar, sino en cuanto tenga buenos resultados te aviso, tambien me pasa que no escribe, tengo la idea que es por los tiempos de escritura pero como no tengo osciloscopio no lo he podido confirmar.
Encontraste cual era el problema en asm, la duda que me surje es si dejaste la /RD a uno porque en la rutina no aparecia, en una de esas te entraba ruido por ahi !!!
Saludos
Néstor
-
Hola,
El diseno para este proyecto ha cambiado, ahora uso un P16F76 a 20MHz y el codigo tambien ha cambiado.
Quiero adjuntar un archivo zip con los diagramas y codigo por si a alguien le interesa revisarlo, pero no puedo, me dice que no hay espacio suficiente y apenas es de 162KB... que hago?
Esto todavia no jala bien, pero estoy cerca, creo...
El codigo me lo ha compartido un amigo y me dice que esun codigo de inicializacion probado pero en mi proyecto no chambea, solo se pone iluminada toda la pantalla.
Tengo duda en el circuito que controla el contraste o luminosidad (el pot de 10K R17), no me queda claro si un extremo va a +5V o a GND, he visto diagramas de los dos tipos pero a mi no me da ninguna mejoria ninguno.
En fin, espero alguien se apiade y comparta alguna observacion o errores encontrados.
Salu2
Hector
-
El potenciómetro regulador de contraste tiene que estar a caballo entre GND y +5V, y la patilla central es la que tiene que estar conectada al LCD.
Con respecto a subir los fichero, si quieres envíamelos al privado y te los pongo en el almacén del foro.
-
Hola al fin pude hacer andar el LCD con un 16F84 a 10 Mhz y por 232 con la pc, la rutina de inicializacion es muy parecida a la que esta en mundopic.com.ar , y el principal problema fueron los tiempos,
en la rutina de aca te faltaba limpira el layer de texto y el grafico y tenes que asegurarte que CS=0 y RD=1 asi solo manejas WR y AO,
si se pone gris ya tomo el modo comando en cuanto se configure tenes que ver el cursor titilando.
El programa de demo el manual no me funciono, la rutina de mundopic esta para el atmel pero es muy facil pasarla al pic.
Con lo que estoy teniendo problemas que aveces no levanta es con lamisma rutina cargada directamente del pic, le puse los 2 segundo de delay pero aveces falla y no lo inicializa o deja basura de fondo.
Con el config por 232 funciona todo ok todas las veces, asi que debe ser problema de tiempos, que lastima no tener un osciloscopio jajaja.
Yo tampoco puede bajar los fuentes me da error.
Ahora voy a pasarlo para el 18F452 a 20 Mhz despues les cuento!!!
Saludos
Néstor
-
He subido al almacén los ficheros que me ha enviado Héctor.
Son estos:
http://miarroba.com/foros/ver.php?foroid=256746&temaid=2419228
-
Estuve probando hacer caracteres grandes y la unica forma que encontre es pintar pixeles, alguno probo con 8x16 o conoce otra forma para crearlos.
Saludos
Néstorarg
-
Hola,
Con buenas nuevas, revisando la tarjeta que controla el LCD encontre algunos errores:
cambie RD a +5V
cambie CS a GND
el +5V de alimentacion al LCD (pin2 de XM2) lo tenia al emisor de Q1, asi que habia mucho problema en la inicializacion. Lo cambie directo a +5V
he logrado que aparezca la palabrita "EPSON" en la esquina superior izquierda del display pero con como 4 lineas hacia abajo en blanco (hasta aqui bien) y luego pura basura. Intente con algunos cambios en el codigo y me di cuenta que el problema esta en el borrado de los layers de texto y graficos.
Alguien tendra alguna rutina para esto en assembler (el PB Pro aun no lo trabajo muy bien ni el C). Hasta donde entiendo y si han visto los codigos adjuntados por nocturno66 el layer de texto comienza en 0000H y el de grafico en 2580H.
Ya pondre todo (diagramas y codigo) cuando quede listo
Gracias
-
El problema es que no limpias los layer, es muy facil la rutina, no la tengo aqui pero te cuento:
Para limpiar texto, ecribis el comando de escribir y luego escribir tantos espacios en blanco como caracteres tengas definidos en el display.
Si necesitas tenes que volver el cursor a la posicion 0.
Para borrar el segundo layer te situas en la posicion del segundo layer creo era
0x0
0x10
y despues escribis tantos pixieles como tengas definido osea 256 linea por 80 ,
dependiendo si esta invertido envias 0xFF o 0x0 como caracter para escribir.
Saludos
nestorarg