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.

ATMEGA16 i transmisja danych przez podczerwień / kod w c

31 Paź 2009 20:10 3711 11
  • Poziom 9  
    Witam!
    Mam do zrealizowania projekt - komunikacja pomiędzy komputerami na poczerwieni,ale w tym posicie chciałbym ten temat ograniczyć do samej komunikacji pomiedzy mikrokontrolerami AVR .
    Założenia:
    Odległość : od kilkudziesięciu cm do góra 3 metrów ( możemy założyć 1 metr)
    Komponenty: nie mogę użyć gotowej IRdy :) , zakładam że użyje fototranzystora i diody IR , a reszte załatwi procesor atmega16 ( w końcowej wersji wymienie go na mniejszy, poprostu taki mam teraz do dyspozycji)
    Prędkość transmisji nie jest określona, aczkolwiek wiadomo im szybciej tym lepiej

    Fototranzystor i diodę IR już mam (Pan w sklepie je dopasował co do długości światła , zaznaczyłem również że ma być to do komunikacji, niestety byłem na tyle głupi że nie zapisałem symboli)

    Na początek mały eksperyment:
    ATMEGA16 i transmisja danych przez podczerwień / kod w c
    Code:

    #include <avr/io.h>
    #include <avr/delay.h>

    main()
    {
    //dwa najstarsze bity to moje czerwone diody wiec niech będą wyjściem
    //najmłodszy jest wejściem ,ten kabel co wchodzi do procka na schemacie
    DDRA=0b11000000;
    PORTA=0b11000000;

    while(1)
    {
       if(PINA&0b00000001==0b00000001)
       {
          PORTA=0b00000000;
       }
       else
       {
          PORTA=0b11000000;
       }
    }

    }



    Zrobiłem coś takiego jak na schemacie (rezystor wstawiłem nastawny 100k ) . Miało to działać tak że jak poświecę na tranzystor diodą ir to on zgasi diody led które podpiełęm do portu A.
    Czyli mamy ten opór 100k gdy nie świecimy prąd nie płynie przez tranzystor wiec potencjał na nodze procka jest 5v.A gdy poświecimy tranzystor zaczyna przewodzić
    i mamy dzielnik napiecia ( przy odległości 20 cm tranzystor ma opór 20k ) potencjał na nodze procka powinien wynosić 1V i diody powinny zgasnać. No ale oczywiście nie działa nie wiem czemu ... bawie sie z tym dwa dni ... może mam zupełnie złe podejście zaznaczam ,że jestem totalnym amatorem i proszę o konstruktywną pomoc. Zaznaczam że żadne gotowe układy nie wchodzą w grę.
  • Poziom 42  
    Ja proponuję najpierw pobawić się w napisanie prostych programów do wysterowania zwykłej diody LED żeby sobie migała - no i jeszcze sporo poczytać o jakichś podstawach łączenia takich elementów z procesorem - bo tak? to trochę ciężko cokolwiek podpowiedzieć
  • Poziom 9  
    Mozę trochę źle się wyraziłem mówiąc że jestem amatorem, programować umiem w kilku językach, wysterowanie diody led to raczej nie problem.Zaprojektowałem z pomocą (dużą pomocą) jednego doktorka płytę ewaluacyjną do atmegi16 i teraz używam ją do zrealizowania właśnie tego projektu. Podsumowując umiem programować i zrobić z mikroprocesorem takie proste rzeczy jak zapalić diodę, zareagować na naciśnięcie przycisku itp mam również podstawy elektrotechniki ( raczej w teorii niż w praktyce). No ,a ten projekt poprostu muszę zrobić...
  • Poziom 39  
    Ja tam na tym schemacie, co narysowałeś nie widzę, ani tranzystora, ani co to za noga podpięta jest gdzieś pomiędzy ten rezystor, a diodę.
    Nie mówiąc już o zasilaniu uC itd. Jak chcesz aby ci pomóc to postaraj się trochę i narysuj coś, no bo na Halloween nikt nie staje się wróżką.
  • Poziom 42  
    xury napisał:
    Ja tam na tym schemacie, co narysowałeś nie widzę, ani tranzystora, ani co to za noga podpięta jest gdzieś pomiędzy ten rezystor, a diodę.
    Nie mówiąc już o zasilaniu uC itd. Jak chcesz aby ci pomóc to postaraj się trochę i narysuj coś, no bo na Halloween nikt nie staje się wróżką.


    święta racja ! ;)

    .... skoro więc wysterowałeś już zwykłą diodę LED to rozrysuj chociaż poprawnie schemat jej podłączenia do procka - bo to co pokazałeś w pierwszym poście co najmniej "troszkę" przeczy temu, że wysterowałeś diodę LED

    z chęcią każdy ci pomoże ale przy minimum wysiłku z twojej strony
  • Poziom 9  
    ATMEGA16 i transmisja danych przez podczerwień / kod w c
    no może pierwszy schemat nie był zbyt udany :P.Dodaje nowy.
    Wracając do tematu chciałem aby to zadziałało jak dzielnik napiecia, w momęcie gdy swiece na tranzystor mam 20k (opór tranzystora(?!)) i myslałem że odłoży sie na nim około 1 v. No niestety tak nie jest. Myślę że problem tkwi w tym że założyłem że stan wysokiej impedancji to opór "nieskończony", a w rzeczywistości tam jest około 10K ( gdy podłaczyłem do pinu w stanie wysokiej impedancji rezystor 10k i zwarłem do napiecia 5v , na tym rezystorze było napiecie około 2,5V).

    Jeśli stan wysokiej impedancji to rzeczywiście 10 K , to trzeba dołożyć jeszcze jakiś rezystor przed pinem procka ...

    Może moje wnioskowanie jest beznadziejne i bezsensu w razie czego prosze o wyrozumiałość.
  • Poziom 42  
    no tak teraz to inna rozmowa z takim schematem ;)

    ale ok - proponuję ci porzucić myśli o takim sposobie do komunikacji jeśli chodzi o podczerwień - tzn za pomocą zwykłego fototranzystora.

    Jeśli chcesz od razu przejść wiele kroków do przudu zanim sam dojdziesz, że to jest bez sensu - to zainteresuj się scalonymi odbiornikami podczerwieni jak np TFMS

    TSOP 1736 / TFMS 5360 / 36kHz / - poszukaj sobie PDF'a i poczytaj jak to działa


    tu masz przykład nadajnika:
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=1139494&highlight=

    który jak widzisz może być zastosowany do najróżniejszych celów

    generalnie poczytaj o sposobie odbioru sygnałów z różnych pilotów i standardów jak np RC5, no:

    http://www.ustr.net/infrared/infrared1.shtml
  • Moderator Mikrokontrolery Projektowanie
    Mirek, przeciez pisal, ze scalonych odbiornikow nie moze wykorzystac.
    saturnim, zmien swoj sposob myslenia o fototranzystorze. Po pierwsze, on nie zmienia oporu, tylko prad plynacy pomiedzy EC. W DS znajdziesz tzw. prad ciemny i prad dla wlaczonego fototranzystora. Znajac je mozesz dobrac rezystor podciagajacy. Ale zapewne prad tego tranzystora jest bardzo maly i potrzebujesz zbudowac wzmacniacz, zanim podasz to na noge procesora. I tu sie zaczyna zabawa - wzmacniacz musi miec taka charakterystyke, zeby dobrze przenosil sygnaly o czestotliwosci charakterystycznej dla swojej transmisji. I druga sprawa - skad pewnosc, ze fototranzystor reaguje tylko na IR? Ma jakis filtr - jak na niego spojrzysz to powinien byc czarny. Oczywiscie takie filtry sa kiepskie i na swiatlo widzialne w jakims stopniu tez bedzie reagowal - dlatego wzmacniacz musi to uwzglednic i eliminowac skladowa stala, a wzmacniac tylko skladowa zmienna - twoja nosna. Z tego tez plynie kolejny wniosek - sprawdzanie dzialania tego ukladu w warunkach statycznych jest do kitu. Poczytaj jak dzialaja scalone odbiorniki Ir to ci troche rozjasni.
  • Poziom 42  
    tmf - a gdzie ty widziałeś, że autor napisał, że nie może wykorzystać scalonych odbiorników ?

    saturnim napisał:

    Założenia:
    ...
    Komponenty: nie mogę użyć gotowej IRdy :) ,
    ....

    Zaznaczam że żadne gotowe układy nie wchodzą w grę.


    a wg ciebie scalone odbiorniki typu TFMS - to są jakieś IRD'y ??? albo gotowe układy załatwiające wszystko - dzięki którym nie trzeba już użyć procesora - bo same załatwią transmisję ????

    podejrzewam, że autor nie za bardzo wie jeszcze co to są - takie odbiorniki TFMS ??? to po pierwsze a po drugie nawet specjalizowane układy obsługujące standard IrDa w PCtach też same z siebie nie załatwiają sprawy i nawet ich oprogramowanie też nastręczyłoby wiele problemów. Tym bardziej, że wielu początkujących gdy zaczyna myśleć o jakiejkolwiek transmisji IR - to od razu na początku przychodzi im do głowy jakaś tajemnicza bliżej dla nich nie określona IrDA - ze słyszenia (lub praktycznego zastosowania) znana z komputerów PC. Nie mają natomiast pojęcia - o tym jak realizowana jest transmisja np w pilotach zdalnego sterowania - nie wiedzą o sposobach kodowania jak np popularny RC5 ( w ogóle dla czego stosuje się takie kodowanie ) - i stąd próbują - próbują - próbują - nadawać sobie jakieś zera i jedynki przez diodę IR oraz fototranzystor - żeby po jakimś czasie samemu w końcu dojść do wniosku, że nie tedy droga - gdy po raz pierwszy poczytają w końcu o tym jak powstało kodowanie IR dla pilotów.

    Oczywiście mogę się mylić w tym przypadku co do założeń autora - ale może jeśli nic jeszcze nie wie o kodowaniu IR w taki typowy znany już sposób - to może też się okazać, że zmienią się także jego założenia
  • Poziom 9  
    tmf dzięki za wyjaśnienei czemu to nie zadziała,
    Mirek dzięki za przykłady czujników, pewnie jede z nich zastosuje, mogłeś podobnie jak tmf wyjaśnić czemu to nie zadziała. Pozdrawiam
  • Poziom 42  
    saturnim napisał:
    ...., mogłeś podobnie jak tmf wyjaśnić czemu to nie zadziała. Pozdrawiam


    ale tego typu mogą zadziałać tyle że zanim otrzymasz parametry takiej transmisji w układzie opartym o zwykły fototranzystor czy fotodiodę - będziesz musiał dodać tyle dodatkowych elementów zewnętrznych, wzmaczniaczy operacyjnych, filtrów itp - że na końcu okaże się iż taniej wyjdzie zastosować taki scalony już odbiornik (który to wszystko ma już w sobie) - stąd od razu próbowałem ukierunkować cię na tego typu czujniki. A wystarczy poczytać trochę o nich, poczytać ich noty PDF aby zobaczyć jak one działają i jaką mają przewagę nad prostymi układami "własnej produkcji" do takich zastosowań
  • Poziom 13  
    Witam,

    myslę że nie warto w tym przypadku bawić sie w RC5 - przy implementacji są z tym problemy, do pilotów jest to dobre ale nie do transmisji ciągłej.

    sugerowałbym użycie sprzetowego USARTa i podłaczenie do wyjścia TX diody nadawczej poprzez tranzystor PNP a do wyjscia generatora PWM na którym będzie przebieg prostokątny 36kHz tranzystora NPN. W ten sposób modulujemy sygnał nośnej sygnałem danych z wyjścia TX.
    W programie piszemy proste komendy USARTa - jest tego masę, są też gotowe biblioteki.
    W odbiorniku wstawiamy TFMS 3650 na 36kHz i podpinamy wyjście danych z TFMS do wejścia RX USARTA drugiego AVRa.

    Pojawia sie problem że pewnie MCU będzie musiał sie komunikować z PC - zapewne przez USART a nie USB wiec polecałbym zastosowanie AVR z dwoma sptzętowymi USARTami (do komunikacji z innym MCU i z PC) lub zaimplementowanie softwareowego USART'a do współpracy z PC lub z innym MCU.

    To tak by nakreślić jedno z mozliwych rozwiązań.
    Opisany wyżej sposób modulacji na 36kHz działa wyśmienicie - sprawdziłem osobiście.

    Pozdrawiam