Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Attiny45][Bascom][Nadawanie RC5]Prośba o sprawdzeni kodu

07 Wrz 2009 14:44 2957 4
  • Poziom 13  
    Witam.
    Ostatnio zacząłem bawić się w obsługę RC5, ponieważ jest mi ona potrzebna w pewnym projekcie. Po uruchomieniu odbiornika na M8 przyszedł czas na nadajnik. Prowizoryczny był na M8 jednak docelowy miał być na attiny45, ale trochę zbyt późno dowiedziałem się, że Attiny nie posiada 16-bitowego timera1, a także Bascom nie potrafi skonfigurować jego liczników.
    Dlatego postanowiłem napisać procedurę wysyłania w RC5. Kod jest kompletny, jednak nie wiem, czy wszystko jest tak jak powinno, czy timery chodzą tak jak tego chciałem.
    Nadajnik nadaje, tylko nie zawsze to co ja bym chciał - zmieniają się odebrane liczby.

    Jeżeli ktoś byłby tak miły i spojrzał na te moje wypociny i powiedział, dlaczego tak się dzieje bardzo zobowiązany :D

    Odbiornik jest tak skonfigurowany, że jeśli pojawi się coś podczas odbioru rc5 to wyświetla adres i komendę <255 i dlatego nie jest ważne co wyślę; powinno się pojawić.

    Wątpliwości mam co do dobranych przeze mnie czasów i do kolejności wysyłania bitów. U mnie jest od najstarszego (5-tego lub 6-tego) w dół.
    Czasy to:
    wartość timera, to liczba, którą ma odliczyć, nie wpisana

    wartość_timera__preskaler___czas taktu
    111___________*___1____*0,000 000 125 = 13,875 us częstotliwość 72 072kHz
    ______________________________________ 72 072 / 2 = 36 036kHz - nośna
    27____________*__256___*0,000 000 125 = 864us - czas połówki bitu wysyłanego
    ______________________________________864*2 = 1,728ms czas 1 bitu

    Co do schematu, to nie ma w nim nic nadzwyczajnego. Zasilanie 5 V, kondensator 10 uF na 15cm przewodzie, brak ceramika 100 uF, tranzystor KSB772 (innego nie miałem).
    Wszystko ma się zmieścić na płytce 1,5 cm x 0,5 cm, dlatego jest attiny w smd i będą jeszcze dodatkowo 3 przyciski. Zależy mi na jak najmniejszej ilości elementów zewnętrznych.
    Strony z których korzystałem:
    http://www.ustr.net/infrared/index.shtml
    http://www.slideshare.net/biometria/rc5

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    ///edit///
    Naniosłem małą poprawkę
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    zamiast
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Teraz działa jak powinno przy 1 wysyłaniu, ale przy następnych wysyła mi różne inne cuda :)
    A dokładnie:
    wysyłam adr 3 i kom 12
    za pierwszym razem otrzymuję adr 3 i kom 12, ale później
    com 191 i adr 31 czyli binarnie 1011 1111 i 0001 1111
    i tak cały czas. W sumie nie jest mi to potrzebne, bo wystarczy jak wyśle 1 raz, bo procesor podczas każdego naciśnięcia włącza się, a gdy nie ma wciśniętego przycisku to jest odłączony od zasilania. Ale może w późniejszym czasie wykorzystam przytrzymanie przycisku, dlatego chciałbym wiedzieć gdzie jest błąd?
  • Poziom 29  
    Witam.
    Attiny45 chyba nie ma (może się mylę) możliwości podpięcia zewnętrznego kwarcu.
    Oscylatory wewnętrzne w AVR-ach nie są zbyt dokładne a instrukcja RC5SEND tej dokładności wymaga. Miałem podobny przypadek w Attiny2313. Pilot był z oscylatorem wewnętrznym na 4MHz i poprawnie działał co czwarty pilot. Po zmianie na kwarc zewnętrzny działa już każdy.
  • Poziom 39  
    Dlaczego kolega nie korzysta z trybu CTC z opcją Toggle Pin? Nośną można przecież generować sprzętowo.
  • Poziom 13  
    A więc tak: Pilot już jest zrobiony, więc temat nie jest już aktualny. Układ ten jest wlączany w momencie przyciśnięcia jednego z 3 przycisków. Układ jest tak zaprojektowany, aby pobierać jak najmniej prądu (200nA oczywiście podczas pracy jest większy :D). Co do generacji sprzętowej nośnej, to nie wiedziałem o niej, ale tak jak pisałem, pierwsza komenda wysyła się bez problemu. Gorzej jest z wysłaniem następnej, nawet po 1s.