Hola,
estoy intentando calcular el duty cycle de un pulso midiendo el tiempo entre falco de subida y de bajada con estas instrucciones:
//Lectura de pin digital con digitalRead()
while(digitalRead(2)==0);
D1_ch1 = micros();
while(digitalRead(2)==1);
D2_ch1 = micros();
Duty_ch1 = (D2_ch1 - D1_ch1);
y mas o menos obtengo valores correctos con digitalRead(), que serian de 1000 a 2000 microsegundos, pero quiero utilizar los puertos para leer el valor del pin para ganar velocidad en los tiempos de ejecucion y la medida de tiempo que me da es de 4 microsegundos. Si se supone que.......................
(PIND & (1<<PD2)) = digitalRead(2), porq no obtengo la misma lectura de tiempos
// Lectura de pin digital con registro PIND
while((PIND & (1<<PD2))==0);
D1_ch1 = micros();
while((PIND & (1<<PD2))==1);
D2_ch1 = micros();
Duty_ch1 = (D2_ch1 - D1_ch1);
==============================================
Estaba escribiendo mal la sentencia, no hace falta hacer la comparacion , si no, comprobar si el pin esta activado o no.
Forma correcta :
while( ! (PIND & (1<<PD2)));
D1_ch1 = micros();
while((PIND & (1<<PD2)));
D2_ch1 = micros();
Duty_ch1 = (D2_ch1 - D1_ch1);