TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Lorenzo en 10 de Agosto de 2006, 12:07:54

Título: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom 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
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom 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
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix 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?
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 11 de Agosto de 2006, 20:49:41
claro para poder identificar los pulsos debes mandar una resistencia a tierra.
 
siga asi amigo.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom 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.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo 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
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 14 de Agosto de 2006, 13:22:22
amigo como vas a captar los pulsos por medio de un fototransitor ;
los display son de anodo o catodo.

 
amigo estoy perdido en tu idea.
Porque decrementas revolucion ;
debes decrementar la variable 50


cincuenta  equ  .50

tambien podias hacer asi

sss      clrf  tmro
eeee   movf   tmro,0       
          xorlw  .120           
          btfss   status,2        ; cuando el tmro llega 120
          goto    eeee            ; decremento el 50
          decfsz  cincuenta,1  ; es como multiplicar 50*120
          goto     sss
          end             ; aqui ya tubu que haber llegado a 6000

la niña ya usa el computador que bien......
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 14 de Agosto de 2006, 14:47:18
Hola, microcom, prefiero no tocar el archivo del TMR0, ya que éste nunca va a parar de contar, por eso lo hago con la registo REVOLUCION, ya que el valor será introducido en dos bytes, que son NUMERO y NUMERO1, no sé si te referiras a eso. Ahora tengo otro problema, que como lo quiero multiplexar por cuatro display, tendría que estar constantemente refrescandolos, para que se viera fijos, pero como tengo que hacer el retardo de 250 milisegundos en el programa principal, pues no puedo hacer bien el multiplexado. Lo que no sé si con un lcd tendría ese problema, o ¿también hay que hacer como con los 7 segmentos? Seguramente con otro pic y otro lenguaje sería mucho más fácil, pero hay que aguantar como un campeón, ya sea por aprender, que es de lo que tengo muchas ganas . Lo primero que voy a hacer y supongo que será muy fácil, la de contar los pulsos y mostralos por la puerta B, así que dentro de un rato lo probaré en el coche.
Gracias y saludos.
P.D: si ves que no sé contestarte a tus preguntas, es por mi ignorancia al respecto, por lo que pido que me disculpes.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 14 de Agosto de 2006, 15:00:59
el lcd te envita ese problema de refrescar los display porque un numero que mandes queda guardado el la memoria del lcd
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix en 14 de Agosto de 2006, 15:27:07
Lorenzo, ahora que veo que es lo que intentas hacer, te propongo otra cosa.

1) ¿Puedes contarme como es la señal que te envía tu circuito externo? 
2) ¿Porqué quieres usar el TIMER0 en forma de contador?

Si quieres medir Revoluciones por Minuto, y encima el único timer que tienes lo usas para contar pulsos, te está faltando algo con qué comparar y por eso le estas dando vueltas al tema sin poderle ver la solución.

Al medir pulsos tan esporádicamente pierdes precisión, pero lo que puedes hacer (se me ocurre) es que cuentes por ejemplo que tiempo te demora en contar N pulsos.

Si por ejemplo fijas 10 Pulsos, bueno, pues te dedicas a 2 cosas en tu software

a) Usar el TIMER0 como timer y utilizar además otro registro auxiliar para que puedas contar el tiempo a 16 bits o más.  Por ejemplo definiendo un registro TIMER0H que se vaya incrementando cada vez que el timer0 se desborda

b) Ir leyendo todo el tiempo buscando la presencia del pulso que te indica que pasó una revolución.

Por el punto b) es importante que describas como es la señal de entrada.  Si es sólo un 'flanco' entonces estamos en problemas pero si es un pulso en alto que dure un buen tiempo en dicha condición entonces tenemos muchas chances de poderlo registrar con precisión.

Luego, puedes hacer un pequeño cálculo/relación entre el tiempo medido y las RPM que representan dicho tiempo.

