Bueno, sigo trabajando en esto y aquí algunos cambios:
Pin 3 del Display al cursor de un pot de 10K con un extremo a 5V y el otro a GND
Pin 15 de Display a una resistencia de 10ohms y de ahi a 5V
Nuevo código:
list p=16f76
include "p16f76.inc"
__CONFIG _PWRTE_OFF & _HS_OSC & _WDT_OFF
#DEFINE LCD_RS PORTA, 0 ;LCD Register Select
#DEFINE LCD_RW PORTA, 1 ;LCD Read/Write
#DEFINE LCD_E PORTA, 2 ;LCD Enable
#DEFINE LCD_LED PORTA, 3 ;LCD Reset
#DEFINE LCD_DAT PORTB
J equ 0x20
K equ 0x21
PDel0 equ 0x22
PDel1 equ 0x23
PDel2 equ 0x24
PDel3 equ 0x25
PDel4 equ 0x26
;*****************************************************************************************
;INPUT/OUTPUT PORTS CONFIGURATION
;*****************************************************************************************
org 0x00 ;Program start
clrf STATUS
bsf STATUS,RP0 ;Change to Bank 1
movlw 0x00 ;Set w = 00000000
movwf PORTA ;Set PORTA & PORTB as outputs
movwf PORTB
bcf STATUS,RP0 ;Change to Bank 0
;*****************************************************************************************
;Main program
;*****************************************************************************************
clrf PORTA ;PORTA = w = 00000000
clrf PORTB ;PORTB = w = 00000000
movlw .89 ;32 mseg Delay
movwf J
movlw .143
movwf K
call Delay_ms
movlw 0x38 ;Function Set
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
call Delay_40us
movlw 0x0C ;Display ON/OFF Control
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
call Delay_40us
movlw 0x01 ;Clear Display
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
call Delay_2ms
movlw 0x06 ;Entry Mode Set
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
movlw .110 ;50 mseg Delay
movwf J
movlw .181
movwf K
call Delay_ms
movlw 0x4F ;Letra "O"
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
movlw .156 ;100 mseg Delay
movwf J
movlw .213
movwf K
call Delay_ms
movlw 0x4B ;Letra "K"
movwf LCD_DAT ;Place data in PORTB
call lcd_cmd
;*****************************************************************************************
;Subroutines
;*****************************************************************************************
;Send Command to LCD Subroutine
;*****************************************************************************************
lcd_cmd:
bcf LCD_E ;E=1
bcf LCD_RW ;Activate Write operation RW=0
bcf LCD_RS ;RS=0
bsf LCD_E ;E=1
bcf LCD_E ;E=0
return
;*****************************************************************************************
;Send Data to LCD Subroutine
;*****************************************************************************************
lcd_data:
bcf LCD_E ;E=0
bcf LCD_RW ;Activate Write operation RW=0
bsf LCD_RS ;RS=1
bsf LCD_E ;E=1
bcf LCD_E ;E=0
return
;*****************************************************************************************
;Delay 40 useg subroutine
;*****************************************************************************************
Delay_40us:
movlw .18 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop0 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;*****************************************************************************************
;Delay 2 mseg subroutine
;*****************************************************************************************
Delay_2ms:
movlw .5 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .159 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
return ; 2+2 Fin.
;*****************************************************************************************
;Delay mseg subroutine
;*****************************************************************************************
Delay_ms:
movlw J ; 1 set numero de repeticion (B)
movwf PDel3 ; 1 |
PLoop3 movlw K ; 1 set numero de repeticion (A)
movwf PDel4 ; 1 |
PLoop4 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel4, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel3, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop3 ; 2 no, loop
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7
return ; 2+2 Fin.
end
Se supone que quería poner OK en el display pero el único cambio que tuve es que me presenta las 4 lineas del display algo tenues con el pot al max para el contraste pero de letras nada....
Alguna idea???? Alguna ayuda????
Saudos