TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: MiCrOtRoNiC en 29 de Julio de 2008, 12:31:15
-
Amigos de todopic alguien tiene una rutina para poder controlar un lcd de 4x40 en proton? esta trae 2 enables y los lcds comunes de 2x16 etc..solo traen 1 enable..
salu2
-
Has probado activando los enables o solo uno para saber si uno es para 2 lineas??
-
:? si amigo generalmente estos lcd traen 2 controladores hd44780 cada uno controla 2 lineas y el otro las otras 2 lineas...
aqui te dejo el link del datasheet
ATM4004A (http://electronica.com.ve/data/ATM4004A.pdf)
-
Ah entonces usa un ejemplo normal pero cuandso quieras poner las lineas las primeras 2 lineas activa el EN1 y cuando quieras bajar usas el EN2... dejame ver un ejemplo
-
estube leyendo algo en el foro oficial de proton
mira aqui este link porfa..
dan una solucion pero no veo en el programa la asignacion del e2
LINK (http://www.picbasic.org/forum/showthread.php?t=4590)...
-
esto lo saque del foro oficial..pero no se si este bien no tengo orita el compilador ni el programador a la mano..
Device 18F452
XTAL 40
DelayMS 500
#disable Print
#disable Cursor
#enable DelayUS
Dim BPF As Byte SYSTEM
Dim BPFH As Byte SYSTEM
Dim GEN As Byte SYSTEM
Dim PP0 As Byte SYSTEM
Dim PP0H As Byte SYSTEM
Dim PP3 As Byte SYSTEM
Dim PP3H As Byte SYSTEM
Dim PP4 As Byte SYSTEM
Dim PP5 As Byte SYSTEM
Dim LCD#ENPINSELECT1 As Bit
Dim LCD#ENPINSELECT2 As Bit
Symbol LCD#DATAUS = 50
Symbol LCD#COMMANDUS = 2000
Symbol LCD_ENPORT2 = PORTB
Symbol LCD_ENPIN2= 2
LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.3
LCD_ENPIN = PORTB.0
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2
LCD_TYPE = 0
LCDCURSOR_12 MACRO
LCD#ENPINSELECT1 = 1
LCD#ENPINSELECT2 = 0
ENDM
LCDCURSOR_34 MACRO
LCD#ENPINSELECT1 = 0
LCD#ENPINSELECT2 = 1
ENDM
LCDCURSOR_1234 MACRO
LCD#ENPINSELECT1 = 1
LCD#ENPINSELECT2 = 1
ENDM
GoTo over#lcdcode
ASM
lcd@crs clrf BPFH
bsf BPFH,7
curs@ movwf PP5
movlw 254
Call ch@snd2
movfw PP5
GoTo ch@snd2
Print movwf PP3H
bcf LCD#ENPORT,LCD#ENPIN
bcf LCD_ENPORT2,LCD_ENPIN2
bcf LCD#RSPORT,LCD#RSPIN
bcf (LCD#ENPORT + 18),LCD#ENPIN
bcf (LCD_ENPORT2 + 18),LCD_ENPIN2
bcf (LCD#ENPORT + 18),LCD#RSPIN
movlw 15
andwf (LCD#DTPORT + 18),f
movfw PP3H
btfsc BPF,1
GoTo prt@1
movlw 58
movwf PP0H
movlw 152
Call dlus@w
movlw 51
movwf PP3
Call pr@lp
movlw 19
movwf PP0H
movlw 136
Call dlus@w
Call pr@lp
movlw 100
Call dl@us
Call pr@lp
movlw 100
Call dl@us
movlw 34
movwf PP3
Call pr@lp
movlw 40
Call pr@c
movlw 12
Call pr@c
movlw 6
Call pr@c
bsf BPF,1
movfw PP3H
bra prt@1
pr@c bsf BPF,0
prt@1 movwf PP3
btfss BPF,0
bra pr@cc
bcf LCD#RSPORT,LCD#RSPIN
sublw 3
bnc pr@sd
Call pr@sd
movlw High LCD#COMMANDUS
movwf PP0H
movlw Low LCD#COMMANDUS
Call dlus@w
bsf STATUS,0
Return
pr@cc bsf BPF,0
sublw 254
btfsc STATUS,2
GoTo pr@ex
bsf LCD#RSPORT,LCD#RSPIN
pr@sd
btfss BPF,0
pr@lp bcf BPF,0
btfsc LCD#ENPINSELECT1
bsf LCD#ENPORT,LCD#ENPIN
btfsc LCD#ENPINSELECT2
bsf LCD_ENPORT2,LCD_ENPIN2
movlw 15
andwf LCD#DTPORT,f
movfw PP3
andlw 240
iorwf LCD#DTPORT,f
nop
bra $ + 2
nop
bcf LCD#ENPORT,LCD#ENPIN
bcf LCD_ENPORT2,LCD_ENPIN2
swapf PP3,f
nop
bra $ + 2
nop
btfsc BPF,0
bra pr@lp
movlw Low LCD#DATAUS
Call dl@us
pr@ex movfw PP3H
Return
ch@snd2
btfsc BPFH,7
GoTo Print
GoTo dl@us
ENDASM
over#lcdcode:
ALL_DIGITAL = TRUE ' Set PORTA and PORTE to all digital
LCDCURSOR_1234
Cls
Print At 1,1,"hello"
Print At 2,1,"hello"
DelayMS 500
LCDCURSOR_12
Cls
LOOP:
LCDCURSOR_12
Cls
DelayUS 500
Print At 1,1,"hello"
Print At 2,1,"hello"
DelayUS 1000
LCDCURSOR_34
Cls
DelayUS 500
Print At 1,1,"hello"
Print At 2,1,"hello"
DelayUS 1000
GoTo LOOP
Stop
-
Pues lo he compilado y no boto errores lo unico que en la simulacion de proteus las lineas par no salen en el origen si no mas alla de la mitad del LCD pero si funciono. Lo que si es que esta muy complejo su programa o al menos yo no le entiendo muy bien ya que usa macros y variables de systema.
Pero lo soluciono de maravilla
-
entonces seria
No entiendo ese programa justamente pro lo que dices??
E1-----PORTB.0
E2-----???
RS----PORTB.3
RW----???
D4,D5,D6,D7-----PORTB(4,5,6,7)
-
Que tal amigos!
Mira MiCrOtRoNiC
Me parece que el controlador que utiliza esa lcd de 40 x 4 no es compatible con el hdd44780 en el data sheet utilizan otro controlador el S6A0069X01-C0CX :shock:
si no es compatible no se puede :(
Esta (http://www.futurlec.com/LED/LCD40X4BL.shtml) lcd de 40 x 4 si es compatible con el hd44780.
De todas formas prueba colocando una sola E al pic y la otra llevala a cero o a uno y trata la lcd como si fuera una lcd de 20 x 2 y ves si te trabaja :mrgreen: de lo contrario ese modelo no lo soporta el proton.
Avisanos tus resultados a ver que le podemos hacer :mrgreen:
Saludos
-
que tal RALF2 en algunos lados he leido que si es compatible el controlador S6A0069 con el hd44780...supestamente en esta pagina todas sus lcd son compatibles con hd44780 :? :?
* LCD modules GREEN
o Sizes from 8x2 up to 40x4 chars.
o STN, Transreflective, with backlight
o HD44780 compatible controller
LCDs (http://www.hebeiltd.com.cn/?p=LCM)
LCDS (http://www.hebeiltd.com.cn/?p=LCM.alphanumeric.green)
y esto es una cita textual de este FORO (http://forum.softpedia.com/index.php?showtopic=281866)
:?
"The controllers HD44780, S6A0069 and KS-0066 are completelly compatible with any code writed to HD44780. The differences are only in pinout of the CHIP and pinout of the display boards."
salu2 mientras voya a ver si puedo hacer simular bien el programa en proton q me da problemas con el proteus :?
-
Hola MIcrotronic en el ejmplo que has puesto del codigo de proton los pines quedan asi:
EN1--->RB0
EN2--->RB2
RS---->RB3
RW---->Yo siempre lo conecto a tierra pues solo mando info no recibo.
Y los datos de RB4 a RB7
De hecho en el codigo lo definen.
-
Bueno MiCrOtRoNiC
Prueba con la configuracion de pines que te muestra navaismo, pero la lcd que tiene el proteus no estoy seguro si es compatible con el hd44780, esto porque las palabras aparecen desplazadas fuera de lugar como dice navaismo, mejor haz la prueba con la lcd real asi los resultados son mas fiables :mrgreen:
Pero tambien prueba con la lcd real utilizando solo E1 o E2 a ver si te funciona bien, como te dije arriba :mrgreen: si te trabaja bien cada E, como si fueran dos lcd en una, pues el problema lo puedes resolver utilizando dos compuertas and :shock:
uniendo una entrada de cada compuerta y la conectas a la señal E que maneja el pic :mrgreen: y las otras dos entradas la utilizas para seleccionar ya sea E1 o E2 (esta señales la controla el pic :mrgreen:) luego las dos salidas de las compuertas van una a E1 y la otra a E2.
En otras palabras vas a implementar dos funciones:
E1 = CS1 and E, E2 = CS2 and E, donde E es la variable que maneja el pic y CS1 Y CS2 son las señales que te permitiran habilitar E1 o E2 de la lcd :mrgreen:
Saludos