Curso de programación de PIC en PICBasic Pro

ayuda por fa' hola a todos estando "cacharreando" y repasando el libro: Basic para pic me doy cuenta que no puedo leer con un 16f877a los pulsos generados por el mismo si le ingreso pulsos de otro pic los lee bien pero los suyos no puse el osciloscopio para ver si generaba pulsos y si genera, a que se debe esto aguien tiene idea de que me quedaría mal en en codigo?
 

Adjuntos

  • prueba funciones.rar
    35.5 KB · Visitas: 113
Última edición:
Que tal!! a todos!! tengo un inconveniente en mi programacion en un pic16f887 ya que deseo obtener de 2 a 4 salidas PWM controladas por ADC del pic, por ejemplo el AN0 controla en PWM_1, el AN1 controla el PWM_2 y asi sucesivamente. Hasta ahora he podido hacerlo con un solo PWM ya que si pongo 2 PWM hay un solapamiento del micro, ya que necesito controlar por PWM 4 dispositivos diferentes independientemente uno del otro, ademas he probado usando el PWM tanto como por software como por hardware si tener un buen resultado Si alguien sabe como resolver este tipo de problema con gusto lo agradeceria.

Ese micro solo tiene dos modulos CCP, yo he trabajado con pwm de manera independiente pero solo con 2 motores, hay otros micros que manejan mas modulos CCP

la instrucción que utilizarías es HPWM, con esta instrucción el micro puede realizar otras tareas

en este mismo curso hay varios ejemplos de como utilizar HPWM
 
Amigos me pueden ayudar en detectar cual es el error en esta programacion porque cuando le programo al pic no me funciona es un pic 16F628A es el programa para un variador de velocidad de un motor DC gracias ayuuuuuuuuuuuuuuuuuuuuuuuda maestros
'****************************************************************
'* Name : VARIADOR DE VELOCIDAD.BAS *
'* Author : [CHRISTIAN BENAVIDES] *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 01/06/2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
botsubir VAR portb.1
botbajar VAR portb.2
LED VAR portb.3
FREC VAR BYTE
bandera VAR BIT
FREC = 125

HIGH LED
PAUSE 500
LOW LED

PROG:
PWM PORTB.0,FREC,30
LOW LED
IF botsubir=0 THEN SUBIR
IF botbajar=0 THEN BAJAR
bandera =0
GOTO PROG
SUBIR:
IF FREC>249 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC+25
GOTO prog
BAJAR:
IF FREC<26 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC -25
GOTO prog
aviso:
high led
goto prog
end


deberias especificar que es lo que pretendes hacer con el programa. te pregunto: en la simulacion funciono?. al quemar el pic muestra errores?. si pretendes variar a diferentes velocidades te recomiendo que en ves de PWM utilices HPWM. esta instruccion permite que el micro haga varios trabajos mientras hpwm hace su trabajo. ha si me explicas que pretendes en cada linea con gusto te hare mi aporte.

0-255
0-500
saca una constante 255/500 (Nota:tambien puede ser 500/255)
255/500=0.51 ESTA ES TU CONSTANTE

el valor que se almacene en tu variable pulsos lo multiplicas por 0.51 y se lo asignas a vel
VEL=pulsos*0.51 ejemplo
si pulsos vale 500
VEL=500*0.51=255
ejemplo 2
si pulsos=300
VEL=300*.51=153

Y ESTE SERIA EL VALOR DEL PWM
NOTA: si tu cte es 500/255=1.9607.. la operacion seria pulsos/cte

espero te sirva...

GRAAACIAS PARCERISIMO JAJAJA.....

