Autor Tema: uso del TMR0....help me  (Leído 5554 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rasec_1984

  • PIC10
  • *
  • Mensajes: 29
uso del TMR0....help me
« en: 10 de Abril de 2007, 01:45:20 »
Hola chikos.....
soy casi nuevo en el foro (he posteado un par de veces, claro que ha sido para hacer una consulta, jeje, cuando tenga un mejor nivel comenzare a aportar), y me gustaria que me hecharan una manito en lo siguiente.
    Yo estudio ing electrica, y me manejo bastante bien con eso, pero a pesar de que me gusta mucho la electronica, no la domino en demasia por no ser mi especialidad.
   Hare un trabajo que consiste en lo siguiente: un medidor digital del factor de potencia (lo mas probable es que muchos de ustedes sepan lo que es). He aprendido a programar pic en MKB. Lo que necesito hacer es medir el desfase que existe entre la corriente y la tension electrica, osea; el tiempo que existe entre el primer evento que seria cuando la primera señal cruza por cero, y el segundo evento que seria cuando la otra señal cruza por cero, para ello ocupare el pic 16f628. Por lo que he leido en foros anteriores, se que por software no es posible realizar esto con precision, y debe ser a traves de un timer. Los tiempos a medir estarán siempre comprendidos entre 0 y 10 ms. Mi primera duda es, si es esto posible, o sea, si puedo activar un timer con un pulso, y pararlo con otor pulso en un pin diferente, y luego leer el estado del timer. ¿el timer registra el tiempo en el cual fue detenido? ¿o solo es programado para que se dentenga en un tiempo preestablecido?. Mi segunda duda es, ¿es posible realizar esto de MKB? ¿o debo hacerlo introduciendo un pequeño codigo assembler?. Por lo que he leido al parecer se puede, pero de todas maneras veo que hayq ue saber un poco de arquitectura. Por ello es que me hoy compre el siguiente libro:microcontroladores pic, de Jose M. Angulo, que al parecer esta bien bueno, voy en el cap 3. Pero necesito saber esa respuestas para saber si solo pierdo timepo,(no es que aprender sea perder timepo, pero debo actuar rapido), saber si es posible, y si ademas alguien tiene un codigo que haga algo parecido, le agradeceria su colaboracion. Este instrumento es bastante util para un electrico, si me resulta todo bien publicare el codigo a ver si a alguien le es util. Bueno, no me alargo mas.......saludos....espero me puedan ayudar....;)
........Los grandes espíritus siempre han encontrado una violenta oposición de parte de mentes mediocres.....

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: uso del TMR0....help me
« Respuesta #1 en: 10 de Abril de 2007, 16:17:30 »
Sin el animo de sonarte pretenciosa o grosera antes de refinarte cualquier libro debes empezar  por la data del pic que vas a utilizar en la sección de tmr encontraras las respuestas a lo que buscas. Básicamente un tmr puede ser leído o escrito en cualquier momento y actúa por desbordamiento del mismo activándote una bandera la cual te indica  lo anterior además de que también cuentas con una interrupción por desbordamiento del tmr.
suerte
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado rasec_1984

  • PIC10
  • *
  • Mensajes: 29
Re: uso del TMR0....help me
« Respuesta #2 en: 12 de Abril de 2007, 00:46:25 »
Gracias por responder Sandra......que bueno saber que si es posible realizar lo que me propongo, me alivia y me da seguridad para seguir estudiando estos micros. Lo que dices del libro, el que compre esta orientado solo al 16f84, su arquitectura interna, y programación en assembler, por lo que de alguna forma este libro seria un datasheet, pero explicado, con aplicaciones, y en español. Hoy ya voy en el cap 6, dentro de una semana pretendo terminarlo. Una vez lo termine seguire tu consejo de irme al datasheet del 16F628, ya que son bien parecidos, asi que entendiendo el 84 no creo que tenga problemas de emigrar al 628 (eso es lo que tengo entendido, si no es asi, espero me corrigan :P). mmmm....y si alguien tiene algun programita que haga algo parecido, le agredeceria mucho si me lo facilita....esop....saludos a todos.....y ahi los estare molestando si me aparecen incovenientes que no pueda resolver :lol: ya que veo son muy amables....
........Los grandes espíritus siempre han encontrado una violenta oposición de parte de mentes mediocres.....

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: uso del TMR0....help me
« Respuesta #3 en: 12 de Abril de 2007, 02:18:56 »
Mi primera duda es, si es esto posible, o sea, si puedo activar un timer con un pulso, y pararlo con otor pulso en un pin diferente, y luego leer el estado del timer. ¿el timer registra el tiempo en el cual fue detenido? ¿o solo es programado para que se dentenga en un tiempo preestablecido?[/quote]
Si se puede y como Sandra lo señala, existen banderas que puedes utilizar (o puedes utilizar la interrupción del RB0).

