Curso de programación de PIC en PICBasic Pro

que tal vamos con el primer proyecto de manejo de teclado matrixal utilizando operandos matematico de pic basic pro:

Código:
    ; lectura de un teclado de 16 posiciones  con pic 16f84A
 
 ; CONFIGURACION PARA LA PROGRAMACION DEL PIC   
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

;  DETERMINACION DE VARIABLES
fila VAR BYTE
columna  VAR BYTE
tecla VAR BYTE
TRISA=0

LOOP1:

PORTB=0
TRISB=%11110000
IF ((PORTB>>4)!=%1111) THEN LOOP1

LOOP2:
FOR FILA=0 TO 3
PORTB=0
TRISB=(DCD FILA)^%11111111
COLUMNA=PORTB>>4
IF COLUMNA!=%1111 then numtecla
NEXT FILA
GOTO LOOP2

NUMTECLA:
TECLA=(FILA*4)+(NCD(COLUMNA^%1111))
PORTA=TECLA
GOTO LOOP1
END
 

Adjuntos

  • teclado_154.zip
    36.2 KB · Visitas: 935
hola amigo mecatrodatos muy bueno tus aportes, tengo una duda sobre como grabar el contenido de 6 variables en una memo via I2C esas variables contienen un valor de 4 digitos, cada una, ejemplo

var1 = 1234
var2 = 21
var3 = 2222
var4 = 754
var5 = 1221
var6 = 231

cuando desconecto la corriente y vuelvo a prender necesito que estas variables se mantengan...
conozco la forma de grabar y leer en eso no tengo problema, mi problema es que no entiendo como hago para que me almacene las cifras enteras, ya que solo me guarda un numero por direccion de memoria, ejemplo grabo esto

I2cwrite portc.7,portc.6,%10100000,0,[1234]
cuando la leo solo me aparece el primer numero, necesito saber como guardo toda la cifra, muchas gracias, espero puedan ayudarme....

javi
 
javoni que tipo de memoria utilizas, mira este ejemplo :lee y escribe en la memoria (24lc04b) utilizando un pic 16f877A y una pantalla lcd de 2x16 mas de dos carasteres alamacenados en las varibles b1 y b2.

Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

define I2C_SCLOUT 1 ;PARA QUE NO SE NECESITE RESISTENCIA EN SCL

Define	LOADER_USED	1

' configuracion del lcd  2x16
DEFINE  LCD_DREG        PORTD
DEFINE  LCD_DBIT        4
DEFINE  LCD_RSREG       PORTE
DEFINE  LCD_RSBIT       0
DEFINE  LCD_EREG        PORTE
DEFINE  LCD_EBIT        1


SCL     VAR     PORTC.3                 ' Clock pin
SDA     VAR     PORTC.4                 ' Data pin

address VAR     WORD                    ' Address
B1      VAR     BYTE                    ' Data 1
B2      VAR     BYTE                    ' Data 2

ADCON1 = 7                      ' PORTa Y PORTE COMO DIGITALES 
Low PORTE.2                     ' LCD R/W line low (W)
Pause 100                       'RETADO PARA INICIALIZAR LE lcd


For address = 0 TO 15                'REPITE 16 VECES
B1 = address + 100           ' SUMA 100 A ADDRESS Y VALOR LO GUARDA EN B1
I2CWrite SDA,SCL,$A0,address,[B1]    ' GUARDA EL RESULTA DE B1 EN EN ADDRESS
Pause 10                ' ESPERA 10MS
Next address             ;ESPERA A QUE SE REALICE LA REPETICION

loop:  
For address = 0 TO 15 STEP 2         ' Loop 8 times
I2CRead SDA,SCL,$A0,address,[B1,B2]  'LEE LAS DOS VARIABLES 
LCDOut $fe,1,#address,": ",#B1," ",#B2," "   'VISUALIZA EN EL DISPLAY VALOR DEC
Pause 1000
Next address

GoTo loop                            ; CREA UN BUCLE CERRADO