ME FUNCIONO EN LA SIMULACION ESO ES UN PASO GRANDE. POR AHORA QUIERO PREGUNTARTE: PORQUE LA INSTRUCCION PULSOUT Y PULSIN NO PRODUCEN NINGUN EFECTO EN EL PIC 12f683. ALMENOS EN LA SIMULACION NO MUESTRA NADA, ME SERSIORO CON EL OCSILOSCOPIO Y HUMMMM, PROBE CON OTROS MICROS Y SI FUNCIONA. HICE EL EJERCICIO CON UN 12f629 Y PULSOUT ME JENERA EN SIMULACION, EL PROGRAMA PRINCIPAL LO HICE EN UN 16f628A Y PERFECTAMENTE HACE LO QUE ESPERABA.
QUICIERA DE NUEVO ABUSAR DE TU CONOCIMIENTO PARA RESOLVER EL PROBLEMA QUE PRESENTA EL 12f683.

TE ESTOY SUPER AGRADESIDO....
 
Última edición:
Ese micro solo tiene dos modulos CCP, yo he trabajado con pwm de manera independiente pero solo con 2 motores, hay otros micros que manejan mas modulos CCP

la instrucción que utilizarías es HPWM, con esta instrucción el micro puede realizar otras tareas

en este mismo curso hay varios ejemplos de como utilizar HPWM

Yo se como usar el HPWM la cuestion es q se me desborda el micro si ves el el programa lo veerias mejor
 
Yo se como usar el HPWM la cuestion es q se me desborda el micro si ves el el programa lo veerias mejor

en el programa que subiste no estas utilizando la instruccion HPWM, estas haciendo PWM por software
por eso no puedes tener de manera independiente el PWM

Código:
la declaracion que tienes
DEFINE CCP1_REG PORTC 'Hpwm 1 pin port

DEFINE CCP1_BIT 2 'Hpwm 1 pin bit
                 ESTE ES EL CANAL 1
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port

DEFINE CCP2_BIT 1 'Hpwm 2 pin bit                 ESTE ES EL CANAL 2
es correcta, pero utilizas la instruccion PWM
es lo que debes de cambiar por HPWM canal(1 o 2),vel(0-255), frecuencia
puedes tener solo dos instrucciones HPWM  solo necesitas caracterizar la entrada
analogica para que conviertas ese valor a un numero entre 0 y 255
POR EJEMPLO
if (B0>0) and (B0<5) THEN 

     VEL=10
     endif 

     if (B0>5) and (B0<10) THEN 

    VEL=30
     endif

     if (B0>10) and (B0<15) THEN

     VEL=60

     endif 

     IF (B0>15) AND (B0<20) THEN 

     VEL=100
     endif

     IF (B0>20) AND (B0<25) THEN 

     VEL=127
     endif

     IF (B0>25) AND (B0<28) THEN 

     VEL=160
     endif 

     IF (B0>28) AND (B0<30) THEN 

     VEL=200
     endif 

     if (B0>30) and (B0<32) then

     VEL=255

     endif
    
    HPWM 1,VEL, frecuencia

NOTA: te recomiendo cambiar los if pos CASE

HAY QUE HACER LO MISMO PARA EL OTRO CANAL

ESPERO TE SIRVA...
 
como puedo hacer que un HPWM de frecuencias menores de 100 Hz porque tienen un limite minimo de frec para un determinado pulso. La cuestion es que quiero un pulso con frecuencias mas bjas agradeceria su pronta respuesta gracias
 
hola amigos ... bueno amigos soy estudiante de telecomunicaciones y bueno como la base de las telecomunicaciones es la electronica lleve los cursos pero solo lo basico y bueno uno de los cursos q me gusto fue el de uPic y bueno ahora estoy aprendiendo la programacion en el PBP y bueno necesito ayuda .. lo que pasa es que no c como programar un registro de desplazamiento, he visto en muchos foros y paginas de internet pero no encuento la programacion en basic asi que recurro a uds .. miren es simple el circuito y lo que quiero hacer.
regdez.JPG
la idea es hacer que los un led y luedo pase desde la primera posicion hasta la ultima ... espero que me entiendan y me puedan ayudar ... de antemano muchas gracias ... y fue algo genial que ayan habierto esta linea para aprender la programacion es PBP
 
