Autor Tema: Display PG320240 controlado por PIC16F877  (Leído 2787 veces)

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

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
Display PG320240 controlado por PIC16F877
« 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

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Display PG320240 controlado por PIC16F877
« Respuesta #1 en: 17 de Junio de 2004, 17:09:00 »
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

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Display PG320240 controlado por PIC16F877
« Respuesta #2 en: 17 de Junio de 2004, 17:22:00 »
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

Desconectado nestorarg

  • PIC10
  • *
  • Mensajes: 14
RE: Display PG320240 controlado por PIC16F877
« Respuesta #3 en: 05 de Octubre de 2004, 06:05:00 »
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

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Display PG320240 controlado por PIC16F877
« Respuesta #4 en: 07 de Octubre de 2004, 09:38:00 »
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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Display PG320240 controlado por PIC16F877
« Respuesta #5 en: 08 de Octubre de 2004, 16:55:00 »
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.

Desconectado nestorarg

  • PIC10
  • *
  • Mensajes: 14
RE: Display PG320240 controlado por PIC16F877
« Respuesta #6 en: 12 de Octubre de 2004, 09:00:00 »
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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Display PG320240 controlado por PIC16F877
« Respuesta #7 en: 12 de Octubre de 2004, 15:00:00 »
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

Desconectado nestorarg

  • PIC10
  • *
  • Mensajes: 14
RE: Display PG320240 controlado por PIC16F877
« Respuesta #8 en: 13 de Octubre de 2004, 07:19:00 »
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

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Display PG320240 controlado por PIC16F877
« Respuesta #9 en: 14 de Octubre de 2004, 09:43:00 »
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

Desconectado nestorarg

  • PIC10
  • *
  • Mensajes: 14
RE: Display PG320240 controlado por PIC16F877
« Respuesta #10 en: 19 de Octubre de 2004, 11:07:00 »
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


 

anything