witam,
zrobiłem wysyłanie RC5 na zwykłych delay'ach... (czemu delay? bo na timerze nie potrafiłem) rozwiązanie działa, ale po pewnym czasie opóźnienie najprawdopodobniej się zmienia i wysyłane są inne komendy.
dioda nadawcza IR jest podłączona przez tranzystor PNP BC516 (stan niski na bazie powoduje świecenie diody)
baza tranzystora jest na porcie PB1(OC1A)
jak zrobić to wykorzystując TIMER w trybie toggle? (modulacja 36kHz)
obecny kod:
zrobiłem wysyłanie RC5 na zwykłych delay'ach... (czemu delay? bo na timerze nie potrafiłem) rozwiązanie działa, ale po pewnym czasie opóźnienie najprawdopodobniej się zmienia i wysyłane są inne komendy.
dioda nadawcza IR jest podłączona przez tranzystor PNP BC516 (stan niski na bazie powoduje świecenie diody)
baza tranzystora jest na porcie PB1(OC1A)
jak zrobić to wykorzystując TIMER w trybie toggle? (modulacja 36kHz)
obecny kod:
void rc5send(uint16_t adres, uint16_t komenda)
{
uint16_t temp=0; //zmienna tymczasowa
uint16_t RRR=0; //kod rc5
adres <<= 6; //przesunięcie adresu na odpowiednia pozycje w kodzie rc5
RRR = start_toggle + adres + komenda; //złożenia w całość ramki RC5
for(int i=13; i>=0; i--) //wysłanie 14 bitów ramki rc5
{
PORTC ^= _BV(5); // mrugniecie dioda
temp=RRR>>i; // kolejny bit
if(!(temp & 1))
{
for(int i=0; i<32; i++) //stan wysoki modulacja 36kHz
{
PORTB &= ~_BV(1);
_delay_us(13.88);
PORTB |= _BV(1);
_delay_us(13.88);
}
for(int i=0; i<64; i++) //stan niski
_delay_us(13.88);
}
else
{
for(int i=0; i<64; i++)
_delay_us(13.88);
for(int i=0; i<32; i++)
{
PORTB &= ~_BV(1);
_delay_us(13.88);
PORTB |= _BV(1);
_delay_us(13.88);
}
}
}
}