Curso de programación de PIC en PICBasic Pro

Hola amigos,
puedo ver que manejan muy bien la programación de micros, yo apenas inicio con basic y pickit2 pero debo acudir a ustedes pues aunque me estoy basando en el libro Microcontroladores de Carlos A. Reyes, aun no he podido encender un led, no sé que me falla pues el grabador indica que se grabó bien pero al montarlo en el board no funciona, estoy trabajando con Microcode Studio el pic16f628A, así que agradecería una orientación a ver que me falta pues en el libro aparece hasta la imagen del montaje en protoboard y además el código funciona con la simulación en Proteus.

Saludo a los posteadores,

Me gustaría saber porque si me he basado en un libro de Microcontroladores donde se detalla hasta el montaje en protoboar, no explican que hay que colocar el código que agregaré a continuación en el Microcode y sin el cual no había podido hacer funcionar los más básico, como es el encendido de un led. Por qué el Microcode no genera este código aún cuando ya se ha seleccionado el pic, en mi caso el 16f628A.

Aquí el código:
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
@ DEVICE pic16F628A, WDT_ON ' Watchdog Timer ON
@ DEVICE pic16F628A, PWRT_ON ' Power-On Timer
@ DEVICE pic16F628A, BOD_ON
@ DEVICE pic16F628A, MCLR_OFF ' Master Clear Opción interno
@ DEVICE pic16F628A, LVP_OFF ' Bajo voltaje de programación
@ DEVICE pic16F628A, CPD_OFF ' Protección del código de memoria OFF
@ DEVICE pic16F628A, PROTECT_OFF' protección de código OFF
 
Última edición:
Para:

viggiani1975,

Resulta que el libro con el cual estas aprendiendo sobre PIC (del Autor Carlos A. Reyes) trabaja bajo el quemador de PIC con el IC-prog y este software tiene la particularidad de que los bits de configuracion del PIC se selecciona directamente en la ventana del IC-Prog.

Caso contrario ocurre cuando trabajas con el PicKit2, puesto que con este software, se debe escribir los bit de configuración al inicio del programa para el PIC; en el caso del MicroCode Studio se hace de la forma que planteas:
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
y los demás bits a su criterio y como los necesite.

Un saludo,
 
Hola, alguien sabe porque razon sale esto al intentar grabar un 16f887 con pic basic Pro?
Este es el codigo, lo mas sencillo posible...

define osc 4
inicio:
high porta.0
pause 200
low porta.0
pause 200
goto inicio
end
 
Muesli: te falta la palabra de configuracion,si lo haces desde el MPLAB, compilando con el PBP y el pickit2 como programador no deberias tener problemas. Ese es un detalle que tiene el pickit2 el de no poder poner los fuses. Si en el MPLAB tienes inconvenientes prueba exportar el archivo (file-export- y luego tilda configuration bits)y que lo haga con los fuses.

Saludos

FITO

Muesli, lo de los fuses, quise decir en forma sencilla, osea darme cuenta facilmente que activo y que no.
 
Última edición:
Hey Fito gracias por tu respuesta, yo uso microcode estudio pero de todas formas que fuses son los que se deben activar para que no salga esta advertencia? Digo poner los fuses con codigo asm dentro del programa pbp, si es que te entendi bien...
Gracias.

Saludos.
 
revisa en las primeras paginas del foro ademas yo he usado ese libro que tu tienes y he hecho lo que dice en el libro da la casualidad que tienes que leer todo el libro y poner atencion al tema de configuracion del micro code ahi te explica claro si te saltas toda esa informacion y quieres solamente copiar el codigo sin tomar en cuenta eso claro que no te va a funcionar
 
Hola a todos,

Me interesa hacer una alarma con el 16f628A que utilice un lcd para mostrar los mensajes correspondientes a "Digite la clave" o "Digite nueva clave" y la verdad en ejemplo que se comenta con el 16f84 al inicio de este tema tiene el .hex pero no el .asm o mejor el .bas que sería más práctico, por lo que acudo a ustedes para cualquier orientación al respecto.
 