ola a todos alguien me podia me puede explicar como seprograma el codigo fuente para usb en pic18f2550 o los comandos de instrucciones para poder expirementar los pic 18f2550 pos usb. gracias
 
amigos tengo un problema necesito que un pic 16f877 identifique una trama de pulsos que son enviadas desde un sensor son 41 bits que contienen una cabecera que no cambia nunca que es 11011 con esto se puede identificar donde comienza la señal el protocolo de funcionamiento lo pueden ver en http://www.rd-1000.com/chpm78/lacrosse/Lacrosse_TX23_protocol.html hasta el momento he programado algo pero creo que es muy lento y no funcionara
espero puedan ayudarme
gracias
 
hasta el momento he programado algo pero creo que es muy lento y no funcionara

puedes subir lo que llevas???
---------------------------------
Utiliza las interrupciones y mide los tiempos entre ellas ... configura el flanco y no recuerdo que mas... pero asi se hace...
 
gracias por responder mira el programa se trata de un sensor de viento que mide direccion y velocidad y envia la trama que postie anteriormente todo esto es mostrado en un lcd 16x2 solo tengo problemas con la identificacion me lo demas funciona super ademas me envia datos a un telefono que utilizo como modem
 

Adjuntos

  • programas.txt
    9.3 KB · Visitas: 88
solo tengo problemas con la identificacion

que te parece si nos concentramos en esto... según entiendo la comunicación con el anemómetro es bidireccional o sea que tienes que mandar un estado bajo en el puerto de la comunicación y no lo vi...
lo esta considerando????...

(recuerda que yo es la primer vez que veo tu código y quizás tu ya llevas meses asi que paciencia porfavor)
 
Lpena628

Interpreto que el BUS en el estado Idle se encuentra en 1 siempre, cuando el Master (tu µControlador) lo pone a 0 durante 500 ms el Slave (Sensor de Velocidad y Dirección del Viento) envia un 1 y lo pone a 0 hasta que comienza la secuencia de los 41 bit's.

Creeria que la indicación de señal a trasmitir por el Slave comienza en el pulso de 1 que envia el mismo Slave, dando equis tiempo a que el µControlador se acomode para recibir el encabezado 11011 y el resto de la información.


Saludos, JuanKa.-
 
Última edición:
realmente no lo considere porque solo lo alimente y luego lo conecte a un osciloscopio y corrobore la trama de pulsos

Ok... como bien te comenta juanka tienes que poner en bajo durante 500ms el puerto, con eso le dices al dispositivo que le estas pidiendo informacion despues este te va amandar un pulso diciendo que esta listo para enviar y despues todo el protocolo asi que lo que tienes que hacer es estar cambiando el puerto...

es decir algo asi...

TrisB.0=0...
low portb.0
pause 500

TrisB.0=1..
a=portb.0

etc...

ademas te recomendaria que pusieras una resistencia pullup en ese puerto.....
 
Última edición:
ola a todos espero me ayuden quiero hacer un conteo por un lcd de 0-100 con un ckto de un sensor de proximidad en este link esta http://www.pablin.com.ar/electron/circuito/varios/proximid/index.htm. conectarlo al pin 8 ( del integrado lm567) en el portb.0 con el pic16f84a y cuando llege a 100 vuelva ah contar de nuevo.


pulso var byte
a var byte
inicio:
count portb.0,1000,pulso
pulso=0
Lcdout $FE,1
Lcdout $FE,$82,"conteo:"
LcdOut $FE,$C5,dec pulso
a=pulso+1

GoTo Inicio
End

al hacer esta programacion los numeros me salen aleatoriamente sin conectarlo al pin 8 del ckto
 
Última edición:
:unsure: esto es lo que necesitas???

Código:
pulso var byte
a var byte
inicio:
count portb.0,1000,pulso
pulso=0
Lcdout $FE,1
Lcdout $FE,$82,"conteo:"
LcdOut $FE,$C5,dec pulso
a=pulso+1
[B]If a>=100 then a=0[/B]
GoTo Inicio
 
Atrás
Arriba