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

Generator impulsów prostokątnych na ATmega

arek944 15 Maj 2011 15:58 6460 8
  • #1 9508402
    arek944
    Poziom 11  
    Witam szanownych forumowiczów.
    Chcę postawić na mikrokontrolerze ATmega (np 16) generator impulsów prostokątnych, który to zapewni mi:
    1) regulację szerokości impulsu,
    2) regulację częstotliwości w zakresie 30-80kHz.

    A) Pierwsze, takie dosyć luźne wyobrażenie przedstawione jest na rysunku
    Generator impulsów prostokątnych na ATmega
    Sygnał PWM służyłby jako sterowanie napięciowe do generowania częstotliwości (im większa szerokość impulsu tym wyższa częstotliwość na wyjściu), zaś przetwornik DAC służyłby jako sygnał odniesienia (im wyższe napięcie na wyjściu DAC, tym "dłuższy" czas trwania stanu wysokiego).
    B) Myślałem także, aby spróbować scalaka ICL8038, gdzie mógłbym regulować wypełnienie i częstotliwość niemalże wprost, ale zważywszy na cenę układu szukam tańszego rozwiązania.
    C) Zastanawiałem się też, czy dałoby radę wykorzystać starą dobrą 555?

    Zastanawiam się, czy ktoś z Was miał kiedyś podobny problem? Być może istnieje jakiś osobny scalak, który zrealizowałby funkcję 1 i 2?

    Będę wdzięczny za jakiekolwiek podpowiedzi w rozwiązaniu problemu
  • #2 9508422
    tadzik85
    Poziom 38  
    szerokość regulowana z zakresie 0-100%? częstotliwość z jaką dokładnością?
  • #3 9508461
    jan1996
    Poziom 24  
    przecież wystarczy jeden port najlepiej z razem z tranzystorami i program w oparciu timer16 bit 80kHz to nie aż tak dużo
  • Pomocny post
    #4 9508495
    tadzik85
    Poziom 38  
    Wystarczyło by wykorzystać licznik tryb CTC z dodatkowym przerwaniem od OCRB.

    OCRA odpowiada z f
    OCRB za wypełnienie.
  • #5 9510699
    arek944
    Poziom 11  
    Cytat:
    tadzik85
    szerokość regulowana z zakresie 0-100%? częstotliwość z jaką dokładnością?

    Chciałbym, aby to gadało z monitorem LCD po D-SUB, więc tam aż takich rygorystycznych wymagań nie ma co do HSync i VSync..
    Chociaż jak tak patrzę na oscylogramy zdjęte podczas testu TVBOXa, to tak na oko ta długość impulsu jest mniej więcej stała...
    Generator impulsów prostokątnych na ATmega

    Tryb CTC, o którym wspomniałeś brzmi bardzo ciekawie, ale chyba będzie lipa z częstotliwością...
  • #6 9513234
    arek944
    Poziom 11  
    Pomyślałem i wyszło mi takie coś (schemat jest zrobiony na szybkiego, więc jeszcze wiele brakuje do doskonałości)
    Generator impulsów prostokątnych na ATmega
    Sygnał PWM z OC2 będzie sterował częstotliwością, zaś PWM z OC1A - wypełnieniem. Na podstawie sygnału wyjściowego z ICL8038 (HSync) generowany jest z PA2 sygnał VSync.
    Co o tym myślicie, ujdzie takie "cuś" i dogada się z monitorem LCD? Bo szczerze powiem na chwilę obecną nie mam pomysłu na rozwiązanie tej zagwozdki...
  • Pomocny post
    #7 9513679
    Mat_91
    Poziom 25  
    Chcesz generować sygnał synchronizacji poziomej i pionowej a kombinujesz coś z generatorem funkcyjnym? Eeee no trochę przegięcie chyba.

    Zobacz chociażby tu: Link

    Może to Cię naprowadzi.
  • #8 9513884
    arek944
    Poziom 11  
    Wiem, że to mega przegięcie wręcz, ale sęk w tym, że to urządzonko musi obsłużyć wszystko najbardziej chodliwe rozdzielczości - od VGA do HD, czyli:
    Generator impulsów prostokątnych na ATmega
    A szczerze się przyznam, nie wiem, czy AVRka poradzi sobie z taką różnorodnością częstotliwości, dlatego kombinuję, jak tylko mogę... najlepsze jest to, że to nie musi być "po bożemu" i możliwie minimalistyczne (wręcz nie powinno być), to może być dowolnie udziwnione :)
  • #9 9730881
    arek944
    Poziom 11  
    Trochę nad tym posiedziałem (dużo czasu minęło od ostatniego postu, ale jakośtak nie było czasu) i mam nowe pytanie, otóż: chcę uzyskać taki przebieg (dla rozdzielczości 1024x768):
    Generator impulsów prostokątnych na ATmega
    a wyskakuje mi coś takiego:
    Generator impulsów prostokątnych na ATmega

    I chciałbym się dowiedziec, jak walczyć z tym dodatkowym impulsem?
    Urywki programu wyglądają następująco:


    Konfiguracja rejestru licznika:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wektor przerwań od Caompare/Match obsługuje zmianę ładowanych wartości OCR2 dla timera, tak aby uzyskać rządany czas trwania impulsu H i L

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja, która odpowiada za pobranie i przepisanie wartości dla generowania rządanej czestotliwości ze zmiennych wprowadzanych w trakcie programu do zmiennych globalnych

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I tutaj ta sama funkcja wywoływana gdzieś tam w main, kiedy jest potrzebna

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Oczywiście zdjęcia są przykładowe, bo przy prescalerze =1 dostaję prawie wszędzie dodatkowy impuls, natomiast przy prescalerze =8 już tylko przy kilku rozdzielczościach...
    Być może wybrałem niewłaściwy licznik do generowania tych przebiegów? Może powinienem zrobić tak, jak padła tu sugestia, na liczniku 1 z przerwaniem od OCRA i OCRB?
REKLAMA