Bueno, yo me estoy basando en el libro de Microcontroladores de Carlos Reyes, allí aparece una alarma con clave en eeprom la cual he simulado en Proteus, sinembargo parece no funciionar o lo hace a una velocidad muy lenta y para cambiar la clave hay que presionar dos pulsadores al mismo tiempo, cosa que no sé como hacer en proteus. De cualquier forma, hasta este momento no me ha funcionado al introducir la clave pues el relé no activa, como creo que aun no tengo derecho a subir archivos me queda difícil explicar con claridad pero si alguien puede orientarme estaré muy agradecido, además la idea es agregarle un lcd para diversos mensajes que deseo agregar.

Muchas gracias.
 
si tienes el libro de reyes ahi hay un capitulo en el que te explican como debes programar tu micro para un LCD incluso muestra paso a paso y con detalle las sentencias a usar yo aqui mismo he posteado un ejemplo que te puede ayudar
 
Si es cierto, ya he estado probando la simulación de la alarma pero no he podido lograr que funcione bien pues la simulación se torna lenta y no logro saber por qué, tomando en cuenta que la he hecho basandome en ese ejemplo. Me gustaría poder subir la simulación y así tener la opinión de los más avanzados, sinembargo, aun no puedo postear nada. Ni modo.

Gracias por el interés.
 
Bueno y ya has probado usar el pic simulator ide de oshon soft es un buenisimo simulador de pics en basic que te corrige tu codigo mismo por si tenes algun error y pues como dije simula el pic con el codigo que le carges solo tenes que buscar en google alguna version gratuita o con algun crack y ya esta ademas en la pagina oficial dan algunos trucos para poder utilisar un lcd y sus comando en fin espero haberte ayudado saludos!
 
oye amigo sube no mas tu codigo y simulacion yo que sepa no tienes que bloqueo subela en formato .txt y la simulacion en .rar para acolitarte y la verdad tendrias que revisar que tantos pauses le haz puesto y si es necesario disminuir lazos
 
El siguiente ejemplo es un sistema de control de acceso, en el cual el usuario deberá introducir una contraseña previamente almacenada en la memoria de datos. Si la contraseña es correcta, se genera un mensaje de confirmación y sonido (“Beep”). Si la contraseña es incorrecta, se genera un mensaje de error y un sonido intermitente (“Beep, Beep, Beep”).

El dispositivo encargado de generar el sonido (Buzzer), se encuentra conectado al pin RC0 del Pic 16f877A.

PHP:
' Programa en Pic Basic Pro

Define Osc 4 
' Define el Oscilador para un Cristal
 
' de 4 Mhz.

' Configuración de Puertos:



 
TRISA = %00000000


TRISB = %00000000
TRISD = %01111000
' Declaramos las variables:
X VAR 


 

 
Byte
 
VAR1 VAR 
 
 
Byte
 
DIGITO VAR 
 
 
Byte[7]
 
CLV VAR 
 
 
Byte[7]
 
' Guardamos cada digito de la clave en las posiciones elegidas previamente:

Write 10, 1 

 
 
 
' Primer dígito de la clave
 
Write 11, 2 
 
 
' Segundo dígito de la clave
 
Write 12, 3 
 
 
' Tercer dígito de la clave
 
Write 13, 4 
 
 
' Cuarto dígito de la clave
 
Write 14, 5 
 
 
' Quinto dígito de la clave
 
Write 15, 6 
 
 
' Sexto dígito de la clave
 
' Iniciamos el sistema con una bienvenida:
 
 
Inicio:
 

LCDOut $fe, 2 

 
 
 
' Posiciona el cursor en el inicio
 
LCDOut 
 
 
"Cont. de Acceso"
 
LCDOut $fe,$C0, 
 
 
"** Bienvenido **"
 
