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.

Generator impulsów prostokątnych na ATmega

arek944 15 Maj 2011 15:58 5650 8
  • #1 15 Maj 2011 15:58
    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

    0 8
  • #2 15 Maj 2011 16:01
    tadzik85
    Poziom 38  

    szerokość regulowana z zakresie 0-100%? częstotliwość z jaką dokładnością?

    0
  • #3 15 Maj 2011 16:08
    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

    0
  • Pomocny post
    #4 15 Maj 2011 16:14
    tadzik85
    Poziom 38  

    Wystarczyło by wykorzystać licznik tryb CTC z dodatkowym przerwaniem od OCRB.

    OCRA odpowiada z f
    OCRB za wypełnienie.

    0
  • #5 15 Maj 2011 23:28
    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ą...

    0
  • #6 16 Maj 2011 19:46
    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...

    0
  • Pomocny post
    #7 16 Maj 2011 21:10
    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.

    0
  • #8 16 Maj 2011 21:48
    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 :)

    0
  • #9 18 Lip 2011 12:41
    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
    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
    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
    Zaloguj się, aby zobaczyć kod


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

    Kod: 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?

    0