0
Offline
Newbie
Karma: 0
Posts: 40
Arduino rocks
|
 |
« on: May 11, 2009, 01:52:04 pm » |
Hola soy nuevo en arduino, y después de hacer algunos "experimentos", quiero hacer un programa que cuente revoluciones por minuto.
Asà que voy a colocar un sensor en una entrada digital que envÃa pulsos, pero tengo algunas dudas.
Cual es la frecuencia máxima que puede recibir arduino de pulsos, sin perder ninguno?
Saludos
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 12
Posts: 1550
|
 |
« Reply #1 on: May 12, 2009, 02:29:08 am » |
Hola, Tienes dos opciones, usar las interrupciones del pin 2 y 3 y usar el lenguaje de Arduino ó usar el ICP, lo que tendrás que usar C (que puedes combinar con wiring). Para saber la velocidad máxima que puedes medir, depende de tu clock (16MHz) y también del código que hagas en la interrupción. Yo hasta 80 KHz, usando ICP mido bien. Saludos   Igor R.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 40
Arduino rocks
|
 |
« Reply #2 on: May 12, 2009, 02:54:18 am » |
Gracias por la información.  /BlueIcaro
|
|
|
|
|
Logged
|
|
|
|
|
|
|
0
Offline
Edison Member
Karma: 12
Posts: 1550
|
 |
« Reply #4 on: May 13, 2009, 02:26:15 am » |
Lo que esta claro,que para intentar sacar el máximo, no puedes hacerlo en C y menos en Wiring.... tienes que ir a ensamblador, si quieres minimizar los tiempos y un control total.
Algo en Wiring, normalmente será más lento que hacerlo en C. Ya que en WInterrupts, al final hace ISR (bueno, hace Signal porque es algo antiguo....). Pero hasta llegar a esto, hace muchas cosas más ya que attachInterrupt es una función creada... Por lo que mira si le has pasado interrupcion 1 ó 0 y configura los registros para atender interrupciones. Luego, una vez que entras a la interrupción, llama a la función que le has pasado en attachInterrupt.....  Sólo con esto: hace un salto al código de interrupción y otro desde la interrupción a tu función....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 40
Arduino rocks
|
 |
« Reply #5 on: May 13, 2009, 02:51:15 am » |
Hola, ahora que sacáis el tema de ensamblador, es algo que estoy muy interesado, aunque mi ensamblador está algo oxidado tengo experiencia en él (alguien recuerda el commode C64, luego tambien toque algo de 8086).
Me gustarÃa programar Arduino en Ensamblador, por una idea que tengo en mente (aún tengo que aprender mucho sobre esta placa), y ahora que lo comentáis, pues quizás lo necesite para este contador de pulsos.
Ya que la idea, por la que abrà este post, es leer las revoluciones de un motor que gira, sobre 40.000-50.000 vueltas por minuto. Lo que son muchas, por eso mi pregunta de la capacidad del arduino.
Aunque tengo que comentar que tengo en mente poner una reducción mecánica.
Pero bueno, sin liar mucho el post, ¿por dónde puedo empezar a ver el tema del ensamblador? .
Saludos
/BlueIcaro
|
|
|
|
« Last Edit: May 13, 2009, 02:52:25 am by blueicaro »
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 12
Posts: 1550
|
 |
« Reply #6 on: May 13, 2009, 04:04:57 am » |
Busca info directamente acerca de ATMega168.... La página de avrfreaks...
¿Cuantos dientes vas a poner para medir la velocidad? 50.000 vueltas por minuto son aprox 850 Hz si usas un diente...Yo usando C + Wiring "veo" 80.000 hz sin problemas y todo es más fácil. Uso el ICP porque me interesa saber el duty cycle además de la frecuencia. Y no me he matado en optimizar el código....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 40
Arduino rocks
|
 |
« Reply #7 on: May 13, 2009, 11:05:40 am » |
Hola, la reducción ira en función de lo que encuentre y me valga en una impresora que voy a desmontar. Por otra parte no entiendo como calculas esto: ¿Cuantos dientes vas a poner para medir la velocidad? 50.000 vueltas por minuto son aprox 850 Hz si usas un diente... Si yo pongo un disco, un sensor en él, de manera que de una vuelta y en cada una de ellas envÃe un pulso, tendré que el número de pulsos por unidad de tiempo, me darán las vueltas a lo que gira eso, osea la frecuencia de giro, ¿o me me equivoco? /BlueIcaro
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 12
Posts: 1550
|
 |
« Reply #8 on: May 13, 2009, 11:12:25 am » |
Si no me equivoco, porque hoy estoy un poco espesito.... 50.000 vueltas por minuto = 833,33 vueltas por segundoHz= veces en un segundo 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 40
Arduino rocks
|
 |
« Reply #9 on: May 13, 2009, 11:27:12 am » |
Vamos, espesito...   Empanado estoy yo, si es que yo solo me estaba contestando, al poner pulsos por unidad de tiempo. Lo que pasa es que hablé de RPM (revoluciones por minuto) y de golpe pase a vueltas por segundo yo solito, cargando la conversión Â
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 12
Posts: 1550
|
 |
« Reply #10 on: May 13, 2009, 11:32:35 am » |
ja,ja,ja Esto pasa hasta en las mejores familias!! Te comentaba, que depende de lo que vayas a hacer y la precisión que necesites para la velocidad, si no pones muchos dientes, no te sale una frecuencia muy elevada y vas sobrado usando Wiring ó C, y todo es muchisimo más sencillo y rápido de programar.... Puedes ver que son 4 lÃneas de código en los ejemplos que te puse de tacómetro.... 
|
|
|
|
|
Logged
|
|
|
|
|
|