Witam,
Chciałem zrobić nadajnik RC5. Chciałem sprawdzić na moim TV. Jako ramkę wysyłam polecenie wyłączenia TV. Niestety TV nie chce się wyłączyć. Problem chyba jest z częstotliwością.
Wcześniej zrobiłem odbiornik dla RC5. Kody przycisków odczytuje prawidłowa np klawisz wyłącz to 0xc = 0b1100
Jak mam ustawione w funkcji while na poczatku dwa zera, to dioda działa(widzialem przez aparat fotograficzny), gdy mam dwa zera na poczatku tak jak jest wyżej, dioda IR nie świeci
Chciałem zrobić nadajnik RC5. Chciałem sprawdzić na moim TV. Jako ramkę wysyłam polecenie wyłączenia TV. Niestety TV nie chce się wyłączyć. Problem chyba jest z częstotliwością.
//ATmega 16 F_CPU = 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t g_licznik = 0;
ISR(TIMER1_COMPA_vect)
{
g_licznik++;
}
void wait_modulacja(void)
{
g_licznik = 0;
TCCR2 = (1<<WGM21) | (1<<COM20) | (1<<CS21) | (1<<CS20);//TCCR2 = (1<<COM20);
while(g_licznik<889) //889us
{
}
}
void wait_bezmodulacji(void)
{
g_licznik = 0;
TCCR2 = 0;//TCCR2 &= 0b11101111;//(1<<COM20);
while(g_licznik<889) //889us
{
}
}
void wait(void)
{
g_licznik = 0;
while(g_licznik<889) //889us
{
}
}
void zero(void)
{
wait_modulacja();
wait_bezmodulacji();
}
void jeden(void)
{
wait_bezmodulacji();
wait_modulacja();
}
int main(void)
{
uint16_t i = 0;
DDRD = 0x80; // dioda IR podlaczona do PD7 OC2
OCR2 = 6; // f =35714,28571 zgodnie ze wzorem ze str 116 => 1+OCR2 = Fcpu/(2*N*Fszukana)
TCCR2 = (1<<WGM21) | (1<<COM20) | (1<<CS21) | (1<<CS20);//tryb CTC; TOOGLE OC2; preskaler 32
TCCR1B |= (1 << WGM12); // Ustawia timer w tryb CTC
OCR1A = 1; // Ustawia wartość pożądaną na 1MHz(1us) dla preskalera 8
TCCR1B |= (1 << CS11); // Ustawia timer z preskalerem Fcpu/8
sei();
while(1)
{
//ramka = 11000000001100 => kod wylaczenia TV
jeden();
jeden();
zero();
zero();
zero();
zero();
zero();
zero();
zero();
zero();
jeden();
jeden();
zero();
zero();
for(i=0;i<1778;i++) // odczekanie 88,9 ms na transmisje kolejnej ramki
{
wait();
}
}
}
Wcześniej zrobiłem odbiornik dla RC5. Kody przycisków odczytuje prawidłowa np klawisz wyłącz to 0xc = 0b1100
Jak mam ustawione w funkcji while na poczatku dwa zera, to dioda działa(widzialem przez aparat fotograficzny), gdy mam dwa zera na poczatku tak jak jest wyżej, dioda IR nie świeci