Ojo que si trabajas en ensamblador tal vez te convenga directamente hacer una tabla para evitar tener que hacer una multiplicación y/o división.  No se qué precisión necesitas pero lo de la precisión lo puedes ajustar simplemente contando 'más pulsos' y relacionando eso con los timer.




Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 14 de Agosto de 2006, 17:03:05
Hola, el tipo de imagen es ésta, el coche a ralentí da una frecuencia de unos 26 ó 27 Hz, y el pulso tiene una duración de 1.7 milisegundos y una amplitud de 5 voltios. perdonad si la imagen no es muy buena, pero la cámara no es buena para estas cosas, y el osciloscopio no tiene transferencia de datos. He hecho la prueba y no ha salido como esperaba [/img](http://www.imaxenes.com/mini/100_04761jf60bd.jpg) (http://www.imaxenes.com/imagen/100_04761jf60bd.jpg.html)[/img]

Y aquí os dejo el código que he utilizado:

      LIST   P=16F84A
      
STATUS      EQU      03
TRISA      EQU      05
TRISB      EQU      06
PORTA      EQU      05
PORTB      EQU      06
OPTION_REG   EQU      01
TMR0      EQU      01
RP0      EQU      05
W      EQU      00
F      EQU      01

   
REVOLUCION   EQU      10
RETRASO      EQU      11
RETRASO1   EQU      12
RETRASO2   EQU      13
NUMERO      EQU      14
NUMERO1      EQU      15



      ORG      0
            


;Configuramos los archivos.
            
CONFIGURACION   
         
      bsf   STATUS,RP0
      clrf   TRISB
      movlw       b'10000'
                                movwf       TRISA
      movlw   b'10101000'
      movwf   OPTION_REG
      bcf   STATUS,RP0
      clrf   PORTA
      clrf   PORTB



            
;Rutina de retardo de unos 250 milisegundos.
            
INICIO         
      clrf   TMR0
      movlw   .4
      movwf   RETRASO2

PAUSA      
      movlw   .250
      movwf   RETRASO1

PAUSA1      
      movlw   .250
      movwf   RETRASO
      
PAUSA2      
      decfsz   RETRASO
      goto   PAUSA2
      decfsz   RETRASO1
      goto   PAUSA1
      decfsz   RETRASO2
      goto   PAUSA
            


;Rutina de para reconocer los impulsos del TMR0.

   
      movf   TMR0,W
      movwf   REVOLUCION
      movwf   PORTB
      goto    INICIO

                   

                               END



Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 14 de Agosto de 2006, 18:04:19
que te marcó el ensayo amigo solo usas 1 display
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix en 14 de Agosto de 2006, 18:37:53
Lorenzo, ¿Qué es lo que te salió en la prueba?
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 14 de Agosto de 2006, 19:10:55
Hola, yo puse a la salida de la puerta B, una linea de leds para leer el valor de ésta en valor binario. Supuestamente estando el motor a ralentí, la puerta debería marcar el valor 00000110, que es el 6 en decimal con oscilaciones a 00000111, 7 en decimal, ya que la que frecuencia a ralentí es de 26 ó 27 Hz, es decir, 26 ó 27 pulsos, pero cómo cuento pulsos cada 250 milisegundos, de ahí sale el valor de 6 ó 7. Pues estando a ralentí, la puerta no marca nada, aunque a veces enciende algunos leds y se apagan, pero que se pueden considerar apagados, cuando acelero empieza a encender leds y a apagarse. Cuando pongo el motor a régimen de 1500 rpm con una salida de unos 52 Hz, me debería marcar en la puerta 1101, que en decimal es el 13, que es la cuarta parte de 52 Hz, y me sale 101000, que corresponde al 40 en decimal. Creo que el código está bien, pero algo está fallando.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 14 de Agosto de 2006, 19:47:32
ESPEREMOS Y ANALIZAMOS EL ASUNTO AMIGO ::ESPEREMOS QUE NOS DICE EL VIEJO MAUNIX.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 14 de Agosto de 2006, 20:04:19
amigo como vas a captar los pulsos por medio de un fototransitor ;
los display son de anodo o catodo.

 
amigo estoy perdido en tu idea.
Porque decrementas revolucion ;
debes decrementar la variable 50


cincuenta  equ  .50

tambien podias hacer asi

sss      clrf  tmro
eeee   movf   tmro,0       
          xorlw  .120           
          btfss   status,2        ; cuando el tmro llega 120
          goto    eeee            ; decremento el 50
          decfsz  cincuenta,1  ; es como multiplicar 50*120
          goto     sss
          end             ; aqui ya tubu que haber llegado a 6000

la niña ya usa el computador que bien......

Hola microcom, perdona, no me di cuenta de las preguntas que me hiciste. Los pulsos los meto directamente, es decir, después de pasar por el diodo rectificador, resistencias y zéner. Ya la niña me quita el ordenador, tiene ocho años, he podido comprar un portátil, y el de sobremesa que es un pentium III, se lo he dejado para ella.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix en 15 de Agosto de 2006, 14:41:31
Lorenzo podríamos, si te parece, generar en el simulador estímulos que simulen tu entrada de 'ralentí'. 

Si en el simulador funciona pero no en el hardware es muy probable que tu tengas algún otro problema con el hardware.

¿Qué opinas?    Si estás de acuerdo puedo de ver de armarte un proyecto completo para MPLAB 7.4x y lo subo así lo puedes probar.


Saludos
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 15 de Agosto de 2006, 15:22:38
Lorenzo podríamos, si te parece, generar en el simulador estímulos que simulen tu entrada de 'ralentí'. 

Si en el simulador funciona pero no en el hardware es muy probable que tu tengas algún otro problema con el hardware.

¿Qué opinas?    Si estás de acuerdo puedo de ver de armarte un proyecto completo para MPLAB 7.4x y lo subo así lo puedes probar.


Saludos



Hola, maunix no entiendo bien lo que me quieres decir, si te refieres a que quieres hacer, yo tengo el MPLAB 7.4, pero no estoy todavía suelto con él. Yo con el que me defiendo es con la versión 5, pero ahora mismo no lo puedo utilizar, y si tú quieres comprobar algo, te lo agradecería un montón, toda la yuda prestada será bienvenida.
Gracias y saludos.
Hola, no sé si estoy equivocado me das a entend
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 15 de Agosto de 2006, 17:07:34
Hola Lorenzo, a pedido de microcon te estoy respondiendo.

Aclaremos unos asuntos que tienes mal entendidos:

*   Primero como e leido que solo deseas usar el 16F84, no te queda otra que usar el TMR0 para contar las RPM y para mEdir los 250 ms deberás hacerlo por software.

*   Segundo, debes tener en cuenta que si mides cada 250 ms tendrás una resolución de 120 RPM con la cual deberás hacer un montón de cálculos para poder representarlos en los display, por lo tanto te acosejo que uses un periodo de muestreo de 0.3 seg, de esta forma obtendrás una resolución de 100 RPM y no necesitas cálculos, ya que te representará directamente las RPM del motor tal como los tacómetros de serie RPMx100.

*   Tercero, cada ves que llegas a los 0.3 seg. debes borrar el TMR0 forzosamente, de lo contrario en la proxima lectura que realices te estará indicando un valor erroneo.

*   Con el valor que obtienes del TMR0 lo unico que debes hacer es convertirlo de binario (que es como sale) a BCD, para poder representarlo en los display.

*   Si tu no pretendes llegar a más de 6000 RPM con 2 display es más que suficiente, de esta forma conseguirás una lectura de asta 9900 RPM, si deseas que pase esa lectura deberás usar 3 display y podrás llegar a las 25500 RPM, y no más.

*   Los display debes trabajarlos de manera multiplexada, por lo tanto es conveniente que realices una rutina que se encarge de ello con solo llamarla con un call.

*   Ten en cuenta que los ojos son lentos para responder a los cambios y si estos son muy continuos les es molesto, por lo tanto no intentes conseguir gran cantidad de refrescos por segundos, con 0.3 seg de muestreo ya se empieza a tornar molesto, por lo tanto con 0.25 ya lo es.

Bueno, espero que esto te sea de ayuda, si necesitas más respuestas, pues, solo pregunta.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix en 15 de Agosto de 2006, 17:32:23
Lorenzo podríamos, si te parece, generar en el simulador estímulos que simulen tu entrada de 'ralentí'. 

Si en el simulador funciona pero no en el hardware es muy probable que tu tengas algún otro problema con el hardware.

¿Qué opinas?    Si estás de acuerdo puedo de ver de armarte un proyecto completo para MPLAB 7.4x y lo subo así lo puedes probar.


Saludos


Hola, maunix no entiendo bien lo que me quieres decir, si te refieres a que quieres hacer, yo tengo el MPLAB 7.4, pero no estoy todavía suelto con él. Yo con el que me defiendo es con la versión 5, pero ahora mismo no lo puedo utilizar, y si tú quieres comprobar algo, te lo agradecería un montón, toda la yuda prestada será bienvenida.
Gracias y saludos.
Hola, no sé si estoy equivocado me das a entend


El simulador del 7.4 tiene años de mejoras respecto al que trae la version 5.x

Es por ello que si simulas y anda la simulación de seguro que debiera andar en el hardware.

Si no anda, es porque tienes algún problema en TU hardware, a eso me refería

Te sugiero , ahora que tienes PC nueva, que te bajes el MPLAB 7.41 .  De la version 5.x a la actual no solo que hay muchos bugs corregidos, pics nuevos soportados y demás, sino que de seguro es mas confiable a la hora de ensamblar.

Saludos


Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 15 de Agosto de 2006, 18:49:14
Hola, gracias por responder, seguramente es que estoy hecho un lio. Te voy respondiendo a los puntos como tú lo has puestos:

- Primero, uso el temporizador para contar los pulsos por TOCKI, no sé si te refieres a esto y la rutina de retardo lo hago mediante una de 250 ms.
- Segundo, ahora mismo paso de los displays y quiero mostrar en binario el número de pulsos contados en 250 ms y mostralos por la puerta B.
- Tercero, con esta subrutina creo que lo borro justamente antes de empezar la cuenta de los 250 ms

;Rutina de retardo de unos 250 milisegundos.
            
INICIO         
         clrf   TMR0
         movlw   .4
         movwf   RETRASO2

PAUSA      
         movlw   .250
         movwf   RETRASO1

PAUSA1      
         movlw   .250
         movwf   RETRASO
         
PAUSA2      
         decfsz   RETRASO
         goto   PAUSA2
         decfsz   RETRASO1
         goto   PAUSA1
         decfsz   RETRASO2
         goto   PAUSA
            


;Rutina de para reconocer los impulsos del TMR0.

   
         movf   TMR0,W
         movwf   REVOLUCION
         movwf   PORTB
         goto    INICIO


Por ahora los demás punto los dejo en el aire, ya que hasta que no sea capaz de representar el número de pulsos en binario, no quiero seguir con lo demás, ya que antes hay que aprender a hacer lo más fácil y después lo más complicado, por lo menos para mí.


Te muestro el esquema, y perdona pero no puedo por ahora hacerlo en mejor calidad.

http://www.imaxenes.com/imagen/tacometro1wx01e5.bmp.html

Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: maunix en 16 de Agosto de 2006, 09:30:18
Lorenzo, Vamos a ir poniendo las cosas en claro.

Teniendo 1 solo timer hay 2 caminos.

1) Tomas una cantidad de pulsos y mides el tiempo que llevó hacerlo.  Configuras el TIMER0 y vas contando también sus desbordes hasta que llegas por ejemplo a contar 10 pulsos.  De acuerdo a cuanto tiempo mediste hasta que ocurrieron esos 10 pulsos serán las RPM que mediste