Mi segunda duda es, ¿es posible realizar esto de MKB? ¿o debo hacerlo introduciendo un pequeño codigo assembler?.
Ya que tengas bien establecido qué quieres hacer y cómo lo harías (en hardware), no es muy complicado; puede ser de las dos maneras, depende de lo rápido que quieras hacer las cosas (ensamblador es siempre más rápido).

Uso PBP pero no creo que exista mucha diferencia en las sintaxis de programación.



PD: busca en el foro ejemplos de microbasic y ensamblador que tengan que ver con el TMR0 (utiliza el buscador del foro).
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado rasec_1984

  • PIC10
  • *
  • Mensajes: 29
Re: uso del TMR0....help me
« Respuesta #4 en: 12 de Abril de 2007, 03:32:34 »
Muchas gracias por responder Mario, ya que para mi esto es bien importante, y como dije anteriormente, que bueno saber que esto es posible realizarlo, esa era mi mayor preocupacion, asi que ahora a estudiar y averiguar no mas. Ya me habia paseado por mas de la mitad del foro de basic antes de iniciar esta discucion, y encontre aplicaciones del TMR0, pero no en algo como lo que yo necesito.....pero como dices, usare el buscador, no se me habia ocurrido jeje.....saludos  :-) :-/
........Los grandes espíritus siempre han encontrado una violenta oposición de parte de mentes mediocres.....

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: uso del TMR0....help me
« Respuesta #5 en: 14 de Abril de 2007, 05:22:48 »
Hola, RASEC...que resolucion necesitas en la medicion ??? Decis que el rango de lectura es de 0 a 10 ms...pero podrias necesitar saber si el cruce x 0 de la I o de la V, se produce a los 10us, por ejemplo ??? Seria importante saber cual PIN mide la I y cual la V ??? (dependiendo del tipo de carga, digo !!!) O teniendo el dato alcanza ??? Cual es la formula para calcular el FP en funcion de los tiempos ???

Quizas, si la resolucion de lectura es de 10us o mas, podes hacerlo en ASM...

Por ejemplo, esto se me ocurre ahora mismo:

BTFSC porta,00   ;miras el estado del puerto A, pin 0, donde estaria conectada una entrada (V o I)...estaria PULL UP
GOTO $-1           ;seguis mirando el puerto hasta que cambie...cuando se produzca el cruce...
INCF contador     ;incrementas el contenido de un contador (que previamente esta limpio)
BTFSC porta,01   ;ahora miras la otra entrada (en el puerto A, pin 1) de (I o V)...estaria PULL UP
GOTO $-2           ;seguis mirando el puerto, y mientras permanezca en 1, incrementas el mismo contador...
MOVF contador    ;ahora el "contador" te muestra cuantas veces se incremento, ese valor lo multiplicas x 4us + 5us...

Si conto 10 veces, eso le tomo 45us...(tengo que verificarlo pero anda por ahi...quizas nos pueda ayudar BRUNO, con alguna simulacion...puede haber un error de +/- 1us  :-)...luego usas tu formula para calcular el desfasaje...

Tambien habria que considerar las demoras de los cuadratizadores que vayas a usar...recorda que el PIC admite señales digitales y no senoidales...

Estoy asumiendo un cristal de 4MHZ... :lol:

Esa es la idea conceptual, en ASM...si te decidis por esto avisame, que te ayudo en lo que pueda...

SALUDOS !!!

