# Contador modulo 16 y modulo 8 con pic 16f84, con interruptor optico de ranura



## javierrbo (Ene 11, 2009)

que tal compañeros
necesito armar un contador con un pic16f84 dicho contador utiliza un optointerruptor o sensor de barrera o como se llame, con el se generan los pulsos a contar, pero el detalle mas que nada es en la programacion del pic ya que se como conectar los componentes, el contador debe hacer el conteo de 0000 hasta 1111 (modulo 16)  ya que este en 1111 se regresa a 0000 y asi sucesivamente y tambien debe contar de 0000 a 0111 (modulo 8) e igual cuando este en 0111 bricar a 0000 y asi sucesivamente
debo utilizar un pin para establecer que contador sea, por ejemplo si en dicho pin es un 1 que cuente modulo 16 y si es cero sea un contador modulo 8 o alreves no importa.
otro detalle es que solo necesitoque el conteo lo haga digamos internamente osea que no necesito que me muestre los cero y unos con leds o display u otra cosa.
solo necesito una salida (pin) este pin se pondran en 1 (estado alto) cuando el contador sea 0000 y 0001 en ambos contadores en este pin le conectar un rele claro con un transistor.


----------



## javierrbo (Ene 11, 2009)

he buscado información en internet y en algunas paginas encontre que para usar el pic16f84 como contador externo se debe usar el pin RA4/TOCKI pero la verdad es que no se programar en ensamblador alguien me podria decir como hacer el programa en picbasic pro ya que siempre he usado este programa


----------



## sangreaztk (Ene 12, 2009)

Te pongo los pasos para usar el Timer0 como contador de eventos externos, solo que se supone que son de los PIC16F87x, igual y es lo mismo para el PIC16F84.



> 1. Asegurar que RA4 se encuentre configurada como entrada.
> 
> 2. Se decide si se va a trabajar con el prescaler utilizando el bit RSA (con 0 se asigna al Timer).
> 
> ...



Te sugiero que revises el data sheet del PIC.

Buena Vibra!


----------



## javierrbo (Ene 13, 2009)

como se podria hacer en picbasic pro?


----------



## javierrbo (Ene 16, 2009)

afuerzas tengo que utilizar el pin RA/4 tocki o puedo usar cualquier otro pin de cualquier puerto


----------



## sangreaztk (Ene 17, 2009)

Si te la ingenias puedes usar cualquier otro pin, pero ya no sería con el Timer0. Puedes estar leyendo constantemente el estado de un pin, pero si haces eso la frecuencia máxima que puedas obtener sera menor a la que tendrías con el Timer0.
Buena Vibra!


----------



## josb86 (Mar 27, 2010)

sangreaztk dijo:


> Te pongo los pasos para usar el Timer0 como contador de eventos externos, solo que se supone que son de los PIC16F87x, igual y es lo mismo para el PIC16F84.
> 
> 
> 
> ...



Hola me puedes ayudar mira estoy trabajando con 16f876a y quiero hacer el conteo de pulsos para despues sumarlo y guardarlos pero quiero trabajar por flanco por que he visto que si coloque que sume cuando este el pin en cero si este pin queda en cero el sigue contando y no uiero esto si no que cuando pase a cero cuanto una sola ves mira aqui coloco mi programa en basic te agardeceria la ayuda, veo que aqui colocas el registro OPTION_REG pero la verdad no se como utilizar esto

este es el del 16f876a
bit 7 RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabled by individual port latch values
bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on RA4/T0CKI pin
0 = Internal instruction cycle clock (CLKO)
bit 4 T0SE: TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on RA4/T0CKI pin
0 = Increment on low-to-high transition on RA4/T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module


este es mi programa
Define	LCD_DREG	PORTB
Define	LCD_DBIT	4
Define	LCD_RSREG	PORTB
Define	LCD_RSBIT	2
Define	LCD_EREG	PORTB
Define	LCD_EBIT	3
TRISB = %00000011	' en el puerto B coloco el pin 0 y el 1 como entradas y el resto como salidas
contador    var	byte		   
contador = 0
Pause 500		    
loop:

   Lcdout $fe, 1		        ' Clear LCD
   IF   PORTB.0 = 0 THEN 
        Contador = CONTADOR + 1
   ENDIF
   pause 50 
   Lcdout "sumatoria: ", DEC contador	  
   Pause 100		            
   Goto loop		            
   End


----------

