Witam.Postanowiłem zbudować układ dekodujący kod rc5 nadawany z pilota i sterujący podłączonymi urządzeniami.Po przeczytaniu tego:
http://www.easy-soft.net.pl/zasoby/rc5-dekoder.pdf.
,a konkretnie tego fragmentu:
"w czasie trwania pojedynczego bitu danych (a ściślej półbitu), do odbiornika dotrą 32 impulsy
nośnej (0,864 ms / 27 μs = 32 impulsy),
· każda przesyłane słowo ma długość 14 bitów i w związku z tym do odbiornika dotrze 14 x 32
= 448 impulsów nośnej nadajnika."
Napisałem programik zliczający pojawienie się stanu niskiego na wyjściu odbiornika.Okazało się że programik po (jednorazowym) nacisnięciu przycisku nalicza liczbę około 5700 (w zależności od tego w którą stronę skieruje pilota).Czyżby TSOP nie demodulował nośnej?A może to mój pilot nie nadaje rc5 tylko coś innego (pilot za 3zł - uniwersalny ale patrzyłem z oryginalnym od Samsunga i jest to samo).Bardzo prosiłbym o pomoc ,ponieważ zależy mi na zbudowaniu tego układu.
Załączam programik:
Do sprawdzania ilości użyłem ifa i LEDa ponieważ nie dysponuję wyświetlaczem.
http://www.easy-soft.net.pl/zasoby/rc5-dekoder.pdf.
,a konkretnie tego fragmentu:
"w czasie trwania pojedynczego bitu danych (a ściślej półbitu), do odbiornika dotrą 32 impulsy
nośnej (0,864 ms / 27 μs = 32 impulsy),
· każda przesyłane słowo ma długość 14 bitów i w związku z tym do odbiornika dotrze 14 x 32
= 448 impulsów nośnej nadajnika."
Napisałem programik zliczający pojawienie się stanu niskiego na wyjściu odbiornika.Okazało się że programik po (jednorazowym) nacisnięciu przycisku nalicza liczbę około 5700 (w zależności od tego w którą stronę skieruje pilota).Czyżby TSOP nie demodulował nośnej?A może to mój pilot nie nadaje rc5 tylko coś innego (pilot za 3zł - uniwersalny ale patrzyłem z oryginalnym od Samsunga i jest to samo).Bardzo prosiłbym o pomoc ,ponieważ zależy mi na zbudowaniu tego układu.
Załączam programik:
Do sprawdzania ilości użyłem ifa i LEDa ponieważ nie dysponuję wyświetlaczem.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define Enable_INT0 GICR |= (1 << INT0);
volatile int liczba_low;
ISR (INT0_vect)
{
liczba_low++;
}
int main (void)
{
DDRB=0xff;
Enable_INT0;
sei();
while(1)
{
if(liczba_low>5750)
{
PORTB=0xff;
_delay_ms(1000);
PORTB=0x00;
liczba_low=0;
}
}
}