Skocz do zawartości

Problem z ADC. Problem z kanałami.


polopoiu

Pomocna odpowiedź

Mam dwa czujniki na portach ADC.

int LEFT_CZUJNIK()
{
ADMUX |= (ADMUX & 0xF8) | 4; //kanał w porcie C
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));

delay_us(5);

ADMUX |= (ADMUX & 0xF8);

if(ADCW > WARTOSC_L) return 1;
else return 0;
}
int RIGHT_CZUJNIK()
{
ADMUX |= (ADMUX & 0xF8) | 5; //kanał w porcie C
   ADCSRA |= (1<<ADSC);
   while(ADCSRA & (1<<ADSC));

   delay_us(5);

   ADMUX |= (ADMUX & 0xF8);

   if(ADCW > WARTOSC_R) return 1;
   else return 0;
}

Gdy w main sprawdzam np. jeden czujnik, to wszystko gra. Ale gdy wywołam je tak:

while
{
if(RIGHT_CZUJNIK())
	{
		BACK(150, 150);
		delay_ms(500);
		LEFT(150, 150);
		delay_ms(1000);
		MOTOR_STOP();

	}

 if(LEFT_CZUJNIK())
    {
	    BACK(150, 150);
	    delay_ms(500);
	    RIGHT(150, 150);
	    delay_ms(1000);
	    MOTOR_STOP();

       }
}

To pojawia się błąd, ponieważ program nie reaguje na lewy czujnik, ale tylko na prawy.

Problem jest jeszcze w tym, że akcja dla obu czujników są wykonywane losowo, choć łapie sygnał tylko z prawego czujnika.

Proszę o pomoc.

Link do komentarza
Share on other sites

Masz taki kod:

ADMUX |= (ADMUX & 0xF8) | 4; //kanał w porcie C

powinno być:

ADMUX = (ADMUX & 0xF8) | 4; 

czyli w tej operacji zamiast |= powinno być =

Pewnie masz biblioteki Mirka. Gdybyś sprawdzał uaktualnienia do kodów link to byś wiedział o tym błędzie 😉

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.