______________________________
"Justo a mi, me toco ser YO" QUINO

         

Desconectado rasec_1984

  • PIC10
  • *
  • Mensajes: 29
Re: uso del TMR0....help me
« Respuesta #6 en: 15 de Abril de 2007, 18:52:02 »
Hey Resistencio! gracias por responder.....
respondere a tus preguntas

Citar
que resolucion necesitas en la medicion ???
el timer0 cuenta hasta FF, osea 255 us (con cristal de 4MHz), y yo necesito llegar hasta los 5 ms como max (no 10 como dije arriba, me equivoque  :lol:) asi que ocupare el divisor de frecuencia en 32, lo que me da un tiempo base de 32 us, ya que ahi puedo contar hasta 255*32=8,16 ms. Ahora, con este divisor de frecuancia, mi resolucion de grados es = 90º * ( 32 us / 5000 us) =  0,576º. (tengo entendido que el tmr1 del 628 tiene un timer de mejor resolucion, pero aun no lo estudio, hasta el momento seria asi con el tmr 0 ).

Citar
pero podrias necesitar saber si el cruce x 0 de la I o de la V, , se produce a los 10us, por ejemplo ???
esta pregunta no la entendi :P sorry...

Citar
Seria importante saber cual PIN mide la I y cual la V ??? (dependiendo del tipo de carga, digo !!!) O teniendo el dato alcanza ???
exacto, necesito saber cual señal cruza por cero primero, para asi poder indicar, mediante un display, o un led, si la carga es capacitiva o inductiva. Si primero cruza la tension por cero es inductiva, si primero lo hace la corriente, es una carga capacitiva.

Citar
Cual es la formula para calcular el FP en funcion de los tiempos ???

bueno, existe una relacion lineal entre el tiempo y el ángulo de una funcion cosenoidal. Los 90º corresponden a 5 ms (para 50 Hz), por lo tanto, mediante un proporcion se puede calcular el ángulo que corresponda. Por ejemplo, si el timer midio un tiempo de 1 ms, el angulo que le corresponde es el siguiente:

fi = 90º * (1 ms / 5 ms) = 18º de desfase.

para calcular el fcactor de potencia  solo debo calcular el coseno del angulo "fi" de desfase : fp = cos (fi). De bido a lo anterior es que quiero realizar mi programita en basic, para poder calcular el coseno. Si lo hago en ASM debere ocupar algun artilugio matematico para calcular el coseno por un metodo aproximado. ademas quiero mostrar el resultado en display, lo que es mas facil tambien en basic.

El maximo error de medicion se produciria cuando el angulo sea 90 º o cercano (ya que en la funcion coseno, la maxima derivada se produce a los 90º grados, o sea, una pequeña variacion del angulo, produce una gran variacion del fp ). Este error seria de: e = |cos ( 90º) - cos (90º - 0,576º)| = 0,0101 = 1,01 % de error.

El minimo error se produce cuando el angulo es igual o cercano a 0º (ya q la derivada es minima en ese puento, es cero. Una variacion del angulo produce variaciones muy pequeñas del fp ). Este error seria de: e = |cos (0º) - cos(0,576º)| = 0,00005 = 0,005 %.

Lo bueno es que los valores que mas importa medir son para angulos mas cercanos a cero que a 90º. Por ejemplo en mi pais (Chile) no se debe tener un angulo superior a 21, 57º (fp = 0,93) para no ser multado.

Y muchas gracias por tu colaboracion, te pasaste. Cuando estudie un pokito mas revisare bien las instrucciones que pusiste ahi. Espero haber entendido bien las respuestas, y no haber dado mucho la lata jeje.....saludos  :-) :-/
........Los grandes espíritus siempre han encontrado una violenta oposición de parte de mentes mediocres.....

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: uso del TMR0....help me
« Respuesta #7 en: 22 de Mayo de 2010, 11:28:06 »
Hola yo he hecho un proyecto similar, nada más que lo hice en MikroC, este es el link donde puedes ver el código que he utilizado.

En este código solo muestra el valor del TMR0 en hexadecimal, lo que debes hacer luego es convertir este valor en grados y valores decimales para luego mostrarlo en un LCD.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA