Bueno, que decirte
Te estoy tremendamente agradecido, pues basicamente es lo que yo andaba buscando.
En lo que me liaba es en la simulacion en proteus (aparte del codigo), pues yo lo tengo simulado de la manera fisica, que creo que esta correcto mas o menos, pero no de la manera correcta para el proteus...
El programa es una base muy, pero que muy buena y a partir de ahi seguire avanzando el proyectillo.
Lo unico, es que para mover el motor, de la forma que lo tienes conectado, no lo se seguro, pero igual le hace falta una alimentacion adicional. Lo digo porque no se la tension que ofrecen los pines A0 y A1, aunque con 4 voltios bastaria para mover el motor (aparte de que le falta algun diodo de proteccion y demas).
Realmente, el programa segun esta bastaria, pero yo buscaba, ademas de controlar la direccion de giro del motor, poder controlar tambien su velocidad. Como he dicho, llevo relativamente poco en esto, pero para controlar su velocidad, seria por medio del PWM, no??
Lo que me pasa ami, es que al añadirle al motor la señal PWM del micro, no vario la velocidad, sino que vario la aceleracion, es decir, la alimentacion le llega por medio de los pines A0 y A1 y con el PWM, dependiendo de su ciclo de trabajo, sera mayor o menor su aceleracion y la idea es conseguir una velocidad fija...
Esto aun no se como hacerlo, pero ya lo mirare, pues lo he intentado con el integrado L293B, pero como ves, no he tenido exito.
De nuevamente te doy las gracias por la explicacion que viene en el codigo de como calcular lo del setup_timer y el pwm_duty, pues aun tenia dudas de como se obtenia.
En cuanto a lo del funcionamiento de un servo...segun lo has programado creo que esta mas que bien.
Seguro que hay gente que sabe mas que yo, pero por lo que se, el servo es un motor asociado a un pequeño circuito que es el encargado de posicionar el servo en una posicion u otra.
Un servo normal (sin trucar) tiene un giro de 180º. Para controlar la posicion del servo, se hace mediante el ciclo de trabajo del PWM. Segun tengo entendido, el periodo total con el que trabaja un servo es de 10 a 22 milisegundos. Para poder posicionar el servo, variamos el ciclo de trabajo calculado en milisegundos.
En 1'5 milisegundos el servo estaria posicionado en su posicion central, por asi decirlo, en 90º.
En 0'3 milisegundos el servo se posicionaba en una de las posiciones extremas, es decir, en los 180º.
En 2'1 milisegundos el servo se posiciona en la otra posicion extrema, los 0º.
Variando el valor de los milisegundos conseguimos que el servo tome cualquier posicion entre 0 y 180º.
Espero no haberme enrollado demasiado y haberte podido ser de tanta ayuda como tu ami.
Segun vaya avanzando el programa, si consigo controlar la velocidad, lo ire posteando por aqui.
Muchisimas gracias por vuestra ayuda.
Un saludo!!