End
Espero te sirva y al igual que nuestro amigo mot1258 disculpas por no responder a tu inquietud de la forma mas rapida , si lograste hallar otra forma de leer y almacenar mas de una variable en una memoria y visualizar el resultado en una LCD posteala.

Por otro lado seguire posteando proyectos utilies que les parece mostrar caracteres personalizados en Lcd con pic basic pro en eso estaba en el tiempo en que estuve perdido como lectura y visualizacion de sensores de temperatura anologos y digitales, ldr, potencimetro entre otros me parece que nos dedicaremos mas a sacarle el jugo a las pantallas de cristal liquido, cualquier colaboracion , critica o comentario sera recibida.
 
Aqui esta el diagrama de los proyectos que manejaremos con lcd es el mismo de los anteriores ( mensaje y desplazamiento) en formato dibujo , archivo comprimido si por el caso cambiaremos al pic 16f877A perola configuracion segura siendo la misma

pines pic pines LCD 2x16

RB0 D4
RB1 D5
RB2 D6
RB3 D7
RB4 RS
RB5 E
RW a tierra

estoy son los pines que aparecen en proteus al seleccionar el pic y el LCD 2x16 se tiene que realizar la conexion antes descrita.
 

Adjuntos

  • plano_ejer_lcd_728.zip
    18.4 KB · Visitas: 953
perdonaran la ortografia pero vamos con un proyecto interesante visualizacion de caracteres especiales en LCD 2X16,para ello aclaremos lo siguiente:


Un dispositivo LCD dispone de dos tipos de memorias ambas independientes. Estas memorias se denominan DD RAM y CG RAM.

-DD RAM (Display Data Ram)

Es la memoria encargada de almacenar los caracteres de la pantalla que se esten visualizando en ese momento, o bien, que esten en una posición no visible. El display tiene una capacidad de 2 lineas horizontales por 40 caracteres cada una, de los cuales solo seran visibles 2 lineas de 16 caracteres cada una. La DDRAM tiene un tamaño de 2x40=80 bytes.


CG RAM (carácter generator RAM)

La CG RAM contiene los caracteres que pueden ser definidos por el usuario, es decir que pueden ser personalizados. Está formada por 64 posiciones, con direcciones $00-$3F. Cada posición es de 5 bits.
La memoria esta dividida en 8 bloques que corresponden a los posibles caracteres creados por el usuario que van del 0 al 7.

Cada carácter esta constituido por una matriz de 5 columnas por 8 filas. De este modo un 1 indica un punto de la matriz encendido, y un 0 apagado.


Programa generacion de caracteres pic basic pro utilizando un pic 16f877A un LCD 2x16 con comunicacion a 4 bits:

Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

' DEFINICIÓN DE REGISTROS PARA EL LCD
Define LCD_DREG PORTB 'Utilizar 4 bits del puerto B para tx de datos
Define LCD_DBIT 4     'Desde el Bit B.4 al Bit B.7
Define LCD_RSREG PORTB'Selección del puerto del registro 
Define LCD_RSBIT 3    'En el bit B.1
Define LCD_EREG PORTB 'Utilizar el enable en el puerto B
Define LCD_EBIT 2     'En el bit B.2
' Establecer el puerto B como salida
TRISB=0

M var byte       ;creacion de variable

Pause 500 ' tiempo para inicializar LCD

RUTINA:

    LCDOUT $FE,64 ' COMIENZA DEFINICION

    LCDOUT $0,$E,$A,$1F,$1B,$1F,$1F,$0 ' 3 candado cerrado
    LCDOUT $0,$E,$8,$1F,$1B,$1F,$1F,$0 ' 4 CANDAdO ABIERTO
    LCDOUT $E,$A,$4,$1F,$4,$E,$A,$0 ' 5 MONITO
    LCDOUT $A,$A,$0,$4,$11,$E,$0,$0 ' 6 cara feliz
    LCDOUT $A,$A,$0,$4,$11,$E,$6,$0 '7 cara lengua
 
    LCDOut $FE, 1 ' LIMPIA EL DISPLAY
    LCDOUT $FE,$84,"CARACTERES"; mensaje en la primera linea LCD
    LCDOUT $FE,$C0 	;caracteres personalizados segunda linea LCD 2X16

; las siguientes lineas del programa sirven para visualizar en la segunda linea del LCD 2X 16 los caracteres especiales 

    FOR M = 0 TO 4   
        LCDOUT M
        PAUSE 300
    NEXT M

    PAUSE 1500

    LCDOut $FE, 1 ' LIMPIA EL DISPLAY
    LCDOUT $FE,$81,"PERSONALIZADOS"   ;mensaje  la primera linea LCD 2X16

    LCDOUT $FE,64 'COMIENZA DEFINICION
    
    
    LCDOUT $1F,$11,$A,$4,$A,$11,$1F,$0 ' 2 RELOJ ARENA 
    LCDOUT $11,$1F,$1F,$15,$1F,$1B,$E,$0 ' 3 DIABLO
    LCDOUT $E,$1F,$15,$1F,$1F,$E,$E,$0 ' 4 CALAVERA
    LCDOUT $4,$2,$4,$0,$1F,$11,$E,$0 ' 5 TAZA
    LCDOUT $0,$E,$11,$1F,$4,$14,$8,$0 ' sombrilla

; las siguientes lineas del programa sirven para visualizar en la segunda linea del LCD 2X 16 los caracteres especiales 

LCDOUT $FE,$C0 	    
    FOR M = 0 TO 4  	
        LCDOUT M
        PAUSE 300
    NEXT M    

    PAUSE 1500

    LCDOUT $FE, 1 ' LIMPIA EL DISPLAY
    GOTO RUTINA


Por ultimo anexo simulacion en proteus 7.4 , codigo fuente, .hex .la carpeta esta en formato comprimido
 

Adjuntos

  • caracteres_especiales_250.zip
    10.9 KB · Visitas: 1,074
Hola: mil gracias amigo mecatrodatos por el tiempo para contestarnos yo tambien he andado atareado con la escuela y el trabajo y gracias, mas claro no se puede la explicacion de la conexion de la LCD y me han servido mucho los ejemplos para la escuela que nos posteaste y por sí a alguien del foro le quedan duda sobre la conexion o direccionamiento de la LCD, :LOL: les dejo un link donde lo explican a detalle, espero les sirva, saludos.

http://www.matpic.com/MICROCHIP/MICROCHIP_LCD.html
 
Ok gracias, buscaré algúno que tenga por ahi pero mas que proyectos, surgen mas dudas y creo que eso es bueno porque es señal de que poco a poco vamos aprendiendo a prueba y error, estoy destrozando el ejemplo que pusiste del conteo de los 5 minutos pero sin ocupar el tmr0 y hacerlo con un contador por si hubiera el caso que quisieras mas salidas que lleven el conteo de la misma forma pero independiente ya que el 16f84 solo tiene un tmr y el 16f877 sino me equivoco solo trae 3 y si yo quiero por ejemplo 5, ya no me alcanzarian, bueno sigo peleandome con eso y en la semana posteo el poco avance que lleve, si alguien tiene algun aporte, es bienvenido. saludos


PD. dejo mas links
http://www.melabs.com/resources/samples.htm
http://www.todopic.com.ar/pbp_sp.html#count
 
Que tal siguiendo con los proyectos de lcd un frecuenciometro con el pic 16f84A , ldc 2x16 y un generador de señales cuadradas ubicado por el puertoA2, en donde se capta los pulsos y se visualizan el LCD; con alarmas de activacion condicionales ubicadas en el puert A 0,1 respectivamente, sin mas el codigo fuente:

Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

' DEFINICIÓN DE REGISTROS PARA EL LCD
Define LCD_DREG PORTB 'Utilizar 4 bits del puerto B para tx de datos
Define LCD_DBIT 0     'Desde el Bit B.4 al Bit B.7
Define LCD_RSREG PORTB'Selección del puerto del registro 
Define LCD_RSBIT 4    'En el bit B.1
Define LCD_EREG PORTB 'Utilizar el enable en el puerto B
Define LCD_EBIT 5     'En el bit B.2

' Establecer el puerto B como salida
TRISB=0
; configuracionde pines del PIc 16f84A

Alarma0 var porta.0
Alarma1 var porta.1

; definicion de variables 

pulsos var word        ; variable con capacidad de 65535


loop:

count porta.2,1000,pulsos    ; CONTAR LOS PULSOS POR EL PUERTO A2
lcdout $fe,1            ;LIMPIA lcd
lcdout $fe,$82,"fecuencia:"     ; ENVIAR MENSAJE AL LCD
lcdout $fe,$c5,dec pulsos,"hz"    ; MOSTRAR PULSOS EN LCD SEGUNDA LINEA

;condicionales para alarmas

if pulsos>750 then EMER1      ;SI PULSOS EXCEDE 750 IR A EMER1
if pulsos<320 then EMER2       ; SI PULSOS DECIENDE  320 IR A EMER2
LOW ALARMA0:LOW ALARMA1
GOTO LOOP

EMER1:                          ; RUTINA EMER1
                                            
HIGH ALARMA0
LOW ALARMA1
GOTO LOOP

EMER2:
                                 ;RUNITA EMER2
LOW ALARMA0
HIGH ALARMA1
GOTO LOOP
 

Adjuntos

  • ldc_frecuen_127.zip
    30.7 KB · Visitas: 883
  • frecuencimetro_135.zip
    31.9 KB · Visitas: 961
Que tal a peticion de un compañero del foro un contador con dos display activado por una entrada (pulsador al pic 16f84A) de 00 a 99

programa fuente en pic basic pro:

Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

;DEFINICION DE VARIABLES

Cnt VAR Byte 
Digit VAR Byte 
Pattern VAR Byte 
Digit1 VAR PORTA.0 
Digit2 VAR PORTA.1 
Pbutton VAR PORTB.7 
i VAR Byte 


TRISA = 0 
TRISB = $80 
Cnt = 0 


OPTION_REG = $05
TMR0 = 0 
ON INTERRUPT GOTO ISR
INTCON =$A0

LOOP:
BUTTON Pbutton, 0,255,0, i, 0, LOOP
Cnt = Cnt + 1
goto loop


DISABLE 
ISR:

Digit = Cnt DIG 1
Pattern = Pattern ^ $FF
LOOKUP Digit, [$3F,$06, $5B, $4F, $66, $6D, $7D, $07, $7F, $6F], Pattern
Pattern = Pattern ^ $FF
Digit2 = 0  
PORTB = Pattern
Digit1 = 1 
Pause 5 

Digit = Cnt DIG 0 
LOOKUP Digit, [$3F,$06, $5B, $4F, $66, $6D, $7D, $07, $7F, $6F], Pattern
Pattern = Pattern ^ $FF
Digit1 = 0  
PORTB = Pattern
Digit2 = 1
PAUSE 10 
INTCON.2 = 0 
RESUME 
ENABLE 
END
 

Adjuntos

  • act5_209.zip
    32 KB · Visitas: 1,122
Bueno amigos quiero compartir con ustedes el desarrollo de un robot seguidor de luz bajo la programacion en pic basic pro,utilice un pic 16f84a, driver l293b,fotoceldas y como estructura del robot un carro viejo de rf que tenia,adaptando en un pequeño protoboard el circuto para controlar los dos motores que componen el carrito. No coloque los testigos (leds) por el espacio en la proto para controlar el motor 1 utilice el comando PWM.

Este es dodigo fuente:
Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 


;ROBOT SEGUIDOR DE LUZ

b0 var byte         ;VARIABLE PARA GUARDAR EL VALOR DE LDR1
b1 var byte         ;VARIABLE PARA GUARDAR VALOR DE LDR2 
b2 var byte         ;VARIABLE DE COMPARACION DE LDR1 Y LDR2
p2 var portb.0      ;SALIDA MOTOR1
p3 var portb.1      ;SALIDA MOTOR2
p4 var portb.2      ;SALIA MOTOR2
EN1 var portb.3    ; habilitador inversor giro MOTOR 2
EN2 VAR PORTB.4      ;HABILITADOR MOTOR UNO

LED1 VAR PORTA.0
LED2 VAR PORTA.1
LED3 VAR PORTA.2

start:                          ;INICIO
pot portb.5,255,b0              ;LEE LDR1 Y GUARDA VALOR EN BO
pot portb.6,255,b1              ;LEE LDR2 Y GUARDA VALOR EN B1
If b0 = b1 then straight        ;SI BO =B1 ENTONCER IR  ALA RUTINA STRAIGHT
if b0 > b1 then left            ;SI BO ES MAYOR A B1 IR A IZQUIERDA
if b1 > b0 then right           ;SI B1 ES MAYOR QUE BO ENTONCES IR A DERECHA

straight:                       ;RUTINA COMIENZO
pwm EN2,125,30:HIGH p2
LOW EN1: low p3:low p4   ; HABILITA MOTOR 1
high led1
goto start                     ;IR A INICIO 

left:                         ;RUTINA IZQUIERDA
b2 = b0-b1                    ;RESTE EL VALOR DE BOY B1 Y GUARDELO EN LA 
                              ;VARIABLE B2 
if b2 > 15 then left1         ;SIB2 ES MAYOR QUE 15 ENTONCES IR A RUTINA 
                              ;IZQUIERDA 1                                    
goto straight                 ;IR A INICIO

left1:                       ;RUTINA IZQUIERDA 1
pwm EN2,125,30:HIGH p2
HIGH EN1: LOW P3:high p4 ;ACTIVA SALIDA P3 Y DESACTIVA SALIDA P4
HIGH LED2                      ;ENCIENDE TESTIGO              
goto start                    ;IR A INICIO

right:                         ;RUTINA DERECHA
b2 = b1-b0                     ;RESTE EL VALOR DE B1 CON B0 Y GUARDE EL
                               ;VALOR EN B2
if b2 > 15 then right1         ;SI B2 ES MAYOR QUE 15 ENTONCES IR A RUTINA 
                               ;DERECHA 1   
goto straight                  ;IR A INICIO

right1:                        ;RUTINA DERECHA 1
pwm EN2,125,30:high p2
HIGH EN1:HIGH P3:low p4 ;ACTIVA SALIDA P4 Y DESACTIVA SALIDA P3
HIGH LED3                       ;ENCIENDE TESTIGO
goto start                      ;IR A INICIO

end                             ;FIN DE PROGRAMA
 

Adjuntos

  • robot_seguidor_de_luz_609.rar
    98.1 KB · Visitas: 1,333
Amigos vamos con un proyecto interesante control de acceso son clave utilizando un teclado matrixal de 4x4,pic 16f84a y testigos de operatividad, al ingresar los cuatro digitos correctamente se energiza un rele durante tres segundos ubicado en el pin door del pic ,si la clave es incorrecta se emite tres activaciones en bip y led ubicados en el puerto A0 y A1 respectivamente, la activacion de cada tecla va acompañado de la visualizacion del led ubicado en pin 18 del pic 16f84a.

codigo fuente en pic basic pro
Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz

;creacion de variables
tecla var byte                 ;donde se guarada tecla pulsada
repit var byte                 ;para hacer repeticiones 

;configuracion de pines del pic 16f84a

bip var porta.0      ;donde se conecta la chicharra
led var porta.1  ;donde se conecta el led 
door var porta.2   ;donde se conecta rele para la puerta

a var portb.0       ;pines de las filas 
b var portb.1
c var portb.2
d var portb.3 

uno var portb.4
dos var portb.5
tres var portb.6
cuatro var portb.7

iniciando:        ;incica funcionamiento del sistema 

high led:high bip
pause 1000
low led:low bip
goto teclauno        ; comparar clave

barrido:
low a               ;sensar fila a
if uno=0 then tecla=1:return
if dos=0 then tecla=2:return
if tres=0 then tecla=3:return
if cuatro=0 then tecla=10:return
high a
low b
if uno=0 then tecla=4:return
if dos=0 then tecla=5:return
if tres=0 then tecla=6:return
if cuatro=0 then tecla=11:return
high b
low c
if uno=0 then tecla=7:return
if dos =0 then tecla=8:return
if tres=0 then tecla=9:return
if cuatro=0 then tecla=12:return
high c
low d
if uno=0 then tecla=14:return
if dos=0 then tecla=0:return
if tres=0 then tecla=15:return
if cuatro=0 then tecla=13:return
high d
pause 10
goto barrido

;rutina antirrebote de teclas
ptecla:
high led:low bip
pause 100
low led :low bip
espacio:
if uno=0 then espacio
if dos=0 then espacio
if tres=0 then espacio
if cuatro=0 then espacio
pause 25
return
 ;rutina para comparar claves

teclauno:
gosub barrido
gosub ptecla
if tecla=1then teclados
goto falso

teclados:
gosub barrido:gosub ptecla
if tecla=2 then teclatres
goto falso1

teclatres:
gosub barrido:gosub ptecla
if tecla=3 then teclacuatro
goto falso2

teclacuatro
gosub barrido:gosub ptecla
if tecla=4 then open
goto falso3

open:
for repit=1 to 2
pause 100
high led:high bip
pause 100
low led:low bip
next

high door
pause 3000
low door 
goto teclauno

;rutina teclas erroneas

falso:
gosub barrido:gosub ptecla
falso1:
gosub barrido:gosub ptecla
falso2:
gosub barrido:gosub ptecla
falso3:
for repit=1 to 3
pause 100
high led:high bip
pause 100                      
low led: low bip
next
goto teclauno
end
 

Adjuntos

  • practica_teclado_669.rar
    41.8 KB · Visitas: 1,113
hola alguien me puede ayudar estoy aprendiendo a programar en pic basic pero quisiera saber como puedo controlar un LCD desde el pic 16F877A muchas gracias por la ayuda que me puedan dar
 
hola amigo deberias ser mas conciso en tus preguntas queres saber como se conecta (patillaje) o queres que el display haga algo especial? (software), saludos
 
hola gracias por responder mira consegui aqui en mi pais Ecuador un libro que habla de el micro 16F628A, programacion en microcode studio por ejemplo si se desea inicializar el micro no se declara el oscilador por defecto lo hace para el oscilador por cristal pero segun estaba leyendo un poco no se si sera verdad no lo he confirmado el 16F877A no tiene oscilador interno por eso hace falta comenzar por eso y por lo demas quisiera saber si las mismas lineas de codigo que se utilizan para el 16F628A para inicializar el LCD son las mismas o hay que modificar un poco. te agradeceria si es posible me cruces un pequeno programita para irlo comprobando y poderlo armar e ir entrenando sobre todo lo que es posible hacer mediante el micor code studio. muchas gracias por lo que me puedas ayudar
 
bien amigo patico, vayamos por partes, primero el 16f877a no tiene oscilador interno, pero es mucho mas completo que el 16f628 en otras areas, mas memoria eeprom, 33 in/out, etc, debes conserguirte un cristal de 4 mhz que es lo mas comun, y dos condensadores de 22 picofaradios, con esto haces el oscilador, es indispensable contar con el datasheet u hoja de datos del mencionado pic, de otra forma no sabes con que estas trabajando, debes si o si conocer la disposicion de las patas del pic...
ahora para el lcd debes tener en cuenta un par de cosas, un lcd por ejemplo de 2x16 (muy comun) trabajan de dos modos con 8 bits o con 4 bits, que es esto? la cantidad de patas que vas a conectar al pic, si es de 4 bits conectas 4 patas del pic al lcd, si es de 8 conectas 8 patas del lcd al pic, que se gana con esto, una mayor velocidad de transferencia de datos del pic al lcd...ahora bien ademas de las 4 u 8 patas debes conectar tambien otras dos que son "E" (enable), el pic lo pone a 1 para que el lcd se active y luego tienes otra que es "RS" (register select) que sirve para que el lcd sepa si recibe un comando, por ejepmlo: (limpiar la pantalla) o si recibe un caracter, por ahora debes poder armar el soft, y debes ser paciente para poder entender como funciona el sistema, es maravilloso pero no debes desesperarte, busca información en google que hay mucha...saludos te adjunto un esquema de conexion del lcd, saludos
 

Adjuntos

  • lcd_4_bit_108.jpg
    lcd_4_bit_108.jpg
    54.1 KB · Visitas: 576
patico 21
que tal en proyectos con lcd encontrars lo necesario hay he dejado programas muy interesantes por ahora en el inicio del programa que desees realizar con oscilador externo tienes que configurarlo desde pic basic pro por ejemplo si deseas trabajar con un oscilador xt de 4Mhz escibes las siguientes lineas de codigo, para que cuando lo programes no tengas problemas:

@ device xt_osc ; oscilador externo XT
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz

Por otro lado si deseas manejar el LCD 2X16 con este pic debes tener en cuenta queel Puerto A y E cuenta con conversores analogo/ digital y si vas a usar alguno de estos puertos con conexio al lcd tenes que escribir lo siguiente:

ADCON1=7 ; convierte entradas o salidas digitales los pines del puerto A y E del pic 16F877A

para finalizar las lines con las que trabajan son iguales, pero el pic basic pro tiene configurado desde software la conexión para el LCD con el puerto A para que te trabaje por otro puerto debes escribir lo siguiente :

Código:
' Define LCD registers and bits
Define	LCD_DREG	PORTB
Define	LCD_DBIT	                4   
Define	LCD_RSREG	PORTB
Define	LCD_RSBIT	3
Define	LCD_EREG	PORTB
Define	LCD_EBIT	                2

Si deseas mayor aclaracion en este mismo hilo esta la configuracion de cada comando y nuestro amigo mot posteo excelentes paginas donde hay un tutorial con todos los comandos utilizados con pic basic. pro.
 
Gracias por responder osea que si hago los puertos a digital y las demas modificaciones que me mencionas y coloco en el programa que voy a trabajar con el 16F877A en teoria el mismo programa que lo hice para el 16F628A puede ser utilizado para el 16F877A obiamente cambiando la distribucion de pines y otras cositas o me equivoco mira este es le codigo que puse en el 16F628A para que me salga hola

Código:
pause 200
x var byte
abc var byte
ini:
       lcdout $FE,1
       for x = 0 to 5
lookup x, ["hola"],abc
       lcdout, abc
       pause 400
       next
       pause 2000
goto ini
end

osea que en el principio tendria que colocar

Código:
ADCON1=7 
Define LCD_DREG PORTB 
Define LCD_DBIT 4 
Define LCD_RSREG PORTB 
Define LCD_RSBIT 3 
Define LCD_EREG PORTB 
Define LCD_EBIT 2
y luego lo demas del codigo que te mostre, me puedes ayudar un poco con esto porfavor gracias nuevamente por la ayuda
 
hola amigo patico21, tu codigo es correcto te explico cual es la configuracion que te ha pasado nuestro amigo mecatrodatos,


Define LCD_DREG PORTB Define por que puerto vas a conectar en lcd en este caso el PORTB

Define LCD_DBIT 4 Define la cantidad de bits de conexion en este caso 4 del nibble alto RB4,RB5,RB6,RB7

Define LCD_RSREG PORTB Define en que puerto se va a conectar el bit de (RS) Register Select, en este caso PORTB

Define LCD_RSBIT 3 Define en que bit se conecta el (RS) Register Select, en este caso el bit 3, o sea RB3

Define LCD_EREG PORTB Define en que puerto se va a conectar el bit de (E) Enable, en este caso PORTB

Define LCD_EBIT 2 Define en que bit se conecta el (E) Enable, en este caso el bit 2, o sea RB2

en tu caso no hace falta convertir las entradas con adcon ya que no estas usando ninguno de los puertos que tienen conversores, por lo menos para el lcd... saludos... un gusto


Javicone
 

Adjuntos

  • conexion_lcd_862.jpg
    conexion_lcd_862.jpg
    70.7 KB · Visitas: 438
Atrás
Arriba