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

Bascom - Jak stworzyć generator impulsów z regulowanym wypełnieniem i częstotliwością?

IMEX 09 Sty 2013 02:22 4815 21
  • #1 11763337
    IMEX
    Poziom 20  
    Witam serdecznie kolegów.

    Jeśli nie znasz Bascoma nie wypowiadaj się - Bardzo prosze.

    Potrzebuje wykonać Generator impulsów z wypełnieniem.
    Regulowana częstotliwość jak i wypełnienie.
    W Bascomie niestety nie jest to takie proste. Sprzętowy jest PWM ale stała częstotliwość.
    Prześledziłem chyba wszystkie wątki w tym zakresie i raczej wypowiadają się tylko teoretycy piszący w C - a sprawa dotyczy Bascoma

    Sprawdzając różne sposoby wpadłem na pomysł żeby wykonać na licznikach a zegar dać 10MHz i prescaler = 1
    Częstotliwość będzie nie wysoka jeśli wykonam wypełnienie od 0-100%

    Załóżmy że są dwa liczniki zliczające H i L - różnica między nimi zawsze ma sie zamykać w 100% (wypełnienie) jeśli dam zliczanie jednego licznika do 20 a drugiego do 80 - wiadomo mam odrazy wypełnienie gotowe a częstotliwość 1 KHz

    Jeśli liczniki będą liczyły np 40 / 160 to mam wtedy wypełnienie 20/80 a częstotliwość 500Hz

    Czy takie rozwiązanie jest rozsądne - pomijam przeliczenia danych dla liczników.

    Pozdrawiam
    Grzesiek
  • #2 11763362
    Konto nie istnieje
    Poziom 1  
  • #3 11763765
    piotrva
    VIP Zasłużony dla elektroda
    Powiedz w jakich zakresach ma być regulowana częstotliwość tego impulsu.
    A w BASCOM teoretycznie można zrobić to samo co w C - kto powiedział, że nie można w B. operować na rejestrach i uruchomić "ręcznie" timera w dowolnym trybie?
    Dla Autora tematu - zapoznaj się z notą katalogową procesora, z rozdziałem dotyczącym timera i jego trybu pracy jako PWM - bo da się taki efekt jak chcesz osiągnąć za pomocą np. timera1.
    ---
    PS. BlueDarco - to że sam nie lubisz/nie przepadasz za AVR nie oznacza, że wielu rzeczy zrobić się na nich nie da i że procesory ARM są jedynym słusznym wyborem...
  • #5 11763959
    piotrva
    VIP Zasłużony dla elektroda
    No moim zdaniem:
    1. Język programowania to inna sprawa - sam znam ludzi, którzy w Bascom potrafią zrobić lepsze, bardziej rozbudowane i skomplikowane projekty niż nie jeden zadufany znawca C, choć osobiście wolę C z powodu większej łatwości pracy
    2. Nie będę wdawał się po raz kolejny w dyskusję nt. które procesory są lepsze i wogóle (wiem, że masz nieuzasadnione uprzedzenia do AVR i uwielbienie dla ARM), ale moim zdaniem AVR są dobre do nauki (osobiste doświadczenia z "uczniami") i nadają się do na prawdę wielu zastosowań (amatorskich i profesjonalnych).
    Proponuję zakończmy temat wyższości takich a nie innych układów i pisanie postów nie wnoszących nic do tematu:
    IMEX napisał:
    Jeśli nie znasz Bascoma nie wypowiadaj się - Bardzo prosze.

    BlueDraco napisał:
    Jak widać do tego zadania średnio pasuje zarówno Bascom, jak i wybrany mikrokontroler. Może warto wyciągnąć z tego jakieś wnioski? Oczywiście można próbować wbijać w deskę śruby do metalu młotkiem, ale zazwyczaj lepiej wychodzi wkręcanie wkrętów do drewna śrubokrętem.

    Bo ten problem da się rozwiązać zarówno na AVR jak i w BASCOM, a Twoje posty i moje odpowiedzi nie wnoszą do tej sprawy nic konstruktywnego. A @U.P.@up zamieszczono już działający i kompletny kod rozwiązujący ten problem programowo, a ja dałem wraz z kol. emarcus wskazówki jak rozwiązać tę sprawę sprzętowo.
    Dodam więc ukonkretnienie na najpopularniejszym (choć nie najlepszym z rodziny AVR) procesorze:
    http://www.atmel.com/images/doc2486.pdf - strona 98, zainteresuj się trybem 11 timera1
  • #6 11764896
    BlueDraco
    Specjalista - Mikrokontrolery
    Nawet parę razy użyłem tego trybu na tym mikrokontrolerze, ale sensowny skok regulacji współczynnika masz przy częstotliwości do kilku - kilkunastu kHz. Ja miałem 150..300 Hz, więc chodziło ślicznie.
  • #7 13760942
    tknefel - GORKY
    Poziom 14  
    Witam
    Chciałbym dołączyć się do rozmowy odnośnie generowania impulsów.
    Zabawę z Bascom rozpocząłem niedawno. Chce na Atmega16 napisać program do generowania impulsów z regulowanymi szerokościami impulsów (zarówno 0 jak i 1) na OC1B a sygnał zanegowany na OC1A. Obie szerokości impulsów regulowane z zakresie 0,05ms -10ms a wartość nastawy regulowana jest potencjometrami i wyświetlana na LCD np 20x4. Początkowo generator wykonany był programowo tzn na komendach wait us. Niestety pętla miała przestoje a impulsy trwały o wiele dłużej.
    Myślę że program należy wykonać na rejestrach ale o tym na razie nie mam zielonego pojęcia. Szukałem trochę informacji o PWM i wypełnieniu ale mi bardziej chodzi o regulację szerokości trwania impulsów.

    Jak się mam do tego zabrać?
    Proszę o pomoc i wyrozumiałość dla początkującego.
  • #8 13761151
    Konto nie istnieje
    Poziom 1  
  • #9 13762403
    zulusj23
    Poziom 25  
    Witam,

    stawiam pierwsze kroki w Bascom-ie, dlatego nie wiem, czy to co piszę ma sens i się sprawdzi. A gdyby timer (odpowiedzialny za regulację częstotliwości) po przepełnieniu wyzwalał swoim przerwaniem podprogram z poleceniem PULSEOUT ? Można w nim zadeklarować czas trwania impulsu a przez to regulować jego wypełnienie. Ma to sens ?

    Pozdrawiam,
  • #10 13763318
    Konto nie istnieje
    Poziom 1  
  • #11 13763828
    zulusj23
    Poziom 25  
    Widzę, że niestety ale w prosty sposób z linii komend za pomocą gotowego polecenia Bascom-a się nie uda się ustawić timera w tryb generatora i załatwić sprawy sprzętowo. Czas pogłębić wiedzę na temat dostępnych rejestrów i sposobu ich użycia.
    Dzięki.

    Pozdrawiam,
  • #12 13763880
    Konto nie istnieje
    Poziom 1  
  • #13 13779602
    tknefel - GORKY
    Poziom 14  
    Nawiązując do wcześniejszej wypowiedzi chce zbudować generator regulowany za pomocą 2 potencjometrów. Jednym chcę regulować czas trwania logicznej 1 a drugim potencjometrem czas trwania logicznego 0. Czasy obu sygnałów regulowane w przedziale 0,05ms - 5ms.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Program generuje przebieg z regulowanym czasem trwania logicznego 0 i regulowanym czasem trwania logicznej 1. Niestety wygenerowany sygnał ma maksymalnie 120Hz. Zmiany wartości prescalera czy powiększania Timera1 tylko spowalniają sygnał. W czym może leżeć problem lub jak inaczej podejść do generowania przebiegu?
  • #14 13779691
    Konto nie istnieje
    Poziom 1  
  • #15 13779723
    tknefel - GORKY
    Poziom 14  
    Dlaczego akurat toggle ponieważ są to początki nauki i tak naprawdę nie wiem która komenda jest lepsza od innej.
    Wprowadziłem zmiany kosmetyczne o których pisał kolega zamieniając toggle.
    Niestety w działaniu programu nie zmieniło to wiele.
    Dlaczego osiągam takie małe częstotliwości?
    Jak taki sygnał wygenerować w inny sposób?
  • #16 13779734
    Konto nie istnieje
    Poziom 1  
  • #17 13779794
    tknefel - GORKY
    Poziom 14  
    Nierozpoznanie takiego polecenia jak TCNT1.
    Zmieniłem natomiast
    Timer1 = Timer1 + 1
    na
    Timer1 = 65450 i już bardzo pomogło bo udało się osiągnąć 11kHz.
    Zmieniałem też wartość Timer1 miedzy 65450 a 65535 ale nic to nie pomagało.
    Czy od tej wartości Timer1 liczy do przepełnienia czyli 65536 określona liczbę cykli i dopiero robi kolejny krok w programie?
    Da się wycisnąć tą metodą jeszcze większą częstotliwość?
  • #18 13779859
    Konto nie istnieje
    Poziom 1  
  • #19 13780036
    Konto nie istnieje
    Poziom 1  
  • #20 13780107
    zulusj23
    Poziom 25  
    Witam,

    Kol. yokoon (pozdrawiam) podesłał mi działający kod bazujący na Timer0. Paramerty całkiem niezłe:

    https://obrazki.elektroda.pl/5667799400_1404642302.jpg

    - 15 ustawionych w kodzie programu częstotliwości z zakresu 75 Hz - 1000 Hz
    - wypełnienie regulowane co 1% w zakresie 10% - 90%
    - prezentacja nastaw na LCD
    - obsługa 3 przyciski, wybór, góra, dół, rozpoznawanie długości naciśnięcia

    Jako, że nie jestem autorem nie będę go tu prezentował a zainteresowanych odsyłam do Kol. yokoon - a.
    Wczoraj trochę bawiłem się kodem, przerobiłem go pod impulsator z przyciskiem i całkiem wygodnie się go obsługuje. Przycisk wybór regulowanej wartości, lewo zwiększanie, prawo zmniejszanie.

    Pozdrawiam,
  • #21 13808686
    tknefel - GORKY
    Poziom 14  
    Bardzo dziękuje za pomoc koledze atom1477.
    Fragment programu na którym tak mi zależało udało się stworzyć i działa poprawnie.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Natomiast po zainstalowaniu nowszej wersji Bascom 2.0.7.5 dzieją się dziwne rzeczy z wejściami ADC. Nastawiona wartość zmienia się o 10-20% wartości maksymalnej. Podejrzewam że problem może tkwić w niepoprawnie ustawionych fusebity Bascom - Jak stworzyć generator impulsów z regulowanym wypełnieniem i częstotliwością?

    Tak na marginesie to jestem ciekawy jak można skonfigurować Timer1 w trybie CTC. Jeśli ktoś ma to proszę o przykład.
  • #22 13808966
    Konto nie istnieje
    Poziom 1  
REKLAMA