TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: paolivera en 05 de Diciembre de 2010, 01:52:37

Título: Timer programable pic16f84
Publicado por: paolivera en 05 de Diciembre de 2010, 01:52:37
Hola
Trate de buscar la solucion a mi problema pero no la encontre en este foro, si alguin sabe donde esta, por favor indiqueme donde, y pido disculpas.
Mi problema es el siguiente, con un pic16f84 represento en dos display 7 segmentos multiplexados los valores que van de 0,1...0,2....hasta 1,9. Estos valores representan retardos que van de 300 mseg hasta 2,02 seg respectivamente que activan una salida (rb0) del pic. NO PUEDO establecer la relacion entre el numero presentado en los display y el tiempo, cabe destacar que el incremento no es lineal, para tratar de aclarar les muestro la siguente tabla
Display             tiempo
0,1                    300mseg
0,2                    300mseg
0,3                    480mseg
0,4                    580mseg
0,5                    680mseg
0,6                    770mseg
0,7                    860mseg
0,8                    960mseg
0,9                    1,06seg
1,0                    1,16seg
 .
 .
 .
1,9                    2,02seg                 

Para donde arranco?
Muchas gracias
Título: Re: Timer programable pic16f84
Publicado por: migsantiago en 05 de Diciembre de 2010, 10:57:21
Hola, si no hay relación matemática trivial entonces yo usaría una tabla con RETLW.
Título: Re: Timer programable pic16f84
Publicado por: Felixls en 05 de Diciembre de 2010, 14:56:27
Hola paolivera, como dice mig, si no queda otra usa la tabla, pero por si te sirve podrías usar la siguiente fórmula

Y = LN(x+1.3)+x*0.45

(http://desmond.yfrog.com/Himg217/scaled.php?tn=0&server=217&filename=screenshot003a.png&xsize=640&ysize=640)

Pienso que podría servirte, igualmente no se como se comporta tu delay entre (1, 1.9) ya que no diste más datos, pero es cuestión de probar y ajustar.

saludos.
Título: Re: Timer programable pic16f84
Publicado por: migsantiago en 06 de Diciembre de 2010, 11:44:28
Uff Félix, un logaritmo natural en assembler  :shock:

Creo que una tablita sería más amigable jeje  ;-)
Título: Re: Timer programable pic16f84
Publicado por: pelacable en 06 de Diciembre de 2010, 14:02:20
Hola muchachos!

Si los tiempos los generas con rutinas independientes y fijas es muy simple: llama a la rutina de tiempo, por ejemplo la Nº 1 luego dirigete a la dirección de la tabla que corresponda, La rutina Nº2 tiene el mismo tiempo, entonces nombras a la rutina como 1_1 la repites y ya estás en la posición de tabla Nº2, colocas ése dato y listo!

Si los tiempos son generados desde un mismo y único sitio, tendrás que disponer de un contador que por cada 10ms. avance o descuente (como más te guste) y luego al salir la señal por el puerto (fin del tiempo) lees el contador y lo vuelcas a la tabla.

En el caso que se repitan los números tendrás que ver si ya lo colocaste antes y si es así saltas una posición de la tabla.

De última, siempre te queda la opción de hacer cuentas :D :D :D

Saludos

Título: Re: Timer programable pic16f84
Publicado por: paolivera en 09 de Diciembre de 2010, 16:54:50
Hola muchachos!

Si los tiempos los generas con rutinas independientes y fijas es muy simple: llama a la rutina de tiempo, por ejemplo la Nº 1 luego dirigete a la dirección de la tabla que corresponda, La rutina Nº2 tiene el mismo tiempo, entonces nombras a la rutina como 1_1 la repites y ya estás en la posición de tabla Nº2, colocas ése dato y listo!

Si los tiempos son generados desde un mismo y único sitio, tendrás que disponer de un contador que por cada 10ms. avance o descuente (como más te guste) y luego al salir la señal por el puerto (fin del tiempo) lees el contador y lo vuelcas a la tabla.

En el caso que se repitan los números tendrás que ver si ya lo colocaste antes y si es así saltas una posición de la tabla.

De última, siempre te queda la opción de hacer cuentas :D :D :D

Saludos


Hola, ante todo gracias por responder
Ya entendi el tema de las tablas
Como me aconsejaron realice un delay BASE de 10 mseg, luego lo meti en un bucle que es comandado por una variable que corresponde al numero presentado en los display.
Funciona todo de diez
Muchas gracias por todo