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

Jak odebrać bitstream z radia i zmieniarki ?

xury 17 Sie 2011 11:25 1529 6
REKLAMA
  • #1 9833297
    xury
    Specjalista automatyka domowa
    Postanowiłem sobie (trochę na wyrost z moimi umiejętnościami), że zrobię sobie emulator zmieniarki CD do Audi. Poszukałem trochę w sieci i na forum i znalazłem, kilka użytecznych informacji takich jak:
    Niski poziom na lini Dataout
    - około 650 us - to logiczne 0
    - około 1,77ms - to logiczne 1
    - około 4,57ms - bit startu.
    Jako, że jeszcze nie miałem do czynienia z odbiorem bitstreamu to nie wiem jak w ogóle się do tego zabrać. Prosiłbym o jakieś info w tej sprawie. Zamierzam pisać w Bascomie, ale przyda się każda informacja np algorytmu odbioru itp.
  • REKLAMA
  • Pomocny post
    #2 9833562
    nsvinc
    Poziom 35  
    Najpierw musisz zdekodować warstwę fizyczną - czyli musisz mierzyć impulsy. Najlepiej by było, gdybyś to zrobił na timerze capture, mierzysz czas odstepu miedzy zboczami, i tyle... Kazdy bit po bicie wpychasz do fifo...

    w petli głównej masz pętlę która rozbiera tą kolejkę, i zamienia bitstream na ramki. Takie ktore mają zdefiniowany początek i koniec, czyli pre-parsowanie.

    Następnia funkcja, która połyka odpowiednio spreparsowany bitstream, zajmuje się interpretacją zawartości takiej ramki, czyli musisz mieć opis protokołu według którego zmieniarka popycha bity do odbiornika...
  • REKLAMA
  • #3 9833681
    xury
    Specjalista automatyka domowa
    Trochę mi rozjaśniłeś sprawę. Chodź jeszcze nie do końca wiem jak to zrobić.
    Mianowicie z powyższych informacji znam długość impulsu w stanie niskim dla zera i jedynki, ale nic nie wiem jak długo będzie trwał impuls w stanie wysokim.
    Jakoś kompletnie nie mogę pojąć jak to robić przy pomocy timera w capure mode.
    Jedynie po głowie mi chodzi taka myśl:
    Podpiąć Dataout z radia do jakiegoś PCINT
    W pierwszym przerwaniu od PCINT załączać timer.
    W drugim zatrzymywać.
    W zależnośći od zmierzonego czasu wysyłać zero lub jeden za pomocą shift do zmiennej typu byte.
    Dalej już sobie dam radę. Ramka ma długość 4 bajtów pierwsze dwa są zawsze takie same, a kolejne dwa to komenda.
    Dobrze rozumuję, czy może jakoś inaczej to zrobić ?
  • REKLAMA
  • Pomocny post
    #4 9833689
    nsvinc
    Poziom 35  
    Jak odebrać bitstream z radia i zmieniarki ?
    Tak wyglądają "bity" na kablu. Stan wysoki jest stanem spoczynkowym.

    Wyobraz sobie, ze bierzesz timer, podlaczasz taki sygnał do procesora, i co zbocze przechwytujesz wartosc z timera a następnie wykonujesz odpowiedni ISR. Każdy odstęp ma przecież swój unikalny czas. W ISRrze wiesz dokładnie, jakie zbocze właśnie nastąpiło. Jesli opadające, to zresetuj i włącz timer. Jeśli narastające, porównaj stan licznika z wzorcem, podejmij decyzję jaki bit, i popchnij do kolejki, i wyłącz timer...

    Proces "przechwycenie timera do specjalnego SFRa i opcjonalny ISR" jest właśnie trybem capture...

    Budowa takiego czegoś w oparciu o dwa external interrupty i jeden timer jest średnie. Głównie dlatego, że na AVR przerwania (chyba) nie są priorytetowane. Procek też nie jest za szybki... Więc możesz otrzymywać przekłamany czas, odfiltrowywać go lub źle interpretować, jeśli z dowolnego powodu opóźnisz rdzeń tak zeby nigdy nie wyłączał tych dwóch ext intów na dłużej niż na te 658us. No i też za wszelką cenę nie powinieneś zadnego z tych intów zgubić...
  • REKLAMA
  • #7 9834276
    xury
    Specjalista automatyka domowa
    Jakby ktoś chciał zrobić coś podobnego, to pewne informacje są w poniższym linku:
    http://forums.hackaday.com/viewtopic.php?f=3&t=123

    To moje pierwsze próby napisania programu. Jeszcze nie testowałem go w praktyce
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jeszcze jedno pytanie - jak działa Noise Canceler ?
    Czy by go użyć muszę zwiększyć x4 ilość impulsów w Select Case ?
REKLAMA