Pause 2000 
 
 
' Hacemos una pausa de 2 segundos
 
Call 
 
 
Beep ' Generamos un sonido
 
Clave:
 

X = 0 

 
 
 
' inicializamos la variable X = 0
 
Read 
 
 
10, CLV[1] ' leemos el primer dígito y lo guardamos en CLV[1]
 
Read 
 
 
11, CLV[2] ' leemos el segundo dígito y lo guardamos en CLV[2]
 
Read 
 
 
12, CLV[3] ' leemos el tercer dígito y lo guardamos en CLV[3]
 
Read 
 
 
13, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4]
 
Read 
 
 
14, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5]
 
Read 
 
 
15, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6]
 
LCDOut $fe, 1 
 
 
' Limpia la LCD
 
LCDOut $fe, 2 
 
 
' Posiciona el cursor en el inicio
 
LCDOut 
 
 
"Introduzca su "
 
LCDOut $fe,$C0, 
 
 
"Clave de Acceso:"
Call Beep ' Generamos un sonido
 
Consulta:

Call 

 
 
 
Teclado ' Consultamos el teclado
 
If 
 
 
VAR1 = 0 Then consulta ' Si no hay una tecla pulsada vuelve a consultar
 
' Si VAR1 es diferente de cero, significa que pulsamos una tecla, por lo

' tanto generamos un sonido y continuamos…



 
Call 
 
 
Beep ' Generamos un sonido
 
' Seguidamente lo que hacemos es almacenar

' en seis variables definidas
' por el programador los dígitos introducidos
' desde el teclado matricial
' para luego ser comparados con los valores
' almacenados en la memoria de datos.



 
X = X + 1
 

DIGITO[X] = VAR1 

 
 
 
' El valor de la tecla pulsada lo
 
' guardamos en la variable correspondiente
 
 
If 
 
 
X = 6 Then comprobar ' Si X = 6 estamos guardando en DIGITO[6]
 
' el último valor introducido desde el

' teclado matricial



 
GoTo 
 
 
consulta ' Si X es diferente de 6 continuamos
 
' esperando el siguiente valor a ser

' ingresado desde el teclado
' A partir de la siguiente etiqueta empezamos la comprobación,
' y el formato es:
'
' Si DIGITO[X] es igual a CLV[X] el digito es correcto,
' y salta a la etiqueta “paseX”,
' si es diferente salta a la subrutina “error”; veamos…



 
Comprobar:
 

If 

 
 
 
DIGITO[1] = CLV[1] Then pase1:GoTo error
 
pase1:

If 

 
 
 
DIGITO[2] = CLV[2] Then pase2:GoTo error
 
pase2:

If 

 
 
 
DIGITO[3] = CLV[3] Then pase3:GoTo error
 
pase3:

If 

 
 
 
DIGITO[4] = CLV[4] Then pase4:GoTo error
 
pase4:

If 

 
 
 
DIGITO[5] = CLV[5] Then pase5:GoTo error
 
pase5:

If 

 
 
 
DIGITO[6] = CLV[6] Then correcto:GoTo error
 
' Si los seis dígitos han sido correctos
 
' se ejecuta la subrutina correspondiente.
 
Correcto:

Pause 500
LCDOut $fe, 1 


 

 
' Limpia la LCD
 
LCDOut $fe, 2 
 
 
' Posiciona el cursor en el inicio
 
LCDOut 
 
 
" * * * * * * "
 
LCDOut $fe,$C0, 

 
"Clave Correcta!"
 
Call 

 
beep ' Generamos un sonido
 
Pause 3000 
 
 
' Pausa para visualizar el mensaje
 
GoTo 
 
 
inicio
 
Error:

Pause 500
LCDOut $fe, 1 


 
 
 
' Limpia la LCD
 
LCDOut $fe, 2 
 
 
' Posiciona el cursor en el inicio
 
LCDOut 
 
 
" * * * * * * "
 
