Autor Tema: ¿Cómo usar TOCKI?  (Leído 19500 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
¿Cómo usar TOCKI?
« en: 10 de Agosto de 2006, 12:07:54 »
Hola, ya sé como funciona el TMR0, cuando se utiliza para producir retrasos o interrupciones, el cual es una contador ascendente, que se va incrementando con cada cuatro ciclos de reloj del pic. Cuando éste se desborda, se activa la bandera T0IF, y de esa manera se puede comprobar su desbordamiento. Pero lo que quiero saber es como funciona cuando trabaja recibiendo pulsos externos. Como quiero hacer un tacómetro, dicen de introducirle los pulsos por la el pin 4 de la puerta A para contarlos, y lo que quisiera saber si el temporizador trabajaría de la misma manera, así que se desbordaría una vez introducido un número concreto de pulsos, pero entonces no entiendo como cuenta los pulsos. Como yo programo en ensamblador, o por lo menos lo intento y voy a utilizar un 16f84a, cuando vaya a 6000 rpm,(una locura, nunca lo haré) me mandará 12000 pulsos, y como a mi me gustaría tomar muestras cada 250 milisegundos, tengo un valor de 3000 pulsos, como se guarda eso, cuando los registros son de 8 bits. Tendré que utilizar cuatros, uno para unidad, decena, centena y millar.
Gracias y saludos.
« Última modificación: 10 de Agosto de 2006, 13:35:10 por Lorenzo »

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo usar TOCKI?
« Respuesta #1 en: 10 de Agosto de 2006, 20:14:53 »
este es un contador de pulsos por ra4 y visualizacion de pulsos
la otra idea esperemos a los compañeros del foro y nos ayuden.

LIST P=16F84A
      #INCLUDE<P16F84A.INC>

;DECLARACION DE VARIABLES

PORTA      EQU   05
PORTB           EQU   06
STATUS           EQU   03
TMRO_OPT   EQU   01
REG1           EQU   0E
REG2           EQU   0F
REG3           EQU   10
   

   ORG   00
   GOTO   INICIO


TABLA   ADDWF   PCL,1
   retlw   b'00111111';0
   retlw   b'00000110';1
   retlw   b'01011011';2
   retlw   b'01001111';3
.   retlw   b'01100110';4
   retlw   b'01101101';5
   retlw   b'01111100';6
   retlw   b'00000111';7
   retlw   b'01111111';8
   retlw   b'01100111';9
RETARDO   MOVLW   .80
   MOVWF   REG1
DEC3   MOVLW   .40
   MOVWF   REG2
DEC2   MOVLW   .20
   MOVWF   REG3
DEC1   DECFSZ   REG3,1
   GOTO   DEC1
   DECFSZ   REG2,1
   GOTO   DEC2
   DECFSZ   REG1,1
   GOTO   DEC3
   RETURN

;CONFIGURACION DE PUERTOS

INICIO   BSF     STATUS,5
        MOVWF   0F
       MOVLW   PORTA
       CLRF   PORTB
        MOVLW  B'10101111'
        MOVWF   TMRO_OPT
        BCF     STATUS,5
        CLRF   PORTA     
        CLRF    PORTB

IVA   CLRF    TMR0   
PARADA  MOVF    TMR0,0
   CALL    TABLA
   MOVWF    PORTB
   CALL    RETARDO
   MOVLW   .10
   XORWF    TMR0,0
   BTFSS    STATUS,2
   GOTO    PARADA
   GOTO    IVA   
   END

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #2 en: 11 de Agosto de 2006, 06:29:30 »
Hola microcom, ante todo muchisimas gracias por contestar. Le he incluido a tu código algunas etiquetas para yo poder diferenciar bien el programa, ya que estoy empezando y así es más fácil para mí, espero que no te moleste. Pero ese, es un programa que lo que hace es visualizar en un display el contador del TMR0, pero lo que yo quiero es saber el número de pulsos en una cantidad de tiempo, que en principio sería de 250 milisegundos. Para temporizar podría utilizar una rutina de retardo a través del TMR0, pero ya no lo podría utilizar como contador, para averiguar el número de pulsos introducido en el tiempo estimado. También podría hacer una rutina de retardo utilizando variables, y dentro de ella utilizar una para ir sumando los pulsos introducidos por TOCKI, (pero éste sólo cuenta hasta 256) y una vez pasado ese tiempo mostrarlo en el display, y memorizar el número de pulsos en dos variables. Tengo ideas, pero no sé si serán correctas.
Gracias y saludos.


LIST P=16F84A
      #INCLUDE<P16F84A.INC>

;DECLARACION DE VARIABLES

PORTA      EQU   05
PORTB           EQU   06
STATUS           EQU   03
TMRO_OPT   EQU   01
REG1           EQU   0E
REG2           EQU   0F
REG3           EQU   10
   

   ORG   00
   GOTO   INICIO
   
   
;RUTINA PARA MOSTRAR NUMERO DISPLAY del TMR0.

TABLA   ADDWF   PCL,1      
   retlw   b'00111111';0
   retlw   b'00000110';1
   retlw   b'01011011';2
   retlw   b'01001111';3
.   retlw   b'01100110';4
   retlw   b'01101101';5
   retlw   b'01111100';6
   retlw   b'00000111';7
   retlw   b'01111111';8
   retlw   b'01100111';9
   
 ;RUTINA PARA PRODUCIR UN RETRASO DE UNOS 150 MISCROSEGUNDOS.
 
 RETARDO   MOVLW   .80      
   MOVWF   REG1
DEC3   MOVLW   .40
   MOVWF   REG2
DEC2   MOVLW   .20
   MOVWF   REG3
DEC1   DECFSZ   REG3,1
   GOTO   DEC1
   DECFSZ   REG2,1
   GOTO   DEC2
   DECFSZ   REG1,1
   GOTO   DEC3
   RETURN

;CONFIGURACION DE PUERTOS.

INICIO   BSF     STATUS,5
        MOVWF   0F
       MOVLW   PORTA
       CLRF   PORTB
        MOVLW  B'10101111'
        MOVWF   TMRO_OPT
        BCF     STATUS,5
        CLRF   PORTA     
        CLRF    PORTB
       
;PROGRAMA PRINCIPAL.       

IVA   CLRF    TMR0   
PARADA  MOVF    TMR0,0
   CALL    TABLA
   MOVWF    PORTB
   CALL    RETARDO
   MOVLW   .10
   XORWF    TMR0,0      ;Si TMR0 ha llegado a diez se para y sino continúa.
   BTFSS    STATUS,2
   GOTO    PARADA
   GOTO    IVA   
   END

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo usar TOCKI?
« Respuesta #3 en: 11 de Agosto de 2006, 16:03:03 »
esperemos amigo algun samaritano nos colabore en nuestra inquietud yo estare averiguando para darte un poco de ayuda.

saludos

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ¿Cómo usar TOCKI?
« Respuesta #4 en: 11 de Agosto de 2006, 17:55:31 »
Lorenzo lo mejor sería que uses un pic que tenga al menos 2 timers.

Si bien es posible hacer 'delays' por software, te sería muy problemático ver que hacer si justo el registro del TIMER0 desborda por superarse los 255 pulsos.

De todas formas, es factible hacerlo con loops de tiempo con instrucciones pero teniendo en cuenta esta limitación.

A propósito, ¿sabes la frecuencia de dichos pulsos?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #5 en: 11 de Agosto de 2006, 18:53:48 »
Hola, pues no hace falta utilizar dos registros, ya que al hacer los cálculos, se me fue la olla, y no me di cuenta que tenía que dividir los pulsos entre 60 segundos. Cuando el motor está a ralentí está sobre 800 rpm, que equivale a 13.3 revoluciones por segundo, y como emite dos pulsos por revolución, da 26.6  pulsos por segundo, es decir, se produce un pulso cada 37.5 milisegundos, lo que equivale a 26.6 Hz. Si lo ponemos a 6000 rpm, son 100 revoluciones por segundo, por lo tanto se produce 200 pulsos por segundo, por lo que se produce un pulso cada 5 milisegundos, lo que equivale a una frecuencia a 200 Hz. Así que como tomo muestras de 250 milisegundos, el máximo de pulsos contados será de 50, que creo que es un valor bastante adecuado para guardarlo en registro. De esta manera nuca se desbordaría el TMR0, ya que cuando se tomara la muestra, lo obligaría a resetearse. Con estos números si veo la posibilidad de hacer el retraso con bucles y registros.
 Lo suyo sería tener dos contadores, uno para producir la temporización y otra para contar los pulsos, pero entonces tendría que cambiar de pic, pero lo quiero hacer con el 16f84, aunque me cueste un poco más, ya que quiero controlar bien este pic antes de empezar a utilizar otro más potente, ya que mi principal cometido es aprender, porque si no fuera así, haría cualquiera que hay por las diversas páginas de la red.
Gracias y saludos.
« Última modificación: 11 de Agosto de 2006, 19:18:08 por Lorenzo »

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #6 en: 11 de Agosto de 2006, 19:55:36 »
Hola, otra cosa, para introducir los pulsos por TOCKI, ¿habría que poner un resistencia en serie con el la entrada de la puerta para limitar la entrada de corriente o no hace falta? Me acabo de dar cuenta que si lo hago la cuenta con 50 pulsos, entonces me sale una resolución de de cada pulso equivaldría a 120 rpm, una resolución nada aceptable. Una solución sería multiplicar el valor obtenido del contenido del TMR0 y multiplicarlo por 4, para que nos diera una resolución de 30 revoluciones por pulso. Creo que empezaré a hacerlo y ver lo que no va e ir probando.
Gracias y saludos.
« Última modificación: 11 de Agosto de 2006, 20:13:02 por Lorenzo »

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo usar TOCKI?
« Respuesta #7 en: 11 de Agosto de 2006, 20:49:41 »
claro para poder identificar los pulsos debes mandar una resistencia a tierra.
 
siga asi amigo.
« Última modificación: 11 de Agosto de 2006, 20:51:13 por microcom »

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #8 en: 12 de Agosto de 2006, 15:33:23 »
Me acabo de dar cuenta que si lo hago la cuenta con 50 pulsos, entonces me sale una resolución de de cada pulso equivaldría a 120 rpm, una resolución nada aceptable. Una solución sería multiplicar el valor obtenido del contenido del TMR0 y multiplicarlo por 4, para que nos diera una resolución de 30 revoluciones por pulso. Creo que empezaré a hacerlo y ver lo que no va e ir probando.
Gracias y saludos.

Hola, me estoy dando cuenta que tengo la cabeza fatal, ya que cuando cuenta 50 pulsos en 250 milisegundos, como son 4/250 milsegundos, me da 200 pulsos en 1 segundo, que multiplicado por 60 segundos, sería 12000 pulsos, y que como son 2 pulsos por revoución, me da 6000 rpm, es decir, un cálculo perfecto. Ahora viene mi problema, tengo que visualizar 6000 rpm en cuatro displays de 4 segmentos, cuando obtengo del TMR0 50, pero no sé como atacar a esta rutina, ya que como los registros son de 8 bits. Hay decodificadores que controlen 4 displays, que visualicen mandandole un en decimal, como por ejemplo, el decimal 6000. No quiero que me den el código, sino que me indique o me oriente la forma de atacar este problema.
Gracias y saludos.

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #9 en: 12 de Agosto de 2006, 17:37:33 »
Hola, el número de pulsos obtenidos, lo tengo que multiplicar por 120 y así me dará el el número de que tengo que plasmar en el display, pero claro está, no sé cómo hacer estas operaciones. Si paso 6000 a binario me sale un número de 16 bits "00001011101110000", pero la verdad que no sé como guardarlo, ni tampoco cómo se pude representar, salvo que haya algún decodificador que pueda hacer ésto, aquí estoy un muy mucho perdido, me estoy comiendo el coco y no veo como hacerlo. Mientras espero a algún compañero que me pueda orientar, lo seguiré intentando.
Gracias y saludos.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo usar TOCKI?
« Respuesta #10 en: 12 de Agosto de 2006, 17:51:30 »
amigo vas a guardar 1 por 1  al llegar a 255 para pasar a 256 solo debes incrementar en 1 un registro ejemplo reg_alto= valor de mas de 8 bits
reg_bajo= 255
incf reg_bajo,1 al hacer este incremento se desbordaria el contador reg_bajo y pasaria a 0
preguntas por el carri e incrementas el reg_alto que quedaria =1  00000000 que en otras palabras seria 256 .vuelve a incrementar el reg_bajo hasta llegar a desbordarse y cuando esto suceda incf  reg_alto,1 y quedaria 10 00000000 en otra manera 512 y asi sucesivamente.

saludos.

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #11 en: 12 de Agosto de 2006, 18:19:47 »
Hola microcom, muchimas gracias por contestar. Lo que dices podría valer para contar y poder almacenar en dos bytes, pero yo voy a contar pulsos durante 250 milisegundos, ya que hacerlo con mayor duración, no se vería el display a tiempo real, y se produciría la actualización del display cada segundo. Si voy a 6000 rpm, se producen 100 rps, que son 200 pulsos por segundo, y como tomo muestras de 250 ms, el máximo valor sería de 50, ese valor sí se puede guardar en una variable, lo que pasa es que no sé como hacer la operación matemática de multiplicar eso 50 por 120, para que me dé las 6000 rpm para mostrar en el display. De verdad microcom que te agradezco la colaboración que me estás prestando.
Gracias y saludos.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo usar TOCKI?
« Respuesta #12 en: 12 de Agosto de 2006, 18:45:50 »
amigo tu puedes como la multiplicacion es una suma sucesiva ejemplo 4*5=20
5+5+5+5 sumas el cinco cuatro veces e ir decf el 4
120*50
120 +120 +120
pero al momento de que la suma sea mayor de 255 debes incf el registro de mayor valor
y seguir sumando 120 + 120 ....
pero dedes de ir decf el 50 para da la operacion necesaria.
« Última modificación: 12 de Agosto de 2006, 18:51:06 por microcom »

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #13 en: 12 de Agosto de 2006, 20:53:45 »
Hola, gracias microcom, después de decirte que no se podía, me di cuenta de que sí, lo que pasa es que no he podido contestar por la niña, que me quitó el ordenador. Como bien dices, lo he hecho como dices, pero con una ligera variación, ya que no puedo incrementar de 50 en 50 120 veces, ni al contrario, porque entonces no saldría bien los increntos, así que lo he hecho de una manera diferente. En las variables NUMERO Y NUMERO1 se guardarán el número a mostrar en los displays. Ahora sólo me queda como aprender a mostrarloen los displays. Te muestro el trozo de código para contabilizar los pulsos, si ves algo mal me lo dices.


         movf   TMR0,W
         movwf   REVOLUCION
                  
         
         movf   REVOLUCION,W
         movwf   CONTADOR1
INCREMENTO1   
                          movlw   .120
         movwf   CONTADOR
INCREMENTO   
                          incf   NUMERO
         btfsc   STATUS,C
         incf   NUMERO1         
         
         decfsz   CONTADOR
         goto   INCREMENTO
         decfsz   CONTADOR1
         goto   INCREMENTO1

Desconectado Lorenzo

  • PIC16
  • ***
  • Mensajes: 110
Re: ¿Cómo usar TOCKI?
« Respuesta #14 en: 13 de Agosto de 2006, 11:40:13 »
Hola microcom, me he dado cuenta que sí se puede hacer lo que dices, de sumar de 120 en 120, siendo estas veces, el número de pulsos contados, pero bueno, me voy dando cuenta de cada vez aprendo más cosas, y que entre machacar códigos y con la ayuda de los foreros al final voy consiguiendo poquito a poco conseguir las cosas. Lo que si me gustaría, es que si veis algo mal, os ruego que me corrijais.
Gracias y saludos.

;Rutina de para reconocer los impulsos del TMR0.

   
         movf   TMR0,W
         movwf   REVOLUCION
         clrf   NUMERO
         clrf   NUMERO1
                  
         
INCREMENTO1   movlw   .120
         addwf   NUMERO,F
INCREMENTO   
         btfsc   STATUS,C
         incf   NUMERO1
         bcf      STATUS,C   
                  
         decfsz   REVOLUCION
         goto   INCREMENTO1
« Última modificación: 13 de Agosto de 2006, 11:44:26 por Lorenzo »