2) Usas una rutina de temporización FIJA por software (como tú estas haciendo) y cuentas la cantidad de pulsos.


Bien, hasta ahí vamos bien.  Tu has elegido la 2da opción.

Yendo a tu esquema, veo que usas un zener de 5.6V? He visto bien?  SI es así, te pido que lo cambies!  5.25V a 5.5V suele ser la máxima tensión que soporta un PIC.  Usa uno de 4.7 o 4.2V cualquier valor mayor que 4 y menor que 5 te dará una lectura como en alto.  Y digo esto pensando en las entradas Schmitt Trigger que necesitan una tensión de 0.8Vdd para tomarse como alto.

Sabiendo esto, podríamos estar frente al caso en que tal vez.. digo solo 'tal vez' se haya dañado dicha entrada en el PIC.

Si tienes otro PIC, por favor haz el reemplazo.  Sino, bueno, prueba 'a mano' ir generando pulsos e irlos mostrando directamente en el puerto B.

Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 16 de Agosto de 2006, 11:22:37
Hola, maunix yo he usado la segunda opción porque la primera no sé usarla, aunque siga usando la segunda, me gustaría si fuera posible, que me explicases como hacer la primera con el 16f84a. Lo de usar un zéner de 4.7 voltios, automáticamene lo voy a hacer, así que compraré algunos para tenerlo. Y lo de que pudiera estar el pin 4 de la puerta A, lo voy a comprobar con otro, ya sea por asegurarnos. Por cierto, ¿ves correcto el código para mostrar los pulsos contados en binario a través de la puerta B?
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 16 de Agosto de 2006, 15:54:44
despues nos esplicas como hacer la primera opcion.
bueno estoy atento al proyecto ya que no he tenido la oportunidad de colaborar porque mis conocimientos no medan EN RPM.

PREGUNATS TRIVIALES DISCULPEN.
si ocurren 10 pulsos cuantas RPM HAY?

CUAL ES EL MAXIMO rpm QUE SE MIDE EN EL PROYECTO.


GRACIAS. 
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 16 de Agosto de 2006, 19:52:49
Hola microcom, cada pulso equivale a 120 rpm, una resolución muy baja, ya que mi coche sólo proporciona dos pulsos por revolución, para tener una resolución mayor tendría que aumentar el tiempo de muestra. Podría aumentar dicho tiempo a base de tomar muestras cada segundo, lo que pasa es que entonces la visualización no se correspondería a tiempo real. Aunque podría tomarlo a través del alternador, que podría dar entre 8 y 12 pulsos por revolución En el peor de los casos se podría obtener 26 pulsos cada 250 milisegundos, dando una resolución de unas 7.5 revoluciones por cada pulso, que todavía se podría aumentar más, pero que ahora mismo no es un problema que me preocupe, ya que lo que quiero es arrancar con el proyecto.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 16 de Agosto de 2006, 20:13:53
Hola, y si tomas las revoluciones de los sensores de las revoluciones que las toma de una rueda fónica de la polea del cigüeñal ni te cuento. Te lo digo de memoria, una vez la medí en el coche de mi hermano y me daba una frecuenda de 1000 Hz, lo que proporcionaría que la rueda fónica tendría unos 75 dientes, imagínate, la resolución que daría que cada pulso equivale a 0.01 revolución, más que sobrado para conocer las revoluciones, pero ya dependerá de cada coche.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 10:28:28
Hola a todos, y creo que hay que acomodar la situación.

maunix tus conocimientos son más amplios que los del colega Lorenzo; Que, como el mismo lo dice esta tratando de aprender, y él en un principio esta intentando hacer el tacómetro con el TMR0, si bien esta no es la mejor manera lo quiere hacer así para aprender, por lo tanto creo que sería importante que solo te limites a proponer soluciones o responder a los problemas que se le presenten usando el metodo que el desea ya que si le recomiendas usar el de medir los tiempo, no logrará ni aprender ni uno ni el otro.

jfmateos2, Lorenzo esta tratando de hacer un tacómetro con el TMR0 por lo tanto usar un contador externo, aparte de que lo veo completamente innecesario e inutil, no es una opcion valida en este caso.

