logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega8515][rc5][c] obsługa

grabie2 29 Lis 2009 00:24 2587 10
  • #1 7321578
    grabie2
    Poziom 11  
    Witam!

    Swoją zabawę z podczerwienią rozpocząłem od bascoma(wiem zła praktyka).
    Teraz borykam się z obsługą tego w avr-gcc.
    Ze względu na to że wujek google mi nie pomaga zwracam się do was.
    Pytanie:

    Jak obsłużyć rc5 w avr-gcc z rozdzieleniem na adres i komendę(jak w bascomie).

    Zależy mi na wydajności kodu.

    P.S. Jeśli zły dział proszę o przeniesienie.
  • Pomocny post
    #2 7321835
    ZbeeGin
    Poziom 39  
  • #4 7323590
    grabie2
    Poziom 11  
    Wujek google obraził się na mnie(zamiast przycisku szukaj mam: "Dostępne tylko dla nie zbanowanych użytkowników"). xD

    Tak na poważnie ja znaleźć nie mogłem.

    P.S. Twój kod będzie działać jak poprawisz kilka błędów i czasy
  • #5 7323671
    mgiro
    Poziom 22  
    A mógłbyś powiedzieć, gdzie są te błędy w moim programie, bo nie mam pojęcia. Wczoraj prawie cały dzień nad tym siedziałem.

    Czas ustawiłem na prawie 1,3ms. To źle??
  • #6 7323982
    grabie2
    Poziom 11  
    Głównie chodzi o czasy.

    Rc5 chodzi z częstotliwością ok 36 kHz

    timer powinien chodzić trochę wolniej

    u ciebie działa z częstotliwością ok. 770 hz
  • #7 7324032
    mgiro
    Poziom 22  
    Sygnał informacyjny jest modulowany nośna 36kHz.

    Sygnał na wyjściu odbiornika(w moim przypadku TFMS5360) jest zdemulowany.

    Jeden bit trwa 1,778ms. Wiec 3/4 tego czasu to 1,3335ms.

    Więc jaki czas powinienem ustawić Twoim zdaniem?
  • #8 7327410
    elektronik12z
    Poziom 13  
    Witam

    Podłączę się do tematu, jak przeliczyć TIMER_0_CNT z ww. linku (od ZbeeGin):

    Link

    dla 4Mhz jest:

    #define TIMER_0_CNT 0xCA     //  111us with CLK/8 prescale
    
    ...
    w kodzie
    
    TCNT0 = TIMER_0_CNT; 


    na kwarc 11059200 Hz?

    Wiem, że jest to timer 8 bitowy liczący do 0xFF, ale nie wiem skąd się wzięło 0xCA, proszę o wyjaśnienie i wyrozummiałość?
  • #9 7328606
    ZbeeGin
    Poziom 39  
    Kolega miał pewnie nieco rozkalibrowany generator RC, skoro takie ustawienie mu akurat wyszło.

    Licznik Timer0 zlicza przez pełen okres 256 impulsów. Zatem jeśli od 0x100 odejmiemy 0xCA to otrzymamy 0x36, co daje 54 impulsy zliczone przez licznik. Teraz:

    4 MHz/8/54 = 9259,25 Hz
    1/9259,25Hz = 108 us


    Otrzymamy zatem mocno naciąganą wartość w okolicach 111us.

    Dla Twojego układu potrzeba jednak tej samej lub zbliżonej częstotliwości. Zatem zmieniamy preskaler licznika na następną dostępną wartość = 64 i:

    11,059 MHz/64/9259,25 Hz = 18,66

    Stąd zaokrąglając:

    11,059Mhz/64/19 = 9094,57 Hz
    1/9094,57Hz = 109,95 us


    Co jest wartością dość zbliżoną do obliczonych wcześniej 108us, bliższą nawet tych przykładowych 111us.

    Czyli: preskaler licznika na 64, rezonator 11,059MHz, a do licznika wpisujesz 0xED.
  • #10 7330833
    elektronik12z
    Poziom 13  
    Witam

    ZbeeGin wielkie dzięki!!!

    Pozdrawiam
  • #11 7333250
    ZbeeGin
    Poziom 39  
    Możesz nawet zostawić ten presklaler w spokoju na wartość 8 i wpisywać do licznika wartość 106 (0x6A) gdyż:

    11,059 MHz/8/150 = 9215,83 Hz
    1/9215,83 Hz = 108,5 us
REKLAMA