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

[MEGA8] [C] - Generowanie jednocześnie 3 sygnałów taktującyh

_Antos_ 10 Kwi 2014 20:32 1545 4
REKLAMA
  • #1 13496382
    _Antos_
    Poziom 10  
    Witam

    Oczywiście zaczynam dopiero zabawę z tym na poważnie, czyli C i uC.
    Przechodząc do sedna. Potrzebuję wygenerować 3 sygnały taktujące.
    Jeden z sygnałów generuje w ten sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wydaje mi się, że powyższy kod powinien dać na wyjściu PB1 sygnał prostokątny o wypełnieniu 50% i częstotliwości 500KHz?

    Potrzebuję zatem drugi sygnał, który ma mieć takie same parametry jak powyżej, ale musi być w przeciwfazie do tego pierwszego. Co gorsza nie mogą występować żadne opóźnienia, dlatego wykorzystanie inwertera odpada. Da się wykorzystać timer 0 do tego, tylko zrobić, żeby sygnały te były w przeciwfazie?
    Mógłbym w pętli sprawdzać flagę compare output i w razie jej ustawienia generować sygnał na dowolnym pinie, ale muszę oprócz tych sygnałów dorobić jeszcze trochę innych rzeczy, więc wprowadzałoby to kolejne opóźnienia.

    Trzeci sygnał taktujący to także prostokąt około 500KHz, ale wypełnienie 25%, ale czytam właśnie o trybie PWM w AVR-ach i myślę że z tym nie będzie problemu.
    Istotne jest również to, że używam zewnętrznego kwarcu 10MHz. Niestety nie mam dostępu do oscyloskopu żeby testować wiele rozwiązań, a nie chcę brnąć w jakieś rozwiązanie, które nic nie da.
    Do oscyloskopu będę miał dostęp w poniedziałek lub wtorek i do tego czasu chciałbym mieć teoretycznie działający program, a w przyszłym tygodniu sprawdzę w praktyce.

    Nie oczekuję rozwiązania na tacy, tylko wskazówki.
  • REKLAMA
  • Pomocny post
    #2 13496520
    BlueDraco
    Specjalista - Mikrokontrolery
    Założenie o zerowych opóźnieniach jest nierealne. Mikrokontroler ma na ogół porty wolniejsze od szybkich inwerterów i niekoniecznie symetryczne czasy narastania/opadania.

    Jeśli inwerter odpada, to odpada też każdy typowy mikrokontroler z symetrycznym wyjściem PWM. Sprecyzuj, o co chodzi z tymi opóźnieniami, tzn. jakie czasy przesunięć zboczy są dopuszczalne.
  • REKLAMA
  • #3 13496680
    _Antos_
    Poziom 10  
    Dzięki, widzisz, nie przewidziałem tego, co ty piszesz. Jakoś tak z góry założyłem, że mikrokontroler który może być taktowany 16MHz musi być dokładniejszy niż inwertery.

    Czas narastania/opadania sygnałów taktujących - 20 - 60 ns (sygnały w przeciwfazie)
    Czas narastania/opadania sygnałów takujących - 10 - 30 ns (sygnał który zamierzam zrealizować poprzez PWM)
    Niestety producent układu nie określa jakie ma być odstępstwo między tymi dwoma sygnałami taktującymi. Jak chcesz, to zajrzyj sobie na własną rękę do noty układu - ILX535K
    Wydaje mi się że jakas super dokładność nie musi, być bo zdaję sobie sprawę z tego że zerowe czasy opadania/narastania sygnału nie są realne.
  • REKLAMA
  • Pomocny post
    #4 13496812
    BlueDraco
    Specjalista - Mikrokontrolery
    To byle jaki inwerter będzie lepszy - kilka ns opóźnienia.
  • #5 13496867
    _Antos_
    Poziom 10  
    Dzięki wielkie. W sumie masz rację.

    Kwestię rozwiązałem tak, że używam jednego timera 16 bit i jedno wejście, na którym stan zmieniam ręcznie.
REKLAMA