Curso de programación de PIC en PICBasic Pro

Jeje.. si funciona en el simulador mi única critica es que te felicito....y que podrias depurar un poco el codigo...

saludos...
 
Saludos nuevamente,

Quería comentar que gracias a los cambios de programación sugeridos por Lubeck, el programa para el swiche rf me funcionó, definitivamente el retorno a inicio era el problema (goto inicio) y con return funciona perfectamente, le agregué nuevamente los pauses en cada cambio pues sin ellos el cambio de estado no se daba de una vez, en fin, funcionó, gracias por la colaboración.
 
Saludos nuevamente,

Quería comentar que gracias a los cambios de programación sugeridos por Lubeck, el programa para el swiche rf me funcionó, definitivamente el retorno a inicio era el problema (goto inicio) y con return funciona perfectamente, le agregué nuevamente los pauses en cada cambio pues sin ellos el cambio de estado no se daba de una vez, en fin, funcionó, gracias por la colaboración.

Ok, :aplauso: me alegra que te haya funcionado!!!

@lubeck mano la hiciste saludos!
 
Buenas del minutero gracias por verlo aui les traigo una pequeña modificacion con un efecto animado y el logo del instituto a ver que les parece me avisan cualquier cosa.
 

Adjuntos

  • minutero.rar
    24.2 KB · Visitas: 248
Este me marca un error que nunca habia visto.... que sera???
Es el Proteus.
Tenés declarados los fuentes (ver imagen) y antes de ejecutar los quiere compilar. Salta el error porque no encuentra al PBP.
Eliminás esas dos líneas desde Source->Add/Remove Source files y desaparece el problema.
(la otra es configurar el camino y los argumentos para compilar desde el Proteus)

Bueno... desaparece ese y aparece otro :). Después que terminan los mensajes iniciales empieza a dar "Stack Overflow"
 

Adjuntos

  • Clipboard-1.jpg
    Clipboard-1.jpg
    23.4 KB · Visitas: 64
Hola que tal, alguna idea de como mostrar en un LCD las teclas que fueron presionadas por un teclado matricial de 3x4???
Por cierto lubeck, gracias por tu ayuda con lo del motor, ya me quedo y jala perfectamente.
salu2
 
Una manera de hacerlo es codificandolo...

mira este ejemplo...
https://www.forosdeelectronica.com/f24/solo-ejemplos-picbasicpro-proteus-39938/#post345642

existe un integrado que hace esa funcion pero yo no lo encontre y lo emule con f84a
ve el datasshet de integrado MM74c922 para que veas su funcionamiento...

eso tiene la ventaja de que tu micro no ocupa tiempo en hacer la lectura... queda bastante bien...
para desplejarlo utilizas otro micro y utilizas 4puertos el resultado en es binario... lo decodificas y listo...
a ver si te sirve...
 
Última edición:
Hola que tal, diseñe este programa, pero tengo un gran problema
No se como conectar un teclado matricial en proteus. alguna sugerencia??

aqui esta el prog
define lcd_lines 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2

LCDOUT $FE,1
A VAR PORTD.0
B VAR PORTD.1
C VAR PORTD.2
D VAR PORTD.3

UNO VAR PORTD.5
DOS VAR PORTD.6
TRES VAR PORTD.7
SALIDA VAR WORD

TECLEANDO:
GOSUB BARRIDO
GOSUB ANTIRREBOTE
LCDOUT SALIDA
GOTO TECLEANDO

BARRIDO:
LOW A
IF UNO=0 THEN SALIDA="1":RETURN
IF DOS=0 THEN SALIDA="2":RETURN
IF TRES=0 THEN SALIDA="3":RETURN
HIGH A
LOW B

IF UNO=0 THEN SALIDA="4":RETURN
IF DOS=0 THEN SALIDA="5":RETURN
IF TRES=0 THEN SALIDA="6":RETURN
HIGH B
LOW C

IF UNO=0 THEN SALIDA="7":RETURN
IF DOS=0 THEN SALIDA="8":RETURN
IF TRES=0 THEN SALIDA="9":RETURN
HIGH C
LOW D

IF UNO=0 THEN SALIDA="*":RETURN
IF DOS=0 THEN SALIDA="0":RETURN
IF TRES=0 THEN SALIDA="#":RETURN
HIGH D
PAUSE 10
GOTO BARRIDO

ANTIRREBOTE:
IF UNO=0 THEN ANTIRREBOTE
IF DOS=0 THEN ANTIRREBOTE
IF TRES=0 THEN ANTIRREBOTE
PAUSE 25
RETURN
END
 
AQUI EL PROGRAMITA DEL MINUTERO