LCDOut $fe,$C0, 

 
" ERROR! "
 
Call 

 
beep ' Generamos un sonido
 
Call 
 
 
beep ' Generamos un sonido
 
Call 
 
 
beep ' Generamos un sonido
 
Pause 1500 
 
 
' Pausa para visualizar el mensaje
 
GoTo 
 
 
clave ' Salta a “clave” para nueva oportunidad
 
' La siguiente subrutina genera un “Beep” en el Buzzer

' conectado en RC0.



 
Beep:


High 

 

 
portc.0 ' Estado Lógico Alto para RC0
 
Pause 100 
 
 
' Pausa de 100 milisegundos
 
Low 
 
 
portc.0 ' Estado Lógico Bajo para RC0
 
Pause 100 
 
 
' Pausa de 100 milisegundos
 
Return 
 
 
' Retorna una línea después del llamado "Call"
 
Teclado:


VAR1 = 0
PORTD.0 = 0 


 
 
 
' Columna 1 = 0
 
PORTD.1 = 1 
 
 
' Columna 2 = 1
 
PORTD.2 = 1 
 
 
' Columna 3 = 1
 
If 
 
 
PORTD.3 = 0 Then VAR1 = 1 ' tecla "1"
 
If 
 
 
PORTD.4 = 0 Then VAR1 = 4 ' tecla "4"
 
If 
 
 
PORTD.5 = 0 Then VAR1 = 7 ' tecla "7"
If PORTD.6 = 0 Then VAR1 = 10 ' tecla "*"
 
PORTD.0 = 1 

 
' Columna 1 = 1
 
PORTD.1 = 0 
 
 
' Columna 2 = 0
 
PORTD.2 = 1 
 
 
' Columna 3 = 1
 
If 
 
 
PORTD.3 = 0 Then VAR1 = 2 ' tecla "2"
 
If 
 
 
PORTD.4 = 0 Then VAR1 = 5 ' tecla "5"
 
If 
 
 
PORTD.5 = 0 Then VAR1 = 8 ' tecla "8"
 
If 
 
 
PORTD.6 = 0 Then VAR1 = 11 ' tecla "0"
 
PORTD.0 = 1 
 
 
' Columna 1 = 1
 
PORTD.1 = 1 
 
 
' Columna 2 = 1
 
PORTD.2 = 0 
 
 
' Columna 3 = 0
 
If 
 
 
PORTD.3 = 0 Then VAR1 = 3 ' tecla "3"
 
If 
 
 
PORTD.4 = 0 Then VAR1 = 6 ' tecla "6"
 
If 
 
 
PORTD.5 = 0 Then VAR1 = 9 ' tecla "9"
 
If 
 
 
PORTD.6 = 0 Then VAR1 = 12 ' tecla "#"
 
Return 
 
 
' Retorna una línea después del llamado "Call"

 
End



Espero que esate programa le sirva al amigo viggiani1975 y le aclare muchas de sus dudas.

Para mi compatriota cheyo estoy comprometido con lo del reloj con multiplexado a travez de displays y registros de desplazamiento he esta potencializado el codigo que muy pronto lo subire para compartirlo no me ha QUEDADO MUCHO TIEMPO ya que ando muy atariado en el estudio, el trabajo y el desarrollo de las partes restantes del tutorial de PROTON IDE.
 
Última edición por un moderador:
Hola mecatrodatos, vos que sos el grande en picbasic por aca, sabes por que razon me deja ese warning el pickit2 al intentar grabar un 16f887? Tengo pic basic pro 2.5 y microcode estudio. (el error esta en una imagen en la pagina anterior).
Muchas Gracias.
 
Saludos a los posteros, si es que los hay.
Solicito ayuda para mover un micro servo Dinam, la simulación corre perfectamente, pero al momento de ensamblar se queda centrado y no da giros a derecha ni izquierda.

