dificultad con ATTACH INTERRUPT


hola todos, soy nuevo en el foro.
los mouse viejos (con la bola abajo) tienen dos discos perforados ranurados. cada uno de estos discos entre un led infrarrojo y un receptor generando una onda cuadrada. estoy utilizando ese sistema led-receptor del mouse, pero hago girar entre ellos un disco con tres agujeros equidistantes unas 6400 rpm como máximo, es decir genero una señal cuadrada de (6400/60)*3 = 320 hz como máximo. el disco tiene unos 7cm de diametro y los agujeros, que están bien en la periferia , un diametro de unos 8mm. me genera una señal entre 0 y 2,5v, teniendo 2,5v cuando el agujero coincide con el haz.

deseo medir la aceleración de ese disco (es para un proyecto de un banco de prueba para motos de rodillo inercial). para ello, necesito saber en que momento pasa un agujero, en que momento pasa el siguiente,
, dejar pasar 13, y nuevamente saber en que momento pasa el catorceavo y luego el quinceavo. luego tendría que hacer cálculos.

pero el problema es que no me funciona el programa . hago girar el disco unas 2000rpm , y la diferencia de tiempo entre agujeros 1 y 2 es la esperable, pero entre 14 y 15 me da 28 microsegundos, y eso es imposible (es muy poco) , ademas noto que casi siempre, e independientemente de la velocidad la que haga girar el disco, me da 28 micros el segundo tiempo. continuación mando el programa.
les agradecería si me pudieran orientar.

code: [select]


volatile byte a=0;

long unsigned t1=0;
long unsigned t2=0;
long unsigned t14=0;
long unsigned t15=0;

void setup()
{
 serial.begin(57600);
 attachinterrupt(0,interrupcion,falling);
}

void interrupcion()
{
  a++;
}

void loop()
{
  if (a==1)
     {t1=micros();}
  if (a==2)
     {t2=micros();}
  if (a==14)
     {t14=micros();}
  if (a==15)
     {t15=micros();
       
     serial.print(t1);
     serial.print("  ");
     serial.print(t2);
     serial.print("  ");
     serial.print(t14);
     serial.print("  ");
     serial.println(t15);
       
     a=0;
     }      
}

[code]






primero que nada ,hechale un ojo las normas del foro donde se explica como postear el sketch correctamente y editalo.sin entrar en los  calculos que haces ,es posible que 2.5v sea poco voltaje para definir claramente si la señal es high o low ,si nos ceñimos lo que se dice en la referencia ,y digo posible porque no se si lo que dice la referencia es aplicable tambien las interrupciones:
quote
high

the meaning of high (in reference pin) different depending on whether pin set input or output. when pin configured input pinmode(), , read digitalread(), arduino (atmega) report high if:

a voltage greater 3 volts present @ pin (5v boards);
a voltage greater 2 volts present @ pin (3.3v boards);
a pin may configured input pinmode(), , subsequently made high digitalwrite(). enable internal 20k pullup resistors, pull input pin high reading unless pulled low external circuitry. how input_pullup works , described below in more detail.

when pin configured output pinmode(), , set high digitalwrite(), pin at:

5 volts (5v boards);
3.3 volts (3.3v boards);
in state can source current, e.g. light led connected through series resistor ground.

low

the meaning of low has different meaning depending on whether pin set input or output. when pin configured input pinmode(), , read digitalread(), arduino (atmega) report low if:

a voltage less 3 volts present @ pin (5v boards);
a voltage less 2 volts present @ pin (3.3v boards);
when pin configured output pinmode(), , set low digitalwrite(), pin @ 0 volts (both 5v , 3.3v boards). in state can sink current, e.g. light led connected through series resistor +5 volts (or +3.3 volts).

ademas tambien estas usando falling ,que detecta cuando la entrada del pin pasa de high low ,pero si el voltaje lo tienes cuando se coincide con un agujero,quiza lo mas correcto seria usar rising ,cuando se pasa de low high.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > dificultad con ATTACH INTERRUPT


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'