TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: YF-21 en 16 de Abril de 2004, 23:54:00
-
Entre los mensajes aparece un amigo que pregunta la manera de realizar un conteo de eventos externos, retomando la pregunta, creo que hay un registro ( por ahora no he estudiado acerca de eso o al menos no lo tengo a la mano
) que se puede utilizar como oscilador o contador ¿Cuál es y como se configura o funciona?
Por favor, creo que esto es realmente importante ya que un contador es indispensable para muchas aplicaciones
-
Pues los timer, se pueden configurar que sean incrementados con el clock interno o bien con uno externo, osea contador de pulsos externos. No todos...
Mira en el data... uno tiene la posibilidad de usar un cristal de paso bajo, hasta 200KHZ, pudiendo usar uno de 32,678KHz si se quiere por ejemplo hacer un RTC presiso y poder usar el cristal principal a la frecuencia que se quiera, por ejemplo 40MHz (en los 18f)
También tienes la posibilidad de contar pulsos externos, que es lo que quieres, de una señal que sea síncrona o asíncrona.
Si usas el timer en conjunto con el módulo CCP, en modo comparador, puedes hacer que cuando la cuenta llegue a un número concreto se genere una interrupción, ponga a nivel alto un pin o genere un evento de disparo del AD... De nuevo mira el data...
-
Bueno, Gracias cucaracha, la primera parte lista ... ahora lo siguiente, me imagino que la direccion donde se guardan la cuenta de los eventos la puedo designar yo, tan solo le añado al registro que designé el valor del contador de pulsos (1 o 0) y así se hace .... o no ¿?
-
Si usas el TMR0 podrás contar hasta 255, puedes usar directamente el registro del TMR0 o otro cualquiera copiando en él el valor del TMR0. Si desearas contar más de 255 puedes hacer que cuando el TMR0 se desborde se incremente otro registro y cuando este se desborde se incremente otro más etc.
Si dispones de 16F87x puedes usar el TMR1 que es temp/cont de 16 bits.
Un saludo
-
Hombre todo depende de lo que quieras hacer. Por que no comentas un poco el tema... y así te podremos dar una respuesta más concreta.
-
De lo que se trata es lo siguiente ...
Quiero activar un pistón neumatico que bloquee cada carga de 10 piezas cualquiera, por ejemplo contar 10 cajas (con un infrarrojo) y entonces activar el piston con una electrovalvula y su fase de potencia (optoacoplador) entonces es contar 10 eventos y activar una salida
-
En ensamblador:
- Debes programar RA4 como entrada de contaje
- Debes programar RA4 para que cuente con flancos de subida o bajada
- Debes cargar inicialmente el TMR0 con: 255-10+1=246=F6 (10 piezas)
- Debes detectar cuando se desborda el TMR0, chequeando el bit T0IF
En C: ... es mucho más sencillo
Un saludo
-
Gracias camaradas, poco a poco avanzando en el camino de los pics
-
Ya funcionó ... aunque el problema mas serio es el de ser preciso en el tiempo de contaje
POR CIERTO LOS QUE HAGAN UN CONTADOR EXTERNO NO SE OLVIDEN DE PONERLE RUTINA DE RETARDO
Es imposible que uno pueda pulsar un boton por tan solo 1u seg.
Por eso a mi no me funcionaba al simularlo en proteus
-
Otra opcion mas confiable que detecté es aplicar un bucle hasta que el boton de contado se suelte y es mas confiable que utilizar un contador de tiempo ya que si se queda atorado o el objeto a contar lo mantiene presionado cierto tiempo, lo contaria como mas de 1 si se aplican bucles de tiempo ¿esta claro? ... creo que hasta yo me confundí con mi explicacion
-
Hola, eso es lo que se llama antirrebote...
todos los contactos actuan con el efecto de accion-reaccion, como la maza que golpea un yunque... rebota... los contacto hacen igual..
y esos rebotes son tomados como aperturas y cierres de contactos... que en el peor de los casos puede llegar a 80 ms..
yo lo que hago es, al sensar que un contacto es puesto a masa, salto a una subrutina de retardo de 80 ms.. luego senso nuevamente si esta a masa... si aun esta a masa, espero a que suelte (verifico si es 1, y quedo en un loop)
esto es una de las posibilidades y segun el caso....
Norberto