Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Proszę o identyfikacje Magistrali

biceps_swir 30 Sty 2017 00:11 681 6
  • #1 30 Sty 2017 00:11
    biceps_swir
    Poziom 10  

    Witam.
    Proszę o identyfikację magistrali. Potrzebuję sklonować 12 sygnałów. Komunikacja odbywa się w jedną stronę.
    Raczkuję w cyfrówce, pętle stany opóźnienia i "ify" rozrosły by się za bardzo, dlatego chciałbym użyć biblioteki ale nie wiem jaka magistrala i czy w ogóle jakaś...
    Poniżej kilka przykładów.
    Proszę o identyfikacje Magistrali Proszę o identyfikacje Magistrali Proszę o identyfikacje Magistrali Proszę o identyfikacje Magistrali

    Odbiera sygnał kontroler http://ww1.microchip.com/downloads/en/devicedoc/40139e.pdf

    0 6
  • Pomocny post
    #2 30 Sty 2017 02:31
    rb401
    Poziom 30  

    biceps_swir napisał:
    Poniżej kilka przykładów.


    Jest to wyraźnie użycie kodu Manchester. Jest przesyłane 9 bitów.
    Początek przesyłu (a ściślej pierwsze dwa bity) w tych akurat czterech próbkach jest jednakowy (ale nie wiem czy to przypadek, czy reguła w opisywanym systemie) i jest to "10" lub "01" (zależy od przyjętej konwencji kodowania).
    Możliwe że pierwszy bit służy wyłącznie do synchronizacji i uproszczenia algorytmu odbioru lub dwa pierwsze bity służą jako wzorzec czasu (prędkości transmisji), ale to tylko moje spekulacje.

    Jeśli potrzebujesz zbudować algorytm nadawania to jest bardzo prosty jak miganie ledem.
    Odbiór też jest łatwy, szczególnie w wypadku kiedy nie trzeba interpretować pierwszego bitu.
    Zobacz na opis kodowania Manchester do Wikipedii są tam obrazki, to łatwiej załapać w czym problem.

    0
  • #4 30 Sty 2017 13:25
    EuroGenio
    Poziom 17  

    Chyba raczej chodzi o 12 poleceń

    0
  • #5 30 Sty 2017 18:14
    biceps_swir
    Poziom 10  

    rb401 napisał:
    Jeśli potrzebujesz zbudować algorytm nadawania to jest bardzo prosty jak miganie ledem.
    Odbiór też jest łatwy, szczególnie w wypadku kiedy nie trzeba interpretować pierwszego bitu.

    Dziękuję za zainteresowanie :]. Otóż sprawdziłem co to jest kodowanie Manchester i na czym polega. Napisałeś że algorytm do nadawania i odbierania jest prosty jak miganie LEDem. Mógłbyś coś zaproponować. Poszukałem trochę i Link znalazłem biblioteki na Arduino i kod. Czy czymś takim jestem wstanie odczytać i nadawać w kodzie Manchester ? (Będę używał Attiny85)
    Z góry dzięki za Odp.

    A i jeszcze odnośnie pierwszych bitów to przypadek że w tych przykładach jest "10" ( sygnał może być czasem odwrócony w fazie). 1 jest zawsze na początku transmisji, później już DATA).

    0
  • Pomocny post
    #6 31 Sty 2017 00:01
    rb401
    Poziom 30  

    biceps_swir napisał:
    Poszukałem trochę i Link znalazłem biblioteki na Arduino i kod.


    Ta biblioteka wydaje mi się zbyt nadmiarowa jak na przesył pojedynczych bajtów. Nie wiem też czy w publikowanej wersji jest poprawna, bo coś widziałem co mi się nie podobało.

    W zakresie jaki potrzebujesz można to zrobić i bez biblioteki.
    Bardzo pomocnym może się okazać ten dokument:

    atmel-9164-manchester-coding-basics_application-note.pdf

    Algorytm nadawania jest opisany w rozdziale 3. i właściwie to trudno mi coś dodać.
    Implementacja w/w algorytmu np. w środowisku Arduino jest prosta, a ze sprzętowych rzeczy wymaga tylko oprócz instrukcji ustawiania pinów portu, funkcji delayMicroseconds() z odpowiednio dobranym do prędkości bitowej argumentem.


    Co do algorytmu odbiorczego, to komplikacja zależy od tego w jaki sposób pracuje program na mikrokontrolerze odbiorczym.
    Dokładniej chodzi o to, czy można przyjąć że pętla główna programu będzie zajmować się wyłącznie czekaniem na transmisję i jej odkodowaniem. I następnie po wykonaniu czynności związanych z interpretacją polecenia, znów wrócić do do wyłącznej obsługi transmisji.
    W takim wypadku dekoduje się bardzo łatwo, używając prostych instrukcji odczytu portu i funkcji typu delayMicroseconds().
    Tak w skrócie zarysuję o co chodzi. Wykrywa się zbocze czyli testuje się w pętli pin portu, jeśli się zmieni (co w domyśle będzie środkiem pierwszego odebranego bitu a później następnych) to odczekuje się czas około 75% czasu transmisji bitu, czyta wartość pinu portu i zapamiętuje się ją jako odkodowany bit, i wraca z powrotem do pętelki wykrywającej zbocze. To wszytko wykonuje się tyle razy ile spodziewamy się bitów (oprócz pierwszego, który posłużył jako start). I tyle.
    Kluczową sprawą w tej metodzie dekodowania jest tu właśnie to odczekanie 75% pozwalające "przeskoczyć" ewentualne zbocza pomiędzy poszczególnymi bitami (nieistotne dla dekodowania) i skupić się tylko na tych zboczach w środku bitów. A inne szczegóły algorytmu (np. moment w którym pobieramy bit jako zdekodowany) to można oczywiście zrobić inaczej.
    W tym dokumencie jest ładny rysunek (Figure 3.0) ilustrujący metodę:

    mandec


    Ale jeśli wymagane jest w pętli głównej wykonywanie na bieżąco innych czynności, to niestety ten prosty algorytm się nie nada. Trzeba użyć przerwań. Albo od pinu odbiorczego (ściślej zboczy na nim) albo od timera. Algorytmy z użyciem przerwań są także opisane w tym dokumencie Atmela, choć myślę że można też wykombinować jeszcze coś innego niż tamte propozycje.

    0
  • #7 31 Sty 2017 22:07
    biceps_swir
    Poziom 10  

    Witam.
    Dziękuję Ci kolego ! :] Bardzo mi pomogłeś, pokazałeś furtkę. :spoko:

    Zabieram się do adaptacji programu.
    Generalnie odczytywać już nie muszę, jest prościej niż myślałem. W pierwszym przykładzie jest binarnie (0)10101010 czyli 170 dziesiętne. Pokrywa mi się to z wartością dziesiętną na wyświetlaczu komputera serwisowego.

    Więc muszę napisać kod aby AVR transmitował Manchesterem (np.170 dziesiętne) po naciśnięciu przycisku 1raz. itd...

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo