TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: BLACKPIC en 15 de Agosto de 2005, 19:48:00
-
AMIGOS NECESITO AYUDA PARA HACER UN MENSAJE DE BIENVENIDA SOBRE UN LCD, LA VERDAD ES QUE NO SE MUCHO SOBRE LOS PIC Y QUIERO PONER UN MENSAJE SOBRE UN LCD Y PODER SIMILARLO EN EL PROTEUS..
GRACIAS A TODOS..... 




-
Hola:
en que lenguaje quieres hacerlo...?
Si es en basic es muy sencillo:
Loop:
LCDOUT $FE,1,"HOLA MUNDO"
PAUSE 250
GOTO Loop
END
y con que pic quieres hacerlo para poner el esquema del circuito...!
-
bueno quiero el asm que el que mas o menos mese amigo y gracias
boy a tener que aprender el basic...
y me puedes decir cual de los lenguaje de programacion es el mas facil de aprender por que con el asm tu ve que ir alpaso ya que no sabia nada de electronica..
cuidate 


-
Hola:
Pues si me lo preguntas el mas facil para mi es el Pic Basic Pro... es muy sencillo de aprender y lo aprendes rapido... a la semana ya estaras haciendo algunos proyectos...
en este link:
http://miarroba.com/foros/ver.php?foroid=8826&temaid=4001543
Encontraras ejemplos sencillos que yo estoy colgando son con los que yo aprendi... no es muy dificil... es el mas facil a mi criterio, yo tambien estoy aprendiendo C en el subforo de Lenguaje C para microcontroladores... y pues a mi criterio el basic es mucho mas sencillo...!
-
HOLA BLACK..
PUES SI DESEAS UN EJEMPLO BASTANTE CLARO Y LISTO PARA SIMULAR EN PROTEUS, PUEDES BAJARTE LOS EJEMPLOS QUE COLGUE EN EL SUBFORO DE SIMULADORES... EJEMPLOS PARA SIMULAR...
AHI ENCONTRARAS VARIOS PROYECTOS HECHOS CON LCD Y SU CORRESPONDIENTE ARCHIVO EN HEX Y EL ARCHIVO .BAS QUE TE DA LA PROGRAMACION EN BASIC...
YO TE RECOMIENDO APRENDER EL PBP... QUE PARA EMPEZAR ES BASTANTE SENCILLO...
SALUDOS DESDE ECUADOR 

-
bueno la verdad ya me puse en eso ya baje el manuel que se encuentra en el foro
y una pregunta yo uso el mplab para hacer y descompilar los archivos.. digan me se puede usar o que cuales programas tengo que bajar para poner lo a bajar ..
y gracias amigos LordLafebre y olotill..... cuidence



amigo olotill..... por favor de poner el links para yo descargar los ej de simulacion de la pag.
-
Hola:
No entiendo muy bien que es lo que quieres decir, pero si te refieres a compilar los archivos... pues necesitas el compilador picbasic pro (PBP) y el editor que es el microcode Studio... en este ultimo es en donde tu escribes tu codigo y este se enlaza con el compilador que es PBP y crea en .ASM y el .HEX... En PBP puedes incluir rutinas en ensamblador si llegaras a necesitarlo...
-
hola amigo LordLafebre disculpa con el pequeño error que hice cuado puse descompilar la verdad quise decir compilar y por favor pon el circuito del mensaje sobre el lcd y el codigo pero hacho en asm. si puedes amigo ... y el pic a utilizar es el 16f84 o otro que tu decees ...
y gracias por todo...


-
Hola:
Aqui http://www.x-robotics.com en la seccion RUTINAS hay un ejemplo de LCD 2x16 u pic 16F84 en ASM...
Suerte...!
-
hola amigo LordLafebre como estas espero que bien amigo bueno
gracias por la pag. que me diste pero tengo un problema baje el ej. pero cuando
lo simulo no me funciona amigo requiero de una ayuda.
saludo para todos los del foro
y gracias por lo que hacen por los demas como yo-....
bye desde Rep. Dom.

-
hola yo tambien necesito ayuda con un PIC 16f877 y un LCD para mostrar un voltaje de entrada atraves de un potenciometro en el LCD y mi gran duda es como convierto la muestra a numeros decimales y como lo hago funcionar en el proteus la verdad q el proteus se pone molestoso alguien podria ayudarme necesito este programa pero hecho en MPLAB osea en assembler y por favor no me digan que este ejemplo ya esta en otro parte del foro pq ya lei tods y si esta es de otro tipo y no me ayuda con mi problema muchismas gracias de antemano
-
BUENO EN REPUESTA A LA PREGUNAT DEL PICLISTERO LE MUESTRO TODO LO NECESARIO CON LA SIMULACION EN PROTEUS DE LO PEDIDO PERO COMO LE ADJUNTO EL ARCHIVOS O LOS ARCHIVOS NECESARIOS
-
BUENO AQUI TE ESCRIBO LO NECESARIO:UNO POR UNO
PASO 1:
RUTINA LCD
PRIMERO ABRES EL MPLAB COPIAS ESTO Y LO GUARDAS COMO LCD.ASM
cblock
CHAR ;ubicación del caracter
TEMP ;almacenamiento temporal
NumCadena ;número de la cadena
indice
W_temp
endc
DATOS EQU PORTD ;lineas de datos = portD
CNTRL EQU PORTD ;lineas de control = portD
E EQU 1 ;linea de control E = bit1
RW EQU 2 ;linea de control RW = bit2
RS EQU 3 ;linea de control RS = bit3
DISP_ON_CURSOR_BLINK EQU B"00001111" ;Display on, cursor on,blink
DISP_ON_NOCURSOR EQU B"00001100" ;Display on, cursor off
DISP_CLEAR EQU B"00000001" ;Aclarar display
DISP_OFF EQU b"00001000" ;apaga el display
DISP_LINEA2 EQU b"11000000" ;segunda linea
;*******************************************************************
;EnviaCarLCD - Envia un caracter a la pantalla LCD *
;Esta rutina separa el caracter entre el nibble superior e inferior*
;y los envia a la pantalla LCD, nibble mas alto primero *
;*******************************************************************
EnviaCarLCD
movwf W_temp ;almacena temporal W
movwf CHAR ;W contiene caracter a ser enviado
call TestBusyLCD ;Esperar que LCD este listo
movf CHAR,w
andlw 0xF0 ;Obtener el nibble superior
movwf DATOS ;Enviar datos al LCD
bcf CNTRL,RW ;Poner al LCD en modo lectura
bsf CNTRL,RS ;Poner al LCD en modo de datos
nop
bsf CNTRL,E ;Conmutar E
nop
bcf CNTRL,E
swapf CHAR,w
andlw 0xF0 ;Obtener el nibble inferior
movwf DATOS ;Enviar datos al LCD
bcf CNTRL,RW ;Poner al LCD en modo lectura
bsf CNTRL,RS ;Poner al LCD en modo de datos
nop
bsf CNTRL,E ;Conmutar E
nop
bcf CNTRL,E
movf W_temp,W ;restaura W
return
;*******************************************************************
;*EnviaCmdLCD - Envia comando a la pantalla LCD *
;*Esta rutina separa el comando en nibble superior y nibble *
;*inferior y los envia a la pantalla LCD, nibble mas alto primero *
;*******************************************************************
EnviaCmdLCD
movwf CHAR ;Caracter a ser enviado esta en reg. W
call TestBusyLCD ;esperar LCD listo
movf CHAR,w
andlw 0xF0 ;Obtener nibble superior
movwf DATOS ;enviar dato al LCD
bcf CNTRL,RW ;Poner LCD en modo lectura
bcf CNTRL,RS ;Poner LCD en modo comando
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
swapf CHAR,w
andlw 0xF0 ;Obtener nibble inferior
movwf DATOS ;enviar dato al LCD
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
return
;*******************************************************************
;* Esta rutina chequea el flag de busy de la pantalla LCD, *
;* retorna cuando no esta ocupado *
;* Afecta: *
;* TEMP - retorna con busy/address *
;*******************************************************************
TestBusyLCD
banco 1
movlw b"11110000" ;Seleccionar DATOS[4..7]
movwf TRISD
banco 0
bcf CNTRL,RS ;Pone LCD en modo comando
bsf CNTRL,RW ;prepara para leer flag de busy
nop
bsf CNTRL,E ;E="1"
nop
movf DATOS,W ;Lee flag de busy del nibble sup., direccion DDRam
bcf CNTRL,E ;conmuta E para tomar nibble inferior
andlw 0F0h ;Enmascara el nibble
movwf TEMP ;lo almacena
nop
bsf CNTRL,E
nop
swapf DATOS,w ;Lee flag de busy del nibble inf., direccion DDRam
bcf CNTRL,E ;Poner E="0"
andlw 00Fh ;Enmascara nibble superior
iorwf TEMP,1 ;Combina nibbles
btfsc TEMP,7 ;Chequea flag de busy, alto = ocupado
goto TestBusyLCD ;Si esta ocupado, chequear nueamente
bcf CNTRL,RW
banco 1
movlw 0x00 ;poner DATOS como salidas
movwf TRISD
banco 0
return
;**************************************************************
;* Esta rutina inicializa la pantalla LCD *
;* Afecta: *
;* TEMP - retornado con busy/address *
;**************************************************************
inicio_LCD
banco 0
bcf CNTRL,E ; aclara lineas de control
bcf CNTRL,RW
bcf CNTRL,RS
movlw 0x0F ;aclara lineas de datos
movwf DATOS
;Configurar puertos DATOS[4..7] y CNTRL[1..3] como salidas
banco 1
movlw B"00001111" ;4 bits mas altos de DATOS
movwf TRISD
bcf TRISD,E ;bits de control como salidas
bcf TRISD,RW
bcf TRISD,RS
banco 0
;Inicializar la pantalla LCD
movlw t15.4ms ;guarda de 15 ms
movwf contador2
call retardo
movlw B"00110000" ;Configurar LCD para interfaz de 4 bits
movwf DATOS
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
movlw t4.6ms
movwf contador2
call retardo
movlw B"00110000" ;Funcion escoger 2 lineas
movwf DATOS ;de caracteres de 5x7 bits
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
movlw B"00110000" ;Parte de la secuencia de encendido
movwf DATOS
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
movlw t200us ;retardo
movwf contador2
call retardo
movlw B"00100000" ;Configurar modo 4 bits
movwf DATOS ;
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
;El flag de ocupado estaria valido despues de este punto
movlw B"00101000" ;Interfaz de 4 bits, 2 lineas
call EnviaCmdLCD ; de caracteres de 5x7
movlw DISP_ON_CURSOR_BLINK ;Display on, cursor on,blink
call EnviaCmdLCD
movlw DISP_CLEAR ;Aclarar display
call EnviaCmdLCD
movlw B"00000110" ;Poner modo incremental, sin desplazamiento
call EnviaCmdLCD
movlw B"10000000" ;Address DDRam upper left
call EnviaCmdLCD
return
-
GUARDA ESTA MACRO COMO MACROPIC.INC ESTAS MACROS TE AYUDARAN A RESOLVER TUS PROBLEMAS MAS RAPIDOS
;**********************************************************************
; Filename: macropic.inc *
; File Version: 1.0 *
; Author: Manuel Alejandro Rodríguez Infantes *
; Company: UNFV *
;**********************************************************************
; Files required: *
; *
;**********************************************************************
; Notes: *
; Aplicaciones Avanzadas con PIC *
;**********************************************************************
;************************************************************** banco x
banco macro x
if x == 0
bcf STATUS,RP0
bcf STATUS,RP1
endif
if x == 1
bsf STATUS,RP0
bcf STATUS,RP1
endif
if x == 2
bcf STATUS,RP0
bsf STATUS,RP1
endif
if x == 3
bsf STATUS,RP0
bsf STATUS,RP1
endif
endm
;************************************************************** pagina
pagina macro x
if x == 0
bcf PCLATH,3
bcf PCLATH,4
endif
if x == 1
bsf PCLATH,3
bcf PCLATH,4
endif
if x == 2
bcf PCLATH,3
bsf PCLATH,4
endif
if x == 3
bsf PCLATH,3
bsf PCLATH,4
endif
endm
;************************************************************** mov
mov macro registro,literal
movlw literal
movwf registro
endm
;************************************************************** movr
movr macro registro1,registro2
movf registro2,0
movwf registro1
endm
;************************************ compara y salta si no es igual
cjne macro registro,dato,direcc
movlw dato
subwf registro,0
btfss STATUS,Z
goto direcc
endm
;************************************ compara y salta si no es igual
cjner macro registro1,registro2,direcc
movf registro2,0
subwf registro1,0
btfss STATUS,Z
goto direcc
endm
;************************************ compara y salta si es igual
cje macro registro,dato,direcc
movlw dato
subwf registro,0
btfsc STATUS,Z
goto direcc
endm
;************************************ compara y salta si es igual
cjer macro registro1,registro2,direcc
movf registro2,0
subwf registro1,0
btfsc STATUS,Z
goto direcc
endm
;*************************** decrementa, compara y salta si no es igual
dcjne macro registro,dato,direcc
decf registro,1
movlw dato
subwf registro,0
btfss STATUS,Z
goto direcc
endm
;*************************** compara y salta si es menor
cjl macro registro,dato,direcc
movlw dato
subwf registro,0 ; W = REGISTRO - W
btfss STATUS,C ; ¿C="1"?
goto direcc
endm
;********************* compara y salta si es menor igual
cjle macro registro,dato,direcc
movlw dato
subwf registro,0 ; W = REGISTRO - W
btfss STATUS,C ; ¿C="1"?
goto direcc
btfsc STATUS,Z ; ¿Z="0"?
goto direcc
endm
;************************ compara y salta si no es menor
cjnl macro registro,dato,direcc
movlw dato
subwf registro,0 ; W = REGISTRO - W
btfsc STATUS,C ; ¿C="0"?
goto direcc
endm
;********************** compara y salta si es mayor o igual
cjge macro registro,dato,direcc
movlw dato
subwf registro,0 ; W = REGISTRO - W
btfsc STATUS,C ; ¿C="0"?
goto direcc
endm
;************************************************* esuno
esuno MACRO REGISTRO,BIT
local no_es_uno_1
no_es_uno_1
btfss REGISTRO,BIT
goto no_es_uno_1
endm
;************************************************* escero
escero MACRO REGISTRO,BIT
local no_es_cero_1
no_es_cero_1
btfsc REGISTRO,BIT
goto no_es_cero_1
endm
;*************************************************
jmp MACRO Direccion
goto Direccion
endm
;*************************************************
jz MACRO Direccion
btfsc STATUS,Z
goto Direccion
endm
;*************************************************
jnz MACRO Direccion
btfss STATUS,Z
goto Direccion
endm
;*************************************************
jc MACRO Direccion
btfsc STATUS,C
goto Direccion
endm
;*************************************************
jnc MACRO Direccion
btfss STATUS,C
goto Direccion
endm
;*************************************************
jbs MACRO Reg, Bit, Adr ;saltar si bit esta seteado
btfsc Reg, Bit
goto Adr
endm
;*************************************************
jbc MACRO Reg, Bit, Adr ;saltar si bit esta aclarado
btfss Reg, Bit
goto Adr
endm
;*************************************************
sbs macro Reg, Bit ;obviar si bit esta seteado
btfss Reg, Bit
endm
;*************************************************
sbc macro Reg, Bit ;obviar si bit esta aclarado
btfsc Reg, Bit
endm
;*************************************************
compara macro reg1, constante
movlw constante
xorwf reg1,W
endm
-
ahora como tercer paso guarda este archivo como RETARDO.ASM
cblock
contador1 ;registro usado por retardo
contador2 ;registro usado por retardo
endc
;*******************************************************************
t0 equ 0x82 ;constante para generar aprox. 25ms
t4.6ms equ 0x06*4 ;constante para generar 4,6ms
t15.4ms equ 0x14*4 ;constante para generar 15,4ms
t200us equ 0x01 ;constante para generar aprox. 200us
;*******************************************************************
retardo:
clrf contador1 ;aclara contador1
ret decfsz contador1,F ;
goto ret
decfsz contador2,F
goto ret
return
ret50ms: ;RETARDO 50 ms
movlw t0
movwf contador2
call retardo
call retardo
return
ret100ms: ;RETARDO 100 ms
call ret50ms
call ret50ms
return
ret300ms: ;RETARDO 300 ms
call ret100ms
call ret100ms
call ret100ms
return
ret600ms: ;RETARDO 600 ms
call ret300ms
call ret300ms
return
-
todos los archivos anteriores guardalos en la carpeta de trabajo donde guardas los archivos supongo que estas trabajando con el MPLAB donde guardas todos tus archivos guardas lo que te di.
ahora con esto ya hecho te paso el programa
LIST P=16F877
INCLUDE <P16F877.INC>
INCLUDE <MACROPIC.INC>
CBLOCK 0X20
RESTADOR
WF
ENDC
ORG 0000H
CALL inicio_LCD
MOVLW .11
MOVWF RESTADOR
CLRF WF
LAZO
MOVF WF,0
CALL TABLA
CALL EnviaCarLCD
INCF WF
DECFSZ RESTADOR
GOTO LAZO
GOTO $
TABLA
ADDWF PCL,1
DT "BIENVENIDOS"
INCLUDE <LCD.ASM>
INCLUDE <RETARDO.ASM>
END
-
ojo que el programa debio ser de la siguiente manera
LIST P=16F877
INCLUDE <P16F877.INC>
INCLUDE <MACROPIC.INC>
CBLOCK 0X20
RESTADOR
WF
ENDC
ORG 0000H
CALL inicio_LCD
MOVLW .11
MOVWF RESTADOR
CLRF WF
LAZO
MOVF WF,0
CALL TABLA
CALL EnviaCarLCD
INCF WF
DECFSZ RESTADOR
GOTO LAZO
GOTO $
TABLA
ADDWF PCL,1
DT "BIENVENIDOS"
INCLUDE <LCD.ASM>
INCLUDE <RETARDO.ASM>
END
-
como pongo la foto final de la simulacion en proteus???????????
-
Bueno amigo manuelroin gracias por todo y la verdad esta interesante,
si no en cuentras como subir la foto de la simulacion en proteus enviamela a mi correo amigo lamecha07@hotmail.com...
saludo y gracias de BLACKPIC...
