Genaracion de señal de 500Khz

Hola, tengo una duda y espero puedan ayudarme.
Tengo que controlar un motor a pasos y generar una señal cuadrada de 500Khz como mínimo, ¿Cómo es posible hacer esto?, ya que he intentado cambiando los registros TCCR1B y el preescalador, con la función tone(), y generándolo con digitalWrite y delay pero no encuentro la manera, espero puedan ayudarme. Gracias.

Hola,

En el datasheet del micro, tienes toda la información para cambiar los registros adecuadamente. Aunque me temo, si las cuentas no me fallan,no podrás conseguir un PWM de 500 KHz con un cristal de 16 MHz.

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106
¿Por qué necesitas frecuencia tan alta?

Saludos

Igor R.

Gracias por la respuesta.Por que necesito controlar un motor a pasos de 25000 pasos por revolución que estara cargando datos de forma serial para reproducir curvas y se necesita esa frecuencia por varios instantes de tiempo. ¿No hay manera de generar la señal sin usar PWM?

La maxima velocidad de PWM es Fclk/255, es decir unos 62 KHz, usando un cristal de 16MHz. (Asumiendo 8 bits resolucion).
Puedes jugar cuanto se consigue bajando la resolucion. No se si necesitas control del duty cycle.... http://www.atmel.com/dyn/resources/prod_documents/doc2542.pdf
"To achieve the maximum output frequency from the timer, it must be run in non-PWM mode. Both the OCR value and the top value must be set to 0. The counter is then stuck at 0. Setting the Output Compare Match action to “toggle output” makes the timer toggle the output on every timer clock tick"

Puedes intentar hacerlo por polling, es decir, manualmente con codigo. ON/Delay/Off.
Para hacerlo por polling y tan rapido, a lo mejor tienes que bajar a ensamblador....Ya que tienes que controlar muy bien los tiempos de todas las rutinas (teniendo en cuenta que tambien quieres usar comunicacion serie).

Tiene su cosilla hacer lo que dices.....je,je,je. Es una aplicacion compleja, como para plantearte NO usar el core de Arduino y hacerlo directamente. (Por ejemplo, las rutinas de recepcion serie de Arduino son lentas).

Desconozco si hay controladores externos, que puedan facilitarte el trabajo.

Saludos

Igor R.

Muchas gracias por tus respuestas, oye otra pregunta ya que te veo con más experiecia que yo, tambien puedo programar en c,¿No es así? y también bajarme a ensamblador pero desconozco la manera de hacerlo, necesito un IDE para hacerlo para cada uno?? o cual me recomiendas ya para empezar a trabajar??