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

[C, AVR, IR LED przez PNP]Nadajnik RC5.

mefiu990 26 Sty 2014 10:59 747 0
  • #1
    mefiu990
    Poziom 9  
    Dzien dobry,
    Chcialbym zbudowac nadajnik RC5 z Atmega8, diody IR LED oraz klawiatury matrycowej 4x4. Obsluge klawiatury mam juz zrealizowana i wszystko dziala w porzadku - drgania stykow aby wyeliminowac 'wielokrotne' wscisniecie zrealizowalem programowo bez uzycia timerow za pomoca funkcji delay - atmega8 ma byc tylko pilotem wiec nie zalezy mi na czasie procesora az tak bardzo. Problem napotkalem jednak podczas programowania diody LED. Znalazlem w Internecie przyklad implementacji i przeanalizowalem go. Oto i on:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tworca kodu uzywal Atmega8 z kwarcem 8Mhz ja uzywam zewnetrzne 16Mhz, wiec w funkcji main() wpisalem zamiast 110 to 222 do rejestru OCR2. Rowniez nie uzywalem preskalera dla Timera2.
    Problem polega na tym ze ten kod chyba (tworca nie zamiescl schematu podlaczenia IR LED) przyjmuje ze anoda diody LED jest podlaczona do portu OC2 bezposrednio a katoda do GND - lub przez tranzystor NPN. Ja jednak mam wpieta diode na plytce przez tranzystor PNP wiec mam odwrocony sygnal bo:
    TCCR2= (1<<FOC2)|(1<<COM21)|(1<<CS20); // wyłączamy LED i timer2 wcale nie powoduje wylaczenia u mnie diody. zgodnie z ds atmegi to spowoduje wyczyszczenie (log '0') wyjscia OC2 gdy TCNT2==OCR2. u mnie gdy mam PNP sprawi ze tranzystor zacznie przewodzic stad swiecenie diody. Z tym to potrafie sobie poradzic bo zamiast zerowac OC2 bede ustawial OC2. Dobrze mysle z tym?
    Korzystajac z informacji na stronie:
    http://www.huitsing.nl/irftdi/
    Zobaczylem ze aby wyslac bit o wartosci 0 przez IR LED nalezy zaczac od pulsacji przez 890us po czym przejsc do stanu 'przerwy' (IR LED nie swieci) przez nastepne 890us. Realizuje to linijka:
    TCCR2= (1<<FOC2)|(1<<WGM21)|(1<<COM20)|(1<<CS20); - tryb toggle - przelaczanie pulsacja na OC2.
    Dla bitu o wartosci 1 zamieniamy pulsacje ze stanem gdy nie ma pulsacji.
    I teraz pytanie:
    skoro mam ten PNP to wiem ze aby dioda nie swiecila musze ustawic OC2 a nie zerowac jak dla NPN wiec musze zmienic ta linijke:
    TCCR2= (1<<FOC2)|(1<<COM21)|(1<<CS20);
    ale czy musze zmieniac linijke odpowiadajaca za okres pulsacji:
    TCCR2= (1<<FOC2)|(1<<WGM21)|(1<<COM20)|(1<<CS20);
    czy moge ja zostawic dla tranzystora PNP?
    Z gory dziekuje za pomoc.

    Dodano po 10 [minuty]:

    Dla dopelnienia sprawy dodam ze tranzsytor to BC55x (nie pamietam dokladnie czy 556 czy 557) przez ktory steruje dioda IR LED. Odbiornik po drugiej stronie to TSOP1736 wlutowany z kondensatorem i rezystorami tak jak w nocie katalogowej tego odbiornika. Odleglosc miedzy odb a nad to zaledwie kilka centymetrow - cele edukacyjne.