'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 18/06/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
Define osc 4
@ 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
CMCON = 7

pause 500'TIEMPO DE ESPERA 1/2 SEG. PARA ESTABILIZAR EL PIC



MAS VAR PORTA.0
MENOS VAR PORTA.1
ENTER VAR PORTA.2
A VAR BYTE
B VAR BYTE
MINUTOS VAR BYTE
SEGUNDOS VAR BYTE

A = 0
B = 0
MINUTOS = 0
SEGUNDOS = 0
'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'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO B
DEFINE LCD_RSBIT 1 '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
TRISA = %00000111
TRISB=0 'ESTABLECER EL PUERTO B COMO SALIDA
PORTB.6 = 1

PAUSE 500 ' PAUSE DE MEDIO SEGUNDO
LCDOUT $FE, 1 ' LIMPIAR VISOR
LCDOUT 254, 64, $15,$15,$15,$15,$15,$15,$15,$0 '0 lineas verticales
LCDOUT 254, 72, $1F,$0,$1F,$0,$1F,$0,$1F,$0 '1 lineas horizontales
LCDOUT 254, 80, $E,$1F,$1F,$1F,$1F,$1F,$E,$0 '2 circulo negro
LCDOUT 254, 88, $E,$11,$11,$11,$11,$11,$E,$0 ' 3 circulo blanco
LCDOUT 254, 96, $1F,$15,$1F,$15,$1F,$15,$1F,$0 '4 lineas verticales

LCDOUT $FE, 1 ' LIMPIAR LCD
'*******************************************************************************
GOSUB INICIO
INICIO:
LCDOUT $FE,$84, "IUNP"
LCDOUT $FE,$80,0
pause 50
LCDOUT $FE,$C0,4
pause 50
LCDOUT $FE,$81,2
pause 50
LCDOUT $FE,$82,3
pause 50
LCDOUT $FE,$C1,1
pause 50
LCDOUT $FE,$C2,1
pause 50
LCDOUT $FE,$C3,1
pause 50
LCDOUT $FE,$C4,1
pause 50
LCDOUT $FE,$C5,1
pause 50
LCDOUT $FE,$C6,1
pause 50
LCDOUT $FE,$C7,1
pause 50
LCDOUT $FE,$C8,1
pause 50
LCDOUT $FE,$C9,1
PAUSE 2000
'MOSTRAR LETRA POR LETRA
GOSUB PRESENTACION
Procesando:
LCDOUT $FE, 1 ' LIMPIAR LCD
For A = 0 to 15
LOOKUP A,[ "POR FAVOR ESPERE" ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE,$C0, "CARGANDO"
For A = 0 to 15
LOOKUP A,[ "......." ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT


PANTALLA_PRINCIPAL:
LCDOUT 254, 64, 0, 0, 0, 4, 0, 0, 0, 0
LCDOUT 254, 72, 0, 0, 4, 14, 4, 0, 0, 0
LCDOUT 254, 80, 0, 0, 14, 14, 14, 0, 0, 0
LCDOUT 254, 88, 0, 4, 14, 31, 14, 4, 0, 0
LCDOUT 254, 96, 0, 21, 14, 31, 14, 21, 0, 0
LCDOUT 254, 104, 0, 4, 14, 31, 14, 4, 0, 0
LCDOUT 254, 112, 0, 0, 14, 14, 14, 0, 0, 0
LCDOUT 254, 120, 0, 0, 4, 14, 4, 0, 0, 0
LCDOUT 254, 128, 0, 0, 4, 14, 4, 0, 0, 0

LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE,1, " PONER MINUTOS"
LCDOUT $FE,$8F, 0
PAUSE 50
LCDOUT $FE,$8F, 1
PAUSE 50
LCDOUT $FE,$8F, 2
PAUSE 50
LCDOUT $FE,$8F, 3
PAUSE 50
LCDOUT $FE,$8F, 4
PAUSE 50
LCDOUT $FE,$8F, 5
PAUSE 50
LCDOUT $FE,$8F, 6
PAUSE 50
LCDOUT $FE,$8F, 7
PAUSE 50
LCDOUT $FE,$8F, 8
PAUSE 50

LCDOUT $FE,$C0, "-<<", dec (MINUTOS),">>+ INICIAR"
PAUSE 250
IF MAS OR MENOS = 1 THEN
GOSUB TECLAS_DE_SELECCION
ENDIF
IF ENTER = 1 THEN
SEGUNDOS = 60
MINUTOS = MINUTOS - 1
GOSUB CONTEO
ELSE
GOSUB PANTALLA_PRINCIPAL
ENDIF
TECLAS_DE_SELECCION:
IF MAS = 1 AND MINUTOS = 99 THEN
MINUTOS = 0
ENDIF
IF MENOS = 1 AND MINUTOS = 0 THEN
MINUTOS = 100
ENDIF

IF MAS = 1 THEN
MINUTOS = MINUTOS + 1
ENDIF
IF MENOS = 1 THEN
MINUTOS = MINUTOS - 1
ENDIF
GOSUB PANTALLA_PRINCIPAL

PRESENTACION:
LCDOUT $FE, 1 ' LIMPIAR LCD
For A = 0 to 13
LOOKUP A,[ " BIENVENIDO " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, $C0
For A = 0 to 14
LOOKUP A,[ " MINUTERO V1.0 " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, 1 ' LIMPIAR LCD
For A = 0 to 11
LOOKUP A,[ " DERECHOS " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, $C0
For A = 0 to 12
LOOKUP A,[ " RESERVADOS " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, 1 ' LIMPIAR LCD
For A = 0 to 14
LOOKUP A,[ " REALIZADO POR: " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, $C0
For A = 0 to 15
LOOKUP A,[ "REIMY VILLAMIZAR" ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, 1 ' LIMPIAR LCD
For A = 0 to 15
LOOKUP A,[ " I . U . N . P . " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
LCDOUT $FE, $C0
For A = 0 to 12
LOOKUP A,[ " 09/08/2010 " ],B
LCDOUT $FE,$0C,B
GOSUB PAUSA_12SEG
NEXT
RETURN
CONTEO:
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE,1, " TEMPORIZANDO "
LCDOUT $FE,$C0,"----",dec(MINUTOS),":",dec(segundos),"-PARAR-"
SEGUNDOS = SEGUNDOS - 1
GOSUB PAUSA_11SEG
IF MINUTOS = 0 AND SEGUNDOS = 0 THEN
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE,1, " FINALIZADO "
LCDOUT $FE,$C0,"----",dec(MINUTOS),":",dec(segundos),"-PARAR-"
PORTA.3 = 1
GOSUB PAUSA_11SEG
PORTA.3 = 0
PORTA.3 = 1
GOSUB PAUSA_11SEG
PORTA.3 = 0
PORTA.3 = 1
GOSUB PAUSA_11SEG
PORTA.3 = 0
PORTA.3 = 1
GOSUB PAUSA_11SEG
PORTA.3 = 0
PORTA.3 = 1
GOSUB PAUSA_11SEG
PORTA.3 = 0
GOSUB Procesando
ENDIF
IF SEGUNDOS = 0 THEN
GOSUB PAUSA_11SEG
MINUTOS = MINUTOS - 1
SEGUNDOS = 59
CALL PARAR
GOSUB CONTEO
ENDIF

PARAR:
IF MENOS = 1 THEN
GOTO Procesando
ELSE
GOTO CONTEO
ENDIF
END

PAUSA_11SEG:
PAUSE 1000
RETURN
PAUSA_12SEG:
PAUSE 200
RETURN
 
hola gente :)
les cuento que estoy intentando hacer un variador brushless con pic, ya hice uno con componentes dicretos que funciona aqui pueden verlo andando. es un poco voluminoso y complicado asi que, ahora quiero hacerlo con un pic utilizando pbasic para programar el micro pero, tengo un problema, basandome en el funcionamiento del bldc discreto, he creado una rutina en pbasic que a segun mis calculos, deberia funcionar igual pero no funciona.
aca subo el rar con el diseño completo y su codigo fuente en basic para ver si me pueden dar una mano y asi saber que estoy haciendo mal para corregirlo. lo que hace el circuito, es detectar una secuencia de numeros binarios del 1 al 6 y a segun el numero que entre, sera el estado en sus salidas.
saludosss a todos...
 

Adjuntos

  • proyecto bldc.rar
    30.7 KB · Visitas: 192
Hola D@rio

para ver si me pueden dar una mano y asi saber que estoy haciendo mal para corregirlo.....

si gustas lo intento :LOL:


Código:
CMCON = 7 'Aqui creo que esta mal reviza la ficha tecnica del micro hay un apartado que te dice
 que numero utilizar, asi los estas definiendo todos como digitales y necesitas un analogico...
si no lo en cuentras postea
 TRISA=%00000000 ' en el puerto que conectes el pote del puerto A que son Analogicos lo defines como entrada eje TRISA=%00000001 el pote conectado en RA0/AN0
 porta=%00000000 ' este no es muy importante ahi pones en bajo todas las salidas del portA
 trisb=%01110000  'Defines del puerto B el 4,5,6 como entrada y el resto como salida
 portb=%01110000 ' inicializas del puerto B el 4,5,6 en estado Alto el resto en bajo
 frec var byte ' aqui declaras la variable frec cuyo valor solo puede ser de 0 a 7
hasta ahi se entiende lo que quiero decir...

Otra cosa podrias subir el archivo en livewire (creo que es livewire) del link para ver el comportamiento... y asi tener una mejor idea de lo que hace????
 
Última edición:
hola lubek.
aca te dejo los archivos livewire del bldc discreto. no se si habras simulado el circuito en proteus, si asi fue, debes haber notado que al potenciometro lo lee bien y que la variacion del pwm es correcta. el problema que tiene mi circuito, es que los puertos RB0 a RB2 no funcionan como el programa lo indica. cuando en el programa dice:
paso4:
pwm 2,b0,5
high 4
goto loop
empieza el problema de que el puerto B no responde como debiera.
veras, el circuito que estoy intentando hacer, es una especie de decodificador binario que en funcion del numero binario que detecta conmuta dos salidas del pic enviando por una, un pulso pwm y pr la otra, un uno logico simultaneamente.
con esto, consigo conmutar los mosfets del inversor trifacico segun la señal de zerocrossing que obtengo del circuito con lm324.
tengo la impresion de que se puede detectar numeros binarios de otra manera con picbasic pero no se me ocurre mas que lo anterior...
aca dejo el codigo pbp.
ah lubeck, el cmcon=7, es para desactivar los comparadores del puerto A y convertirlos en en E/S digitales y esto me sirve porque lo que estoy intentando detectar, son 1 y 0´s
saludosss

Código:
  CMCON=7        
 TRISA=%00000000        
 porta=%00000000        
 trisb=%01110000        
 portb=%01110000      
 frec var byte
 loop:
 pot portb.3,137,frec
if portb.4=1 then paso1
low porta.0
low portb.1
if portb.5=1 then paso2
low porta.0
low portb.2
if portb.4 and portb.5=1 then paso3
low porta.1
low portb.2
if portb.6=1 then paso4
low porta.1
low portb.0
if portb.4 and portb.6=1 then paso5
low porta.2
low portb.0
if portb.5 and portb.6=1 then paso6
low porta.2
low portb.1
 goto loop
 paso1:
 PWM porta.0,frec,5
 high portb.1
 goto loop
 paso2:
 PWM porta.0,frec,5
 high portb.2
 goto loop
 paso3:
 pwm porta.1,frec,5
 high portb.2
 goto loop
 paso4:
 pwm porta.1,frec,5
 high portb.0
 goto loop
 paso5:
 pwm porta.2,frec,5
 high portb.0
 goto loop
 paso6:
 pwm porta.2,frec,5
 high portb.1
 goto loop
 end
 

Adjuntos

  • proyecto bld live.rar
    22.2 KB · Visitas: 154
Última edición:
no se si habras simulado el circuito en proteus, si asi fue, debes haber notado que al potenciometro lo lee bien y que la variacion del pwm es correcta.

no entiendi muy bien que es lo que necesitas con el pote en rb3 esta configurado como salida...
o sea que el micro esta mandando una señal al pote no al revez eso es lo que necesitas...

por otro lado por lo que me doy cuenta es que en las entradas y salidas hay un conflicto con respecto al diagrama...
este ultimo codigo lo modificaste al inicial, cambio el diseño de proteus tambien???
 
no entiendi muy bien que es lo que necesitas con el pote en rb3 esta configurado como salida...
o sea que el micro esta mandando una señal al pote no al revez eso es lo que necesitas...

por otro lado por lo que me doy cuenta es que en las entradas y salidas hay un conflicto con respecto al diagrama...
este ultimo codigo lo modificaste al inicial, cambio el diseño de proteus tambien???

jajaja.. :Dtenes razon, el codigo que colgue, es de una practica anterior... ya lo edite y ahora si esta el que deje en el rar.
con respecto al RB3, es verdad, tambien estaba mal. ya lo corregi, pero sigue igual.:cry:
saludosss
 
hola amigos foreros estoy casi iniciandome en la programacion de pic con pic basic pro y micro code studio , leyendo un libro de programacion encontre un ejemplo de un programa que hace que aparezca una persona en una matrix de 7*5 levantando las manos , utilizo el pic 16f628
el puerto A y el Bcomo salidas el programa compilo normal pero al momento de simularlo con proteus me doy cuenta que pin RA6 no funciona .
e leido su dattasheett pero no lo entiendo muy bien,si alguien me podria ayudar quisas sea el problema la configuracion de dicho pines del puertoA como salida
alli adjunto el archivo pbp y la simulacion en proteus
 

Adjuntos

  • Nueva carpeta.rar
    29.3 KB · Visitas: 164
Atrás
Arriba