TV y servos

Hola a todos.
Se me ha presentado un problema que seguramente sea sencillo, pero me he atascado. Se trata de con la libreria de Igor del proyecto Tv, y la libreria de servo. Estoy intentando presentar en un monitor mediante un simple RCA a la entrada AV de dicho monitor, las señales de entradas analogicas, todo va bien, pero cuando en el mismo programa intento introducir un servo, o no me funciona el servo o no me funciona la visuslización.
Tengo el ejemplo si queréis lo pongo.
Muchas gracias de antemano a todos.

Bueno, la librería no es mía.... :wink:

TVout usa un timer para generar la señal de video, no estoy seguro que timer/s usa la librería servo, pero seguramente de ahí te venga el problema.
Para usar TVout te conviene no usar nada que use interrupciones (por ejemplo, tiene implementado su propio código para manejo de comunicación serie por polling, ya que no se puede usar la que viene con Arduino).

Si no me equivoco, TVout usa el TIMER1. Podrías usar el Timer 2 para generar el pwm necesario para tu pwm, aunque tendrías que entrar en profundidad cómo se hace ésto.... :wink:

:smiley:

Ok Igor.
Pero realmente que podría hacer? :astonished:. El servo ya tiene su propia librería por lo que no se como podría cambiar el timer.
He visto que se puede hacer funcionar el servo sin utilizar las interrupciones pero no es tan limpio.
Sabes o has provado con alguna otra forma?.
Gracias.

Puedes generar la señal de control de RC sin necesidad de recurrir a la librería servo.h

No es que sea menos limpio, es que es un poco más de faena.

Aquí tienes todo lo necesario, ejemplo incluidos, de como es dicha señal y como generarla.

Josemanu, muchas gracias pero mi problema no es generar RC eso ya lo hago, mi problema es que cuando lo mezclo con la señal Tvout no me funciona. He realizado un programita usando la interrupción de microsegundos y va a saltos por lo que también usa el timer1 parece. Se que podría hacerlo con un lm555, pero me interesaria no añadir demasiado a mi proyecto ya que debe ser de un tamaño pequeño

chechucv:
Josemanu, muchas gracias pero mi problema no es generar RC eso ya lo hago, mi problema es que cuando lo mezclo con la señal Tvout no me funciona. He realizado un programita usando la interrupción de microsegundos y va a saltos por lo que también usa el timer1 parece. Se que podría hacerlo con un lm555, pero me interesaria no añadir demasiado a mi proyecto ya que debe ser de un tamaño pequeño

Josemanu se refiere a que uses lo que te ha linkado para generar el PWM con otro timer, ya que el timer1 seguramente está ocupado por el Tvout. Tan potente que creia que era arduino, y no tiene ni una gestión decente de los timers... snif =(

Si se puede sacar PWM de cualquier timer con el analogWrite(), no?
Sólo hay que buscar un pin asociado a un timer que no esté usado por nada

chiva:
Si se puede sacar PWM de cualquier timer con el analogWrite(), no?

La diferencia es que "Servo" te fija la frecuencia para un servo (50Hz), mientras que analogWrite() fija 490Hz aprox.

Bueno amigos, gracias a todo el foro como siempre.
La libreria de servo, creo que prepara todas las salidas para poder utilizar servos en cada una de ellas, y la de TVout, utiliza timer1 como bien dice Igor. En el ejemplo del Link josemanu, efectivamente utiliza otro Timer me imagino que el 2, por lo que al hacer la llamada de Microseconds no me genera pulsos diferente a los que le programo, que realmente es lo que me ocurría.
Mi conclusión a esto y corregirme si estoy diciendo una burrada, es que cuando utilizamos otra salida PREVIAMENTE asignada, y además hacemos una llamada a Microseconds o millisecond ya empezaríamos a utilizar otro Timer, solo si ya se este utilizando uno. :astonished:

Pues conecta un servo a un pin que no sea del Timer 1

chechucv:
Bueno amigos, gracias a todo el foro como siempre.
La libreria de servo, creo que prepara todas las salidas para poder utilizar servos en cada una de ellas, y la de TVout, utiliza timer1 como bien dice Igor. En el ejemplo del Link josemanu, efectivamente utiliza otro Timer me imagino que el 2, por lo que al hacer la llamada de Microseconds no me genera pulsos diferente a los que le programo, que realmente es lo que me ocurría.
Mi conclusión a esto y corregirme si estoy diciendo una burrada, es que cuando utilizamos otra salida PREVIAMENTE asignada, y además hacemos una llamada a Microseconds o millisecond ya empezaríamos a utilizar otro Timer, solo si ya se este utilizando uno. :astonished:

No es una cuestión de qué puerto se use, los timers son relojes internos, que poco tienen que ver con las entradas. Cuando tu haces tu attach (en el servo) lo que ocurre es que configuras ciertos valores en el Timer1. Esos valores son los que necesita "Servo.h" para funcionar correctamente. Al iniciar luego TVout, este reescribe esa configuración, y el Timer1 deja de funcionar como "Servo.h" esperaba.

Por ejemplificarlo, imagina una pareja que utilitza el mismo despertador. Primero se acuesta uno de los dos, y pone el despertador a las 7am. Luego llega el otro, que se había quedado viendo la tele y al acostarse fija el despertador para las 10am (tiene un trabajo mucho mejor XD). El primero, llega tarde seguro :stuck_out_tongue:

En el enlace que te puse la idea era que vieras que se pueden generar las señales de control RC por software, si tan cual están los ejemplos no te funciona por los delayMicroseconds(), lo cual era de esperar, puedes generarlas igual pero utilizando una gestión de tiempos como la que se utiliza en el BlinkWithoutDelay.

De esta forma puedes generar señales de control de RC sin interferir con los timer ni recurrir a delayMicroseconds().