microcom te felicito si quieres aprender de este post como controlar y usar el TMR0, por lo tanto es valida tu opinio y el posteo de tus dudas y posibles soluciones, por lo tanto nadie en sus cabales debería ofenderce o mal interpretar tus actividades en este post.

Lorenzo si posteas un programa, hazlo completo y no por partes, ya que un error puede estar en cualquier parte de él.

Esto lo quiero aclarar porque estoy viendo que entre todos no pueden sacar nada en claro, por lo tanto deberemos de abtenernos de hacer comentarios innecesario al tema origuinal del post, seguiremos el proyecto usando el TMR0 (por ahora sacando los datos en binario por el PORTB), y no otro método (los hay varios) OK, esto es para todos. Haber si podemos dejar el proyecto en claro.

Lorenzo, a tu ultimo post te comento que las ruedas fónicas vienen con 58 y 28 dientes, depende la marca del vehiculo, pero no son todos equidistantes, para que te des una ideal, el de 58 dientes esta formado por una rueda que debería tener 60 dientes, pero le an sacado 2, por lo tanto le quedan 58 y entre dos dientes tiene una separacion mucho mayor al resto.

Lorenzo
, el circuito de entrada que as presentado, ¿es el que usas el la realidad y medir directamente desde el auto? o ¿lo estas usando solo en el taller para introducir los pulsos al PIC?

Si es el que usas para medir directamente del auto, desde ya te comento que no es el mejor, por lo tanto deberiamos tratar de mejorarlo ya que no funcionara de manera correcta. Ahora si solo lo usas en el taller es muy complejo y podemos hacerlo más sencillo.

Me gustaria que pongas el programa completo, ya que la parte que colocas, aunque posee unos errores, no estaria mal en pricipio, pero debemos ver como canfiguras los puertos y el TMR0.

         decfsz   RETRASO,F
         goto      PAUSA2
         decfsz   RETRASO1,F
         goto      PAUSA1
         decfsz   RETRASO2,F
         goto      PAUSA

Ahi esta el error, te falta comentar donde debería el PIC guardar el resultado (las ,F agregadas).

Bueno, esperaré tu repuesta.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 17 de Agosto de 2006, 12:48:51
Hola, Carlos muchisimas gracias por contestar, y también a los demás compañeros que han participado, ya que aunque en alguna respuesta no den una solución, pero yo la voluntad la agradezco un montón.  Te dejo aquí mi código completo, o el poquito que he hecho




            LIST   P=16F84A
      
STATUS      EQU      03
TRISA      EQU      05
TRISB      EQU      06
PORTA      EQU      05
PORTB      EQU      06
OPTION_REG   EQU      01
RP0         EQU      05
W         EQU      00
F         EQU      01

   
REVOLUCION   EQU      10
RETRASO      EQU      11
RETRASO1   EQU      12
RETRASO2   EQU      13
NUMERO      EQU      14
NUMERO1      EQU      15



         ORG      0
            
;Configuramos los archivos.
            
CONFIGURACION   
         
         bsf      STATUS,RP0
         clrf   TRISB
         clrf   TRISA
         movlw   b'10101000'
         movwf   OPTION_REG
         bsf      STATU,RP0
         clrf   PORTA
         clrf   PORTB



            
;Rutina de retardo de unos 250 milisegundos.
            
INICIO         
         clrf   TMR0
         movlw   .4
         movwf   RETRASO2

PAUSA      
         movlw   .250
         movwf   RETRASO1

PAUSA1      
         movlw   .250
         movwf   RETRASO
         
PAUSA2      
         decfsz   RETRASO
         goto   PAUSA2
         decfsz   RETRASO1
         goto   PAUSA1
         decfsz   RETRASO2
         goto   PAUSA
            


;Rutina de para reconocer los impulsos del TMR0.

   
         movf   TMR0,W
         movwf   REVOLUCION
         movwf   PORTB
         goto    INICIO
         
         
         END



El tema del circuito es el que pongo directamente en el coche, yo las pruebas las hago directamente en el coche, excepto que le voy a cambiar el zéner por uno de 4.7 voltios, como me aconsejó el compañero maunix. Lo de la rueda fónica, decirte que esos dientes que les falta son para para indicarle la posición del cilindro número 1, también lleva otro sensor llamado sensor de fase situado en el árbol de levas e indica la posición de cada pistón.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 14:04:10
Hola Lorenzo, si, el funcionamiento de la electrónica de un motor la conosco bastante, pero el sensor de fase debes tener en cuenta que no todos los autos lo traen, algunos solo disponen de la rueda fónica.

Pasando al tema que nos compete:

Tal y como suponía tienes varios errores en el programa que as realizado, aquí te dejo el programa, pero bien estructurado:

Código: ASM
  1. LIST            P = 16F84A
  2.         INCLUDE         <P16F84A.INC>
  3.         ERRORLEVEL      -302
  4.  
  5. ;-------------------------------------------------------
  6.  
  7. REVOLUCION      EQU     H'0C'
  8. RETRASO         EQU     H'0D'
  9. RETRASO1        EQU     H'0E'
  10. RETRASO2        EQU     H'0F'
  11.  
  12. ;-------------------------------------------------------
  13.  
  14.         ORG     .0
  15.         bcf     STATUS,RP0
  16.         bcf     STATUS,RP1
  17.         GOTO    CONFIGURACION
  18.  
  19.         ORG     .4
  20.         bcf     INTCON,GIE
  21.         RETURN
  22.  
  23. ;-------------------------------------------------------
  24.  
  25. ;Configuramos los archivos.
  26.  
  27. CONFIGURACION
  28.  
  29.         clrf    PORTA
  30.         clrf    PORTB
  31.  
  32.         bsf     STATUS,RP0
  33.         clrf    TRISB
  34.         movlw   B'00010000'
  35.         movwf   TRISA
  36.         movlw   b'10101000'
  37.         movwf   OPTION_REG
  38.         bcf     STATUS,RP0
  39.         goto    INICIO
  40.  
  41. ;-------------------------------------------------------
  42.  
  43. ;Rutina de retardo de unos 250 milisegundos.
  44.  
  45. INICIO
  46.         clrf    TMR0
  47.         movlw   .4
  48.         movwf   RETRASO2
  49. PAUSA
  50.         movlw   .250
  51.         movwf   RETRASO1
  52. PAUSA1
  53.         movlw   .250
  54.         movwf   RETRASO
  55. PAUSA2
  56.         decfsz  RETRASO,F
  57.         goto    PAUSA2
  58.         decfsz  RETRASO1,F
  59.         goto    PAUSA1
  60.         decfsz  RETRASO2,F
  61.         goto    PAUSA
  62.  
  63.         movf    TMR0,W          ;Rutina para reconocer los impulsos del TMR0.
  64.         movwf   REVOLUCION
  65.         movwf   PORTB
  66.         goto    INICIO
  67.  
  68. ;-------------------------------------------------------
  69.         END