incrementar var porta.0
N VAR BYTE
centrar var porta.2
control var portb.1
derecha var porta.0
izquierda var porta.1

trisb=0
PORTB=0

n=150
inicio:
pulsout control,n 'Envía x por el pin portb.1
gosub pulsado 'Subrutina de chequeo del pulsador
goto inicio

pulsado:
if centrar=0 then gosub centrado
if derecha=0 then gosub aumento
if izquierda=0 then gosub decremento
return

centrado:
pause 100
N=150
return

aumento:
pause 100
n=n+1
return

decremento:
pause 100
n=n-1
return
end
 
Hola Viggiani, a mi me sucedia lo mismo con la sentencia pulsout, yo probe con esto y si funciono bien:
define osc 4
CMCON = 7
pulso var word
pulso = 1500
inicio:
high portb.0
pauseus pulso
low portb.0
pause 15

IF porta.0 = 1 AND PULSO < 2500 THEN CALL SUMA
IF porta.1 = 1 AND PULSO > 700 THEN CALL RESTA
GOTO INICIO

SUMA:
PULSO = PULSO + 30
Pause 40
Return

RESTA:
PULSO = PULSO - 30
Pause 40
Return
END

Espero te sirva, saludos.
 
Hola mecatrodatos, vos que sos el grande en picbasic por aca, sabes por que razon me deja ese warning el pickit2 al intentar grabar un 16f887? Tengo pic basic pro 2.5 y microcode estudio. (el error esta en una imagen en la pagina anterior).
Muchas Gracias.

Amigo esto sucede en estas dos condiciones:

1. No heber declarado el tipo de oscilador con el que va ha trabajar el pic Crystal Xt, resistencia condensadores HC o interno como el caso del 16f628A.

2.Haber declarado el tipo de oscilador pero con frecuencia de operacion fuera de rango.

Para detectar estas anomalias se depuran los programas desde proteus para mirar el funcionamiento de los registros y la posicion de la memoria de los datos desplazados para cada instruccion que se utilizo en PIC BAsic pro.( Eso lo veremos mas adelante con los PIc de la serie 18f que sera un aporte que hare a la comunidad para la comicacion USB y utilizacion de registros del 18f2550 , 18f452, 18f4550 con proyectos ya que 16f877a se no queda chico para lo que tengo planeado)

Por otro lado estoy interesado en el codigo fuente de realizaste para el pic 16f887 subelo que me da curiosidad si has declaro algun registro o lo compilaste con otro pic
 
Última edición:
Que berraquera, estoy muy sorprendido y agradecido por toda la colaboración que me han prestado, voy a seguir chachareando con los códigos y tratar de subir los que tengo para que me echen una mano cuando puedan, este tema si que está muy interesante pero requiere dedicación y entusiasmo.

Nuevamente gracias por toda la colaboración y espero poder retribuirles en algún momento.

Saludos nuevamente,

Aquí adjunto los códigos y la simulación en proteus de la alarma con clave y pic16f628A, les agradezco echarle una miradita a ver que falla, pues me he basado en un texto al pie de la letra y me gustaría poder armarla con este pic ya que es el que tengo de momento pues el 16f877 no lo he podido adquirir ya que, de momento, está fuera del presupuesto aunque para el siguiente mes estaré armando otra alarma con éste.

Gracias nuevamente!

Amigo Muessli, desafortunadamente no me ha funcionado el código, he probado varios y en la simulación van bien pero a la hora de armar el tiesto no anda, cambié a oscilador externo y tampoco, no sé que esté fallando?.

Adjunto la simulación, el código y unas fotos del montaje en protoboard para ver si pueden darme una mano en algun rato libre, les estaré agradecido.
 

Adjuntos

  • CERRADURA CON CLAVE EN EEMPROM.rar
    39 KB · Visitas: 581
  • MICROSERVO INFUNCIONAL.rar
    560.7 KB · Visitas: 394
Última edición:
Atrás
Arriba