Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Si lo haces reducirás la cantidad de dientes del engranaje plastico o sea el movimiento angular.
El tema es que si reemplazaras ese engranaje por uno metálico y usas un sensor magnético o uno de efecto hall que detecte cada diente, tendrias la precisión que estas buscando.
Sale más barato usar las dos interrupciones que poner el doble de imanes.
Vuelvo a preguntar lo que pregunté hace una semana: cual es la reducción entre el eje que genera los pulsos y el eje que gira la antena??????
Para poder modificar una variable externa a la ISR dentro de la misma debemos declararla como «volatile». El indicador «volatile» indica al compilador que la variable tiene que ser consultada siempre antes de ser usada, dado que puede haber sido modificada de forma ajena al flujo normal del programa (lo que, precisamente, hace una interrupción).
Al indicar una variable como Volatile el compilador desactiva ciertas optimizaciones, lo que supone una pérdida de eficiencia. Por tanto, sólo debemos marcar como volatile las variables que realmente lo requieran, es decir, las que se usan tanto en el bucle principal como dentro de la ISR.
Esas son "static". Las "volatile" especifican que el valor siempre se debe leer desde la memoria sin optimizar el acceso por medio de los registros.e hace volátiles a una variable local que no quieres que se destruya al salir de la función.
Depende de la frecuencia con la que ocurran las interrupciones. De todas formas, la zona "protegida en form atómica" debe ser lo mas corta posible para minimizar el riesgo de saltear alguna interrupcion...y solo vos sabés cual es la frecuencia mas elevada a la que ocurren las interrupciones...Existe la posibilidad de perder alguna interrupción? Porque en ese instante estarán paradas.
#ifdef USE_TIMER1
ISR(TIMER1_COMPA_vect) // interrupt service routine
#else
#ifdef USE_TIMER0
ISR(TIMER0_COMPA_vect) // interrupt service routine
#else
#ifdef USE_TIMER2
ISR(TIMER2_COMPA_vect) // interrupt service routine
#else
#pragma GCC error "You must define USE_TIMER0, USE_TIMER1 or USE_TIMER2 in dispatcher.h"
#endif
#endif
#endif
{
tickCounter++;
}
/* acá viene mas verdura... */
unsigned int get_ticks() {
unsigned int tmp;
ATOMIC_BLOCK( ATOMIC_RESTORESTATE ) {
tmp = tickCounter;
}
return tmp;
} // get_ticks
Y para que pones a 115k2 algo que con 9600 sobra?La comunicación es a 115200 baudios y leo un máximo de 16 caracteres