Como podras apreciar hay unas cuantas diferencias, que tratare de explicarte:

INCLUDE , esta instrucción hace que el compilador incluya en tu programa las definiciones para cada una de las funciones de las cuales dispone el PIC, de esta manera no tienes que andar definiendolas tú en el programa, como puedes ver yo las e borrado y el compilador no te tira ningun error.

ERRORLEVEL , esta instruccion le indica al compilador que no te de una advertencia cuando un reguistro no se encunetra en la paguina 0 de la memoria RAM, pero si deseas sacarla no habra problemas, y el compilador te indicara que reguistros estan en una paguina distinta a la cero para que tu prestes atencion si previamente as seleccionado la paguina correcta, esto te ayuda a no comenter errores de paguinacion de RAM.

ORG 0 y ORG4, son las direcciones de arranque y de interrupcion del PIC, despues de ORG0 yo e colocado las 2 instrucciones bcf, para asegurarme de que el PIC se inicialice en el banco de mamoria RAM cero. Luego de ORG 4 coloco desactivar las interrupciones, ya que de la unica forma que llegue a esa posicion es que estas se activen, y si quedan de esa manera haran que tu programa pueda funcionar mal, luego retorno donde estaba con anterioridad.

CONFIGURACIÓN, los clrf deben ir delante de la configuración de los puertos, para asegurarte de que luego de configurados ya se encuentran en el estado deseado.

Se configura puerto B como salida y el pin correspondiente a la entrada de TMR0 (RA4) como entrada.

Hay que acordarce de pasar nuevamente a la paguina cero de la RAM con la funcion bcf, de lo contrario no funcionará el programa.

Con el goto saltamos a la rutina de INICIO, que en este caso esta seguido de lo anterior, pero si de por medio hubiera otra rutina el programa comensaría en un lugar no deseado.

En la sub-rutina de INICIO, estaba casi todo bien, salvo que te faltaba definir el destino de los DECFSZ colocando ",F", si no lo haces el compilador te indicaria una advertencia, no te olvides nunca de definir el destino que para esta y la gran mayoria de las instrucciones pueden ser 2, el propio reguistro que se indica con ",F", o el reguistro W que se indica con ",W"

En el proximo mensaje incluire un circuito de entrada para que puedas sensar bien la señal del auto.

Bueno, espero que puebes esta nueva rutina y me comentes tus dudas y experiencias.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: BrunoF en 17 de Agosto de 2006, 15:19:37
         decfsz   RETRASO,F
         goto      PAUSA2
         decfsz   RETRASO1,F
         goto      PAUSA1
         decfsz   RETRASO2,F
         goto      PAUSA

Ahi esta el error, te falta comentar donde debería el PIC guardar el resultado (las ,F agregadas).

Charly, el ensamblador por defecto, en caso de que no se especifique el destino del resultado de la instrucción, es 1. Por lo tanto, allí no puede estar el error...
Si no pones destino, podras ver que el ensamblador arroja advertencias:
Algo asi como:
"Warning: Using default destination of file(1)"
"Advertencia: Usando destino del registro por defecto(1)"

Sí hubiese sido un error si el destino que se necesitaba era W(0).

Saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 16:54:36
Hola Bruno, eso que comentas yo lo sé, pero a Lorenzo que recien esta queriendo aprender le va a permitir que no se olvide de ese punto. Con respecto al error no esta en ese lugar, si no en la parte de configuración compara mi .asm con el de el y te darás cuenta exactamente cual es el error.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 17 de Agosto de 2006, 17:24:34
Hola, el tipo de imagen es ésta, el coche a ralentí da una frecuencia de unos 26 ó 27 Hz, y el pulso tiene una duración de 1.7 milisegundos y una amplitud de 5 voltios. perdonad si la imagen no es muy buena, pero la cámara no es buena para estas cosas, y el osciloscopio no tiene transferencia de datos. He hecho la prueba y no ha salido como esperaba [/img](http://www.imaxenes.com/mini/100_04761jf60bd.jpg) (http://www.imaxenes.com/imagen/100_04761jf60bd.jpg.html)[/img]

Y aquí os dejo el código que he utilizado:

      LIST   P=16F84A
      
STATUS      EQU      03
TRISA      EQU      05
TRISB      EQU      06
PORTA      EQU      05
PORTB      EQU      06
OPTION_REG   EQU      01
TMR0      EQU      01
RP0      EQU      05
W      EQU      00
F      EQU      01

   
REVOLUCION   EQU      10
RETRASO      EQU      11
RETRASO1   EQU      12
RETRASO2   EQU      13
NUMERO      EQU      14
NUMERO1      EQU      15



      ORG      0
            


;Configuramos los archivos.
            
CONFIGURACION   
         
      bsf   STATUS,RP0
      clrf   TRISB
      movlw       b'10000'
                                movwf       TRISA
      movlw   b'10101000'
      movwf   OPTION_REG
      bcf   STATUS,RP0
      clrf   PORTA
      clrf   PORTB



            
;Rutina de retardo de unos 250 milisegundos.
            
INICIO         
      clrf   TMR0
      movlw   .4
      movwf   RETRASO2

PAUSA      
      movlw   .250
      movwf   RETRASO1

PAUSA1      
      movlw   .250
      movwf   RETRASO
      
PAUSA2      
      decfsz   RETRASO
      goto   PAUSA2
      decfsz   RETRASO1
      goto   PAUSA1
      decfsz   RETRASO2
      goto   PAUSA
            


;Rutina de para reconocer los impulsos del TMR0.

   
      movf   TMR0,W
      movwf   REVOLUCION
      movwf   PORTB
      goto    INICIO

                   

                               END



Gracias y saludos.


Hola a todos, perdona Carlos pero te puse un código que en la parte de la configuración estaba mal, lo que pasa es que como estoy utilizando dos ordenadores puse un código erroneo, en lo referente a lo de bsf STATUS,RP0 en vez de BCF STATUS,RPO, sino fijate en el de arriba que lo expuse hace varios días. Así que paso a explicarte cada cosa que has dicho:
- Lo de la directiva INCLUDE p16f8a me define todos los registros, lo que pasa que me resisto a utilizarlo, ya que como estoy empezando prefiero estar definiendo los registros para que se me queden grabados, lo que pasa que voy a definir exactamente igual que en ese archivo, para que cuando cualquier compañero lo lea, no le cueste trabajo, ya que me lo aconsejón un compañero, no sé si fue maunix.
- Lo de RP1 no lo utilizo porque en el 16f84a da lo mismo el valor que tenga porque nada más tiene 2 bancos.
- Lo de ORG 4 no lo he utilizado porque como no he especificado ninguna interrupción, pues he creido que no hacía falta.
- Lo de clrf, primero he configurado las puertas y una vez vuelto al banco cero, es cuando limpio las puertas con clr.
- Lo de la configuración de la puerta b, la defino como salida y la A, el pin 4 está definido como entrada y las demás como salida, que como ves en el archivo que cito está bien, y te vuelvo a pedir perdón por poner un código erroneo.
- Lo de goto INICIO, no te entiendo bien lo que dices, pero lo que hago es mandarlo a INICIO para que vuelva a hacer el retraso de 250 milisegundos, una vez mostrado los datos en la puerta B.
- Referente en lo de las F, yo las tengo definidas como 1.
Así que creo que he contestado a todas los errores que has visto, por error mío al poner un código incorrecto, que si ves en los que cito ese es el código correcto que yo tengo en el pic.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 17 de Agosto de 2006, 17:35:37
Hola, y para no liar mucho los mensajes os pongo el código que tiene el pic, y lo revisaré para crear más confusión.

   LIST   P=16F84A
      
STATUS      EQU      03
TRISA      EQU      05
TRISB      EQU      06
PORTA      EQU      05
PORTB      EQU      06
OPTION_REG   EQU      01
TMR0      EQU      01
RP0      EQU      05
W      EQU      00
F      EQU      01

   
REVOLUCION   EQU      10
RETRASO      EQU      11
RETRASO1   EQU      12
RETRASO2   EQU      13
NUMERO      EQU      14
NUMERO1      EQU      15



      ORG      0
            


;Configuramos los archivos.
            
CONFIGURACION   
         
      bsf   STATUS,RP0
      clrf   TRISB
      movlw   b'10000'
      movwf   TRISA
      movlw   b'10101000'
      movwf   OPTION_REG
      bcf   STATUS,RP0
      clrf   PORTA
      clrf   PORTB



            
;Rutina de retardo de unos 250 milisegundos.
            
INICIO         
      clrf   TMR0
      movlw   .4
      movwf   RETRASO2

PAUSA      
      movlw   .250
      movwf   RETRASO1

PAUSA1      
      movlw   .250
      movwf   RETRASO
      
PAUSA2      
      decfsz   RETRASO
      goto   PAUSA2
      decfsz   RETRASO1
      goto   PAUSA1
      decfsz   RETRASO2
      goto   PAUSA
            


;Rutina de para reconocer los impulsos del TMR0.

   
      movf   TMR0,W
      movwf   REVOLUCION
      movwf   PORTB
      goto    INICIO

                           END

Espero no haberme equivocado otra vez por mi torpeza a la hora de exponer las cosas, pero ya digo, es que con la leche de tener los dos ordenadores me estoy líando.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 18:03:13
Hola Lorenzo, si quieres tu definir todas las variables para aprenderlas es una cosa, pero si tu deseas que el programa quede bien presentado, lo de no usar el include me parece una burrada, en realidad me parece una burrada también para aprenderlo, ya que el simple hecho de usar un par de veces cada función hace que las apendas, y por otro lado complicas al nuevo usuario que trata de entender un programa, presentandole opciones que normalmente no se usan de esa manera y el usuario aprende a estructurar mal un programa, quien te haya dado ese consejo creo que debería pensarlo nuevamente.

Por otro lado el que vos no hallas configurado las interrupciones no quiere decir que por cosas del destino (una interferencia) no se configuren solas, entonces debes tratar de hebitar que el programa falle ante estos casos, esto lo comento por experiencia, ahora si tu no deseas hacer lo que te comento es lo mismo solo que tienes un mayor riesgo al dejar probabilidades de fallas.

Una pregunta que te haré es sobre que frecuencia de cuarzo que estas usando ya que no logro encontrar si en algun lado lo comentas. Si la frecuencia que usas no es 12MHz desde ya te digo que la rutina de retardo no es la correcta, y para que te des una idea a 4MHz tienes un retardo de 754 mseg y a 20 MHz uno de 150 mseg, por lo tanto con el único que consigues un retardo aproximado a los 250 mseg que deseas es con un reloj de 12 MHz.

Un saludo y espero tu respuesta.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 17 de Agosto de 2006, 18:48:46
bueno si uno tiene un oscilador de 4mhz y uno hace un retardo de 1ms cuanto  retardo real se ejecuta.

a eso tiene que ver con el tiempo de muestreo de rpm.?

muchas gracias


Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 17 de Agosto de 2006, 18:51:09
Hola, Carlos creo que me explicado mal, lo que me aconsejó el compañero que no recuerdo exactamente quien fue, por ejemplo, en vez de escribir STATUS, yo hacía una tradución al español y ponía ESTADO, en vez de PORTA, ponía PUERTAA, entonces me decía que lo escribiera tal como era definido en p16f4a.inc. De aquí en adelante incluiré el archivo 16f84a.inc en la cabecera, porque es lo más correcto y por lo tanto lo quiero hacer así.
Lo de las interrupciones me parece bien el consejo, mejor prevenir que curar.
El oscilador es a 4 Mhz, y te explico en razón de como hice la rutina de esa manera. Como el reloj es de 4 Mhz, cada instrucción tarda en ejecutarse cuatro ciclos de reloj, menos la de salto que tardan 8, pero tomo las primeras, es decir, cada instrucción tarda 1 microsegundo. MI rutina de  retrasos son 250 microsegundos x 250 miscrosegundos x 4 microsegundos me da un total de 250000 microsegundos que pasado a milisegundos son 250. Si estoy equivocado te pediría que me corrigieras. Perdonad por todo los problemas que te estoy dando, pero es que quiero aprender.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: BrunoF en 17 de Agosto de 2006, 19:03:14
Lorenzo. Tu rutina en el MPLAB SIM da 150ms.
Saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 17 de Agosto de 2006, 19:35:24
Hola Brunof, gracias por contestar. Ya que tú manejas mejor que yo el simulador, ¿te importaría aumentar los valores hasta conseguir los 250 milisegundos o aproximadamente?

 clrf   TMR0
      movlw   .4
      movwf   RETRASO2

PAUSA     
      movlw   .250
      movwf   RETRASO1

PAUSA1     
      movlw   .250
      movwf   RETRASO
     
PAUSA2     
      decfsz   RETRASO
      goto   PAUSA2
      decfsz   RETRASO1
      goto   PAUSA1
      decfsz   RETRASO2
      goto   PAUSA


Aunque sigo pensando, que si mi rutina es de 150 milisegundos, los que es la 6.6 parte de un segundo, si divido los 26.6 pulsos que aproximadamente en 1 segundo, entre 6.6 me dará aproximadamente unos 4 pulsos, lo que en binario sería 00000100  y lo que el puñetero no da nada, joder me está dando guerra una cosa tan simple. Supongo que todo lo que aprenda con ésto se quedará bien afianzado.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 19:56:45
Hola Lorenzo, todas las dudas que tengas las preguntas y no son problemas que ocasionas, si no inquietudes que deseas solventar, por lo tanto no hay nada que perdonar.

Ahora recién comprendo lo que me quisiste decis con los de definir la RAM, perdona el mal entendido.

Con respecto a los cálculos que as realizado estan muy mal, la rutina de retardo para un cuarzo de 4MHz debe ser la siguiente:

Código: ASM
  1. INICIO
  2.         clrf    TMR0
  3.         movlw   .197
  4.         movwf   RETRASO1
  5. PAUSA1
  6.         movlw   .253
  7.         movwf   RETRASO
  8. PAUSA2
  9.         nop
  10.         nop
  11.         decfsz  RETRASO,F
  12.         goto    PAUSA2
  13.         decfsz  RETRASO1,F
  14.         goto    PAUSA1
  15.  
  16.         movf    TMR0,W          ;Rutina para reconocer los impulsos del TMR0.
  17.         movwf   REVOLUCION
  18.         movwf   PORTB
  19.         goto    INICIO

Esa rutina te dará una demora de aproximadamente 250 mseg.

Espero te sea de ayuda

Un saludo.

Atte. CARLOS.

Pda. para calcular los retardos, aca te adjunto un programita:
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 17 de Agosto de 2006, 20:14:51
Hola Lorenzo, aquí te dejo un circuito de entrada que funciona muy bien:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=13378.0;attach=1535) (http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=13378.0;attach=1535)

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 19 de Agosto de 2006, 06:10:09
Hola, gracias a todos, estoy simulando el código en proteus, y le introduzco un generador de 26 hz, y me da unos 17 pulsos en binario, por lo que creo que da más de lo que creía, aunque queda por probarlo en el coche. Carlos todavía tengo que probar el circuito que me has puesto. ¿Cómo haceis los cálculos para averiguar el retardo? Yo lo había hecho, como funciona el oscilador a 4Mhz, 250 x 250 x 4 = 250.000 microsegundos=250 milisegundos, o hay que tomar otras precauciones.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 19 de Agosto de 2006, 08:52:33
Hola Lorenzo, yo directamente uso el programa que te e pasado, ni me pondo a hacer los cálculos para una demora, pero si te puedo decir que son más complejos de lo que te imaguinas y por supuesto tenías una equivocación en los tuyos.

