Skocz do zawartości

[C] Dekodowanie RC5 ATMega


Siedlak

Pomocna odpowiedź

Jako, że jest to mój pierwszy post na forum, to chciałbym się przywitać 🙂 .

Piszę, gdyż mam problem z dekodowaniem rozkazów (problem sprzętowy raczej wykluczam, gdyż po naciśnięciu przycisku procedura obsługi przerwania jest wywoływana).

Mam taki kod w C:

//zmienna przechowująca 6-bitowy kod poprzedzony jedynką
volatile unsigned long long int kod=1;
.
.
.
ISR(SIG_INTERRUPT1){
       //zablokowanie przerwan
cli();
EIMSK &=~ (1<<INT1);
int i;
kod=1;
       //zmienna na smieci z poczatku ramki
int temp;

_delay_us(445);
if(bit_is_clear(PIND,PD3))
{
	temp<<1;
}
else
{
	temp<<1;
	temp+=1;
}

for(int i=0;i<7;i++)
{
	_delay_us(1778);
	if(bit_is_clear(PIND,PD3))
	{
		temp<<1;
	}
	else
	{
		temp<<1;
		temp+=1;
	}		
}
for(int i=0;i<6;i++)
{
	_delay_us(1778);
	if(bit_is_clear(PIND,PD3))
	{
		kod<<1;
	}
	else
	{
		kod<<1;
		kod+=1;
	}		
}


if(kod==1011010)
{
	PORTD&=~(1<<PD6);
	PORTD&=~(1<<PD7);
	_delay_ms(999);

}


EIMSK |= (1<<INT1);	
}

Wyjście z TSOP31236 jest podpięte do pinu INT1 (PD3), przerwania są ustawione na zboczu narastającym. Mikrokontroler to ATMega88. Zegar ustawiony na 1 MHz.

Jeśli ktoś by rzucił na to okiem i mógł mi pomóc, to byłbym wdzięczny.

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.