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

Zdalne sterowanie AVR - generowanie / odczyt częstoliwości

kaytec 13 Maj 2009 01:31 4214 8
  • #1 13 Maj 2009 01:31
    kaytec
    Poziom 20  

    Witam, wymyśliłem swego rodzaju zdalne sterowanie, jednak mam kilka pomysłów na zrealizowanie tego. Sprawa wygląda tak:

    1. AVRek (Atmega8 lub Attiny2313) w zależności od stanów portów generuje jakąś częstotliwość.

    2. Częstotliwość ta "przesyłana jest" za pomocą "medium transmisji" w tym przypadku będzie to Krótkofalówka (prawie bezpośrednie podłączenie do mikrofonu urządzenia)

    3.Częstotliwość jest odbierana przez AVRka podłączonego do krótkofalówki, który z kolei podejmuje jakieś działanie (wyświetla text na lcd [SMS] , włącza porty, steruje serwomechanizmem)

    No i początkowo miałem to zrobić tak.
    AVR -> Krótkofalówka nadawcza ->Krótkofalówka odbiorcza ->Przetwornik f/U ->AVR

    Głównie spowodowane jest to tym, że wiem jak oprogramować ADC (w zależności od napięcia na nim, jakiś stan) Stąd przetwornik f/U. A generowanie na AVRku nadawczym, miałem zrealizować PWM'em potem łopatologicznie dobrać przetworzoną już wartość napięcia i przypisać ją do jakiejś akcji (odczytać na LCD wartość ADC).

    Czy da się to zrealizować pomijając przetwornik f/U, wykorzystując jakieś polecenie do odczytywania częstotliwości w Bascomie? Zależy mi góra na rozpoznaniu 15częstotliwości tak więc margines błędu może być stosunkowo duży (kilkanaście HZ).

    Jakich poleceń użyć by wygenerować żądaną częstotliwość w bascomie? stosując PWM, zauważyłem płynną zmianę czestotliwości, a tutaj musiało by się to odbywać natychmiast.

    Opisywany projekt mam zamiar opublikować na zasadach Open Source na elektrodzie, tak żeby każdy mógł zrobić sobie proste zdalne sterowanie. (płytka, programy itp) Potrzebuję tylko rozwiązania wyżej wspomnianych problemów.

    Pozdrawiam.

    0 8
  • #2 13 Maj 2009 02:40
    NeooeN
    Poziom 13  

    Chyba łapie o co Ci chodzi ale szczerze powiedziawszy nie wiem na ile to sie sprawdzi. Generealnie można zrobić tak że z pewną konkretną częstotliwością będziemy próbkować sygnał wchodzący i testujemy ile takich cykli trwa sygnał wysoki i niski (czyli potrzebujemy co najmniej częstotliwości próbkowania równej z najwyższą próbkowaną). Ja to widzę mniej więcej tak: obieramy np. sygnał wysoki za ten który będziemy próbkować i przy założeniu że występuje na danym porcie.pinie zwiększamy licznik o jeden, jeżeli wykryjemy zbocze opadające to dzielimy częstotliwość próbkowania przez wartość licznika i podejmujemy działanie na podstawie otrzymanej wartości. Na koniec zerujemy licznik i ponownie zaczynamy zliczać wystąpienia stanu wysokiego. Nie widzę tego z bardzo prostego powodu, synchronizacja. Musiał byś albo bardzo dokładnie podliczyć wszystkie wartości (częstotliwość PWM'a, próbkowanie itd) albo dobrać doświadczalnie odpowiednie wartości przy zachowaniu dużej tolerancji a to z kolei możesz uzyskać (chyba) najprościej stosując bardzo duże różnice w kolejnych wartościach częstotliwości. W momencie kiedy chcesz w ten sposób przesyłać liczby np. 8bitowe ale w formie analogowej będziesz musiał zastosować bardzo duży zakres pasma tych częstotliwości niosących informację. Przesyłanie w ten sposób danych to już w ogóle jest nie fajny pomysł bo jak w nie odpowiednim momencie zmienisz częstotliwość PWM'a to będziesz miał kaszenę, po prostu dane się sypną jeżeli nie dojdzie cały ciąg bitów wysokich.

    IMHO jeżeli już masz jakiś układ który pozwoli Ci w ten sposób przesyłać pojedyncze bity to przy założeniu że stan na wejściu jest idealnie odwzorowany na wyjściu już lepiej pobawić się w jakieś kodowanie transmisji np. w celu wyeliminowania błędów, które mogą się pojawić. Ale dopóki się nie pojawią to można to zrobić jako zwykły RS232 z wykorzystaniem UART'u.

    0
  • #3 13 Maj 2009 02:53
    kaytec
    Poziom 20  

    Witaj, chyba trochę mnie nie zrozumiałeś, nie mam zamiaru przesyłać danych synchronizować itp. Potrzebuje tylko żeby AVR po naciśnięciu guzika nadał częstotliwość np 200hz, a drugi AVR rozpoznał że jest to 200hz i zapalił diodę.
    Tych częstotliwości będzie może z góra 7-8 np.
    50Hz
    100Hz
    150Hz
    200Hz
    250Hz
    300Hz
    350Hz
    400Hz

    I przy zastosowaniu przetwornika f/U (http://www.elportal.pl/pdf/k04/61_087.pdf) Mógłbym banalnie oprogramować avrka w bascomie używając praktycznie tylko Getadc, if i elseif. Bo każda częstotliwość odpowiadała by jakiejś wartości ADC.

    Generalnie zastanawiam się czy nie ma przypadkiem jakieś prostej komendy (w stylu GetADC) do pomiaru częstotliwości na którymś pinie, bez używania skomplikowanych przerwań itp.

    0
  • #4 13 Maj 2009 03:04
    NeooeN
    Poziom 13  

    No to rzeczywiście dla tylko kilku wartości i przy założeniu że odwzorowanie wchodzącego sygnału nie jest krytyczne to pomysł jak najbardziej uważam za ciekawy.

    Co do pomiaru częstotliwości to tak jak w poprzednim poście napisałem. Raczej nie odczytasz jej pojedynczą funkcją bo na taki pomiar potrzebny jest czas a ten ma w tym momencie krytyczne znaczenie dla dokładności pomiaru. Tak czy siak rozwiązanie z przerwaniem i liczeniem konkretnego stanu nie powinno być trudne do oprogramowania szczególnie w basicu.

    0
  • #5 13 Maj 2009 15:57
    PiotrEtenM500
    Poziom 19  

    Może łatwiej będzie zrobić to na ATMedze8 i moduł AUREL TX-SAW-MID-3V koszt niski i program banalnie prosty: oparty na podaniu komendy np

    PRINT "LED1-ON"
    PRINT "LED2-ON"
    .......................

    by zgasić zrobisz
    PRINT "LED1-FF"
    PRINT "LED2-FF"


    po drugiej stronie inkey() oraz warunek i masz gotowca. poco wyważać drzwi skoro są już otwarte
    AUREL działa po UARTcie wiec zero komplikacji. nie wiem poco chcesz generować częstotliwości potem je demodulować. To rozwiązanie jest proste podajesz komendę tekstową i masz efekt po drugiej stronie

    0
  • #6 14 Maj 2009 15:03
    Nawigator
    Poziom 33  

    Może dwutonowe kodowanie znane z telefonu by tu się nadało, są gotowe nadajniki i odbiorniki?

    N.

    0
  • #7 14 Maj 2009 22:11
    kedzi1
    Poziom 18  

    Hehe, a nie sądzicie że gotowy tor transmisji danych w jednym scalkaczku wyjdzie taniej niż krótkofalówka. Jak nie to na pewno będzie to bardziej pewne i kompaktowe rozwiązanie. Ten sposób jes jak najbardziej możliwy do realizacji, tylko jaką to będzie miało tragiczną prędkość.

    Aha, jeszcze może warto wyguglować "pocket radio", pamiętam jak za czasów Commodore 64, w czasopiśmie C&A było to opisywane. To były czasy :).

    0
  • #8 15 Maj 2009 16:01
    sq6ade
    Poziom 40  

    Nawigator napisał:
    Może dwutonowe kodowanie znane z telefonu by tu się nadało, są gotowe nadajniki i odbiorniki?

    N.


    Owszem - nadało by się - są nawet gotowe transceivery np. MT8880
    Proponuję również zapoznać się z możliwościami układu DS8500 (Maxim)
    Można podłączyć wprost pod UART w CPU.

    0
  • #9 16 Maj 2009 10:37
    Nawigator
    Poziom 33  

    Staram się tylko nie wiem czy już trzeba po Anschlusie po niemiecku czy jeszcze można w ojczystym języku.
    Z telewizją to sie zgadzam.
    Co do DTMF warto rzucić okiem na notę Atmela AVR314 na:
    http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
    gdzieś było coś o podobnym dekoderze, nie wiem czy nie na Microchipie.
    DTMF jest o tyle wygodne że można wykorzystać gotową klawiaturę ze scalakiem z telefonu.

    N.

    0