Realmente hace tanto que no hago unos de esos cálculos, que ya me los e olvidado, si encuentro la manera de calcularlo la posteo.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 19 de Agosto de 2006, 18:22:00
Hola Lorenzo, yo directamente uso el programa que te e pasado, ni me pondo a hacer los cálculos para una demora, pero si te puedo decir que son más complejos de lo que te imaguinas

Hola Carlos, no entiendo cuando te refieres al programa que me has pasado, supongo que te habrá confundido, si es así, ¿qué programa utilizas para hacer ls demoras?
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 19 de Agosto de 2006, 19:40:02
Hola Lorenzo, si deseas aprender lo que se te enseña o intentamos enseñar, primero debes leer con detenimiento todo lo que se te responde y tratar de razonar lo que se dice OK.

Si miras 3 respuestas mias más arriba, encontrarás que hay un post que tiene un programa adjunto que se llama "Picdel_sp.zip" ese es el programa del cual te hablo.

Espero no lo tomes a mal, pero te daré un consejo, si deseas aprender y que nosotros te demos una mano, tendrás que saber leer todo lo que se te dice, tener una mente habierta a las sugerencias y prestar atención a todo, por mi lado no puedo creer que este programa tan sencillo este llevando 52 respuestas, y solo me cabe una explicación "no atiendes a lo que se te dice" ya que te acabo de dar la rutina de temporización para que funcione de manera correcta y tu me respondes que no funciona (unos post más arriba), lo cual es imposible ya que la e probado fisicamente, por lo tanto estas haciendo las cosas mal y es solo por no prestar atención, como puedes ver somos pocos los foreros que respondemos a tus dudas y es por este motivo que te comento, acuerdate que si tú no te quieres ayudar, nosotros no podemos hacer nada y te aseguro que los foreros se cansan de dar siempre la misma explicación.

