# Contar pulsos con PIC BASIC PRO



## jofear (Feb 14, 2010)

Hola...bueno antes ya habia dejado un mensaje sobre el infrarrojo...pero ya pude conectarlo y ya me lo detecta....pero......tengo algunas fallas posiblemente de conexiones pero nesesito de su ayuda... miren... el emisor infrarrojo lo tengo conectado con el anodo (+)a un pin de un PIC16F648A, y el catodo (-) a tierra....entonces en pbp con pulsout mando un pulso de determinada duracion al diodo...y si emite....(aunque agradezo si me dicen como hacerle con llos push button  porque los suelto y al parecer el estado sigue en 1 por un largo tiempo... incluso aveces se qita hasta que vuelvo a presionar el boton)

Mi principal problema esta en el receptor... utilizo un fototransistor, con el emisor a tierra..y el colector a 5v mediante una resistencia de 40k (2 de 20k) y en esa union saco un alambre (es en protoboard) hacia un 74ls14, para que me de los valores alto y bajo legibles para el pic....y asi es si me los da... 

Pero bien, quiero saber cual seria la mejor manera de detectar los pulsos que me da a raiz de que el fototransistor sea alumbado por ir, o alguna forma de comunicar? esque lo que quiero es comunicacion entre dos pics... vamos hacer un control remoto!..... pero quiero hacerlo con infrarrojo no con RF ni nada....cmo me recomiendan hacerle en pbp para que la comunicacion sea exitosa..., que me recomiendan? 




ha y otra duda.... hay que poner resistencia de pull-up a el pin donde esta conectado el fototransistor? de que capacidad o como seria? y

bueno ojala puedan ayudarme con lo de pbp...seria a reloj interno del 16f648a que es a 4mhz....
espero que me ayuden amigos! 
cuidence
saludos desde mexico!


----------



## Apollo (Feb 15, 2010)

Hola jofear:

No es muy recomendable conectar directamente el LED al puerto del PIC, (Ya sea porque el puerto no pueda darte la corriente necesaria para hacer la transmisión a distancia, o porque se pueda dañar el puerto por exceso de corriente).

Siempre es mejor poner un transistor como "driver" del led para lograr mayor distancia y evitar daños al PIC.

Todo depende como utilices el comando PULSOUT, en función del pulsador.
Una de las maneras mas fáciles que utilizo es el comando BUTTON, ya que es más sencillo darle los parámetros que crear unas rutinas para ello.

Con el receptor, 40K se me hace una resistencia demasiado alta para que pueda trabajar el foto-transitor, normalmente llevan unas mas bajas, entre 10 y 5K  dependiendo claro de los límites del mismo.

Espero y te sea útil esta información.

Saludos al foro


----------



## donelias (Oct 17, 2010)

Apollo dijo:


> Hola jofear:
> 
> No es muy recomendable conectar directamente el LED al puerto del PIC, (Ya sea porque el puerto no pueda darte la corriente necesaria para hacer la transmisión a distancia, o porque se pueda dañar el puerto por exceso de corriente).
> 
> ...



disulpenme que reviva el tema pero alguien tiene idea del tiempo de muestreo que tiene la funcion button para un crystal de 4mhz, porque lo voy a usar para medir pusos de un encoder que esta solidario a un piston neumatico. 
gracias!


----------



## reyvilla (Oct 17, 2010)

directo del manual del pbp...

*5.5. BUTTON​*BUTTON , Pin , Down , Delay , Rate , Bvar , Action , Etiqueta
Lee Pin y opcionalmente ejecuta anti-rebote y auto-repetición . Pin automáticamente se toma como
entrada .Pin debe ser una constante , 0 - 15 , o una variable que contenga un número 0 - 15 (p.ej. B0) ó un
número de pin (p.ej. PORTA ,0)
Down Estado del pin cuando se oprime el pulsador ( 0 ..1)
Delay
Contador de ciclos antes de que comience la auto-repetición(0..255). Si es 0 ,no se
efectua anti-rebote ni auto.repetición .Si es 255 se eliminan rebotes , pero no autorepetición.
Rate Valor de auto-repetición (0..255)
Bvar
Variable con tamaño de byte usada internamente para conteo de demoras y
repeticiones,Dene ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar
del programa.
Action Estado del pulsador a ser actuado.
Etiqueta La ejecución comienza en esta etiqueta si es cierto Action.
´ goto notpressed if button not pressed on Pin2
BUTTON PORTB ,2,0,100,10,b2,0,notpressed
BUTTON necesita ser usado dentro de un loop para auto-repetición para funcionar adecuadamente.
BUTTON permite eliminar rebotes , demorando la ejecución de un programa por un período de
milisegundos para permitir que los contactos se asienten .La demora por defecto es 10 ms. .Para
cambiarlo a otro valor use DEFINE .
´ setea la demora de anti-rebote a 50 ms
DEFINE BUTTON_PAUSE 50
BUTTON_PAUSE debe estar en mayúsculas.
En general , es más fácil leer el estado del pin con un IF..THEN que usar el comando BUTTON .
IF PORTB,2 = 1 THEN notpressed

saludos...​


----------



## donelias (Oct 18, 2010)

reyvilla dijo:


> directo del manual del pbp...
> 
> *5.5. BUTTON​*BUTTON , Pin , Down , Delay , Rate , Bvar , Action , Etiqueta
> Lee Pin y opcionalmente ejecuta anti-rebote y auto-repetición . Pin automáticamente se toma como
> ...



gracias, necesito usar button por el antirebote, asi no me complico con más cantidad de codigos ya que si el sensor ranurado queda en la misma posicion sin el antirebote puede hacer que siga contando pulsos sin que el piston avance.

aunque se que puedo hacer tambien

subir:
if portb.5=1 then 
goto continue
endif
goto subir
continue:
if portb.5=1 then
goto subir
endif

pero me llevaria mucho mas codigo y dudo que sea mas preciso que el button


----------



## reyvilla (Oct 19, 2010)

bueno lo del comentario de que es mejor el if then que el button lo sujiere el mismo manual del pbp que tengo, lo que hice fue copiar y pegar esa informacion. ahora con respecto a que es mejor, si es contar pulsos esta el comando "COUNT" el cual se encarga de contar pulsos en un pin, ahora si es un encoder es mas facil ya que el mismo debe de tener minimo dos receptores y un emisor y depende ed cual receptor se active primero cuentas en ascendente o descendente. bueno de todas maneras espero halla aclarado un poco tu duda si necesitas el manual me avisas.


----------



## donelias (Nov 9, 2010)

reyvilla dijo:


> bueno lo del comentario de que es mejor el if then que el button lo sujiere el mismo manual del pbp que tengo, lo que hice fue copiar y pegar esa informacion. ahora con respecto a que es mejor, si es contar pulsos esta el comando "COUNT" el cual se encarga de contar pulsos en un pin, ahora si es un encoder es mas facil ya que el mismo debe de tener minimo dos receptores y un emisor y depende ed cual receptor se active primero cuentas en ascendente o descendente. bueno de todas maneras espero halla aclarado un poco tu duda si necesitas el manual me avisas.




gracias esta semana lo programo y pruebo.


----------