Espero no te ofendas, lo que te acabo de comentar (aunque parezca duro) es solo para tu veneficio, ya que el unico damnificado serás tú.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 20 de Agosto de 2006, 11:25:07
Hola, Carlos te voy a contestar al mensaje anterior a éste que has puesto, porque si me callo va a parecer verdad lo que dices sobre mí. Yo procuro aprender todo lo que me intentais enseñar y sobre todo razonarlo, por eso pregunto tanto y me gusta saber el por qué las cosas son así. El programa que me habías puesto para calcular demoras, por cierto, ya lo he guardado a buen recaudo, no lo había visto porque lo habías puesto después de tu saludo, y entonces no me di cuenta de él, confundiendolo con la firma. Lo de 52 respuesta, y desde aquí le agradezco a todos los que habeis participado, en mayor o menor grado o acierto, si te fijas, en tan sólo, los últimos 6 mensajes anteriores es cuando se me ha dado la rutina correcta de retardo, y te puedo garantizar que no soy de las personas que no atiende las cosas (cosa que me ha dolido ya que yo no soy así), lo que pasa que te tienes que dar cuenta, que ésta no es mi especialidad, y me siento como pez fuera del agua, como le pasaría a cualquiera del foro que lo saque fuera de su profesión. Cuando hay gente fuera de mi profesión, que me hacen preguntas sobre lo mío, muchas veces las consideros tontas, pero me tengo que dar cuenta que a ellos les suena totalmente a chino, y darme cuenta que yo llevo ya unos pocos de años en ella. Si lees bien mi mensaje, en el que tú dices que tu rutina de retardo no funciona, no es así, yo nunca puse que fuera tu rutina, y me refería a la mía. ¿Por qué estaba probando mi rutina en vez de la tuya? Porque también estoy aprendiendo Proteus, y quería ver el fallo en mi código, ya que estaba generando un retardo de una tres veces al que yo quería, unos 750 milisegundos, porque como te digo, siempre me gusta ver mis fallos y ver dónde están los fallos para así no volver a cometerlos nunca más, porque hubiera sido más fácil poner tu rutina sin más, pero entonces no aprendo, por eso te digo que presto ateción a todo lo que dicen los compañeros del foro. También te puedo garantizar o por lo menos procuro, que antes de preguntar algo lo busco entre los mensajes anteriores para no sobrecargar el foro con los mismo. Lo que hay compañeros del foro que se cansan de repetir siempre lo mismo, lo puedo compartir, lo que pasa que el que viene nuevo, unos más y otros menos, en éste o en cualquier foro, siempre va a pasar y volverá a preguntar cosas que ya se han contestado. Y ahora, a lo de ofenderme, en ningún momento me he ofendido, en todo caso dolido, por provocar una cosa así, y que tenga que llegar un compañero a decirme lo que has dicho, pero como es una crítica constructiva, y esas son las buenas, te la acepto gustosamente. Y como ya el programa ya funciona, entre otras cosas, gracias a la rutina que has puesto dejo este tema por finalizado. Y desde aquí quiero agradeceros a todas las personas que ayudais a los que empezamos, que lo haceis sin ánimo de lucro alguno, y que generalmente nada más os damos dolores de cabeza, vuestro esfuerzo y tiempo empleado en ello. Así que me gustaría que todos los demás y sobre todo tú Carlos, sigais contestando a mis inquietudes y  no me dejeis abandonado,  :-) ya que es un mundo que me gusta mucho. Os dejo, sigo aprendiendo con proteus viendo los videos tutoriales.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Chaly29 en 20 de Agosto de 2006, 12:32:30
Hola Lorenzo, bueno, perdóname que haya realizado un mensaje que de una u otra forma te haya hecho doler (no a sido mi intención, en ningun momento e pensado en dejar de responde ni tús dudas ni las de ningún forero por supuesto si sé como responderla.

Me parece muy bien que trates de realizar todas las pruebas que creas posible para lograr aprender, pero mi critica anterior no partio de ese asunto, resulta que leyendo tus preguntas y respuestas pareciera que no atiendes a lo que se te comenta, y por este motivo e dicho lo anterior, ¡¡¡OJO!!! no soy el unico que piensa esto despues de leer tus post, por lo tanto estoy completamente de acuerdo con lo que dices e intentas hacer, pero sería conveniente que entonces aclaraces bien las cosas, de esta forma no se te interpretaría que no as leido lo que se te dice y conseguiras una ayuda de mejor manera, ahora yo se el porque tus post "parecen hacer caso omiso a las respuestas" pero si otros foreros lo leen podrian mal interpretarlos igual que yo, por eso te aconsejo que aclares todo bien.

Bueno solo te pido que no tomes a mal ni pienses mal de lo que te dije o digo, es solo por precaución  :mrgreen:

Ahora si tu idea era hacer que se represente el dato en display's ¿por que decides cerrar el tema si el proyecto no esta terminado? no tomes a mal lo dicho por mí de los 50 y tantos mensajes, era solo un ejemplo. Si tienes pensado continuar el tema en otro post sería mejor hacerlo en este para que el proyecto se termine aquí.

Un saludo.

Atte. CARLOS.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Veguepic en 20 de Agosto de 2006, 12:49:29
Hola Lorenzo:

Mira este bosquejo de explicacion del uso del programa para retardos, puede que te sirva.

http://www.todopic.com.ar/foros/index.php?topic=12832.0

Saludos

P.D. Una sugerencia Lorenzo, trata de separar los parrafos para facilitar la lectura.  :wink:
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 20 de Agosto de 2006, 14:14:35
Hola, gracias Carlos, lo que pasa es que como estamos detrás de un ordenador, nos creemos que lo que piensa uno, los demás lo saben, pero no es así. No dejo el proyecto de ningún modo, tal vez con el tiempo lo modifique y haga los cálculos contabilizando el tiempo entre pulso y pulso y seguro que será más exacto. Lo que pasa, es que lo siguiente será visualizar los pulsos mediante displays y en decimal, que no creo que tenga ningún problema, ya que la visualización del número en dos displays ya sé como hacerlo, y no tiene nada que ver con el título de este mensaje, que era de apreder a usar el contador de TMR0.
Hola veguepic, muchas gracias por el enlace, el problema de los retardos, es que uno piensa que es de una manera, pero no es así como se calculan, así que lo usaré cada vez que haga falta. El problema es cuando no sabes como hacer un retardo, y utilizas un programa de ésto, ¿qué pasará? que no sabrás como se hacen sin esa herramienta. Imaginate una persona analfabeta, y le dan una calculadora, te hará las operaciones, se la quitas y no sabe hacer nada. Pues esa era mi idea el saber el por qué, aunque luego utilice el programa.
Gracias y saludos.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: microcom en 22 de Agosto de 2006, 14:41:29
amigo lorenzo la verdad lo que estabas haciendo una veces me quedo grande y como no tengo experiencia en esto; no podria darte ninguna indicacion"motores rpm como la mido etc
en primera instancia yo me incluí en tu post y la verdad las dudas se iban agrandando y fue cuando flaquie pero mi intencion fue de colaborar en tus dudas.lo que sigue  es de aprender de lo que esta haciendo porque esto me parecio interesante.

si me pudes hacer el favor  cuando tengas tiempo de contestarme unas preguntas.

muchas gracias.
Título: Re: ¿Cómo usar TOCKI?
Publicado por: Lorenzo en 22 de Agosto de 2006, 17:19:11
Hola microcom, te vuelvo a reiterar las gracias simplemente por haber participado en el tema, ya que hay veces que por falta de experiencia o desconocimiemto no podemos ayudar lo que quisieramos, pero para mí la intención cuenta mucho. Si te puedo ayudar en algo esté en mi mano.lo haré gustosamente, ya que cuando me hace falta lo hacen los compañeros conmigo, y como dice el dicho "No es bien nacido, no ser agradecido.
Ahora voy a intentar visualizar las revoluciones por segundo en un display, ya que en mi coche el numero de pulsos medidos en 500 milisegundo coincide con las revoluciones del motor por segundo, y luego sería cuestión de multiplicarlo por sesenta para representar las revoluciones por minuto. Yo creo que en el tema del cálculo, en prinicipio no creo que tenga mayores problemas. La cuestión va a ser, cómo multiplexar los dígitos y que no haya problema de visualización y a la vez que el programa siga corriedo con la rutina de retraso, pero creo que el tema será mejor incluirlo, en el tema que tengo abierto en la sección proyectos.
Gracias y saludos.