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

[ATMEGA32][BASCOM] - Praca Timer1 w trybie CTC liczenie wygenerowanych impulsów

Kuniarz 09 Lip 2013 19:09 2601 12
  • #1 12503988
    Kuniarz
    Moderator Projektowanie
    Witajcie !

    Mam taką zamotaną sytuację. Na początek kod, albo raczej jego istotne fragmenty:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Program bardzo ładnie generuje impulsy o zmiennej częstotliwości, zakres jaki jest mi potrzebny to od kilkunastu Hz do 50kHz - tutaj rewelacja. Potrzebuję jeszcze zliczać te impulsy. Po prostu jest to sterowanie silnikiem, generuję sygnał CLK, ale muszę wiedzieć ile kroków zostało wykonane.
    Program nigdy nie skacze do procedury "Timer1_isr". Czy jest jakiś sposób, aby w przerwaniach w trybie CTC robić jakąkolwiek inkrementację zmiennej. Czy jest może jakiś rejestr, który zlicza wykonane przerwania od Timer 1?
    Może podłączyć wyjście OC1A do wejścia INT i dorobić drugie przerwanie wyzwalane sygnałem zewnętrznym (ale czy biedny Bascom zdąży to obsłużyć przy 50kHz przebiegu ?).

    Pomocy ! ;-)
    Pomogłem? Kup mi kawę.
  • #2 12504053
    Konto nie istnieje
    Poziom 1  
  • #3 12504069
    Kuniarz
    Moderator Projektowanie
    Maksymalna częstotliwość jaka mnie interesuje jest uzyskiwana przy OCR1A = 19. Generalnie wszystko mi działa i to całkiem przyzwoicie, ale muszę zliczać wygenerowane impulsy. Myślałem już nawet o jakimś zewnętrznym liczniku - w postaci układu TTL którego wyjścia będę sobie odczytywał w pętli głównej. To już oczywiście abstrakcja.
    Pomogłem? Kup mi kawę.
  • Pomocny post
    #4 12504196
    Marek_Gorecki
    Poziom 16  
    Nie mam noty przed sobą, ale o ile mnie pamięc nie myli to timery 0 i 2 mają możliwość zrobienia przerwania typu Compare w trybie CTC.
    Sprawdź to.
  • #5 12504205
    Konto nie istnieje
    Poziom 1  
  • #6 12504234
    Kuniarz
    Moderator Projektowanie
    Niestety program nie skacze do obsługi tego przerwania. Miałem tam "lcd d..pa" i d...pa ;-)
    Poczytam zaraz o tym compare.
    Pomogłem? Kup mi kawę.
  • Pomocny post
    #7 12504578
    Fredy
    Poziom 27  
    A niby czemu ma program skakać do procedury obsługi przerwania od przepełnienia?
    Przecież on się nie przepełnia, tylko po doliczeniu do wartości OCR lub ICR , natychmiast się zeruję ( przy okazji może ,ale nie musi zmieniać stan pinu OC).

    Musisz uruchomić przerwanie od tego właśnie porównania - czyli od Compare, tak jak wspomniał kolega wyżej. Tylko który timer to dopuszcza to sprawdź w DS.
  • Pomocny post
    #8 12504714
    Konto nie istnieje
    Poziom 1  
  • #9 12504775
    Kuniarz
    Moderator Projektowanie
    Nie nie, miałem też w tym przerwaniu inkrementowanie jakieśtam zmiennej, którą później w pętli głównej wyświetlałem no i się nie inkrementowała. Skok do przerwania nie działa i tej wersji będę się trzymał wysoki sądzie ;-)
    Pomogłem? Kup mi kawę.
  • Pomocny post
    #10 12504848
    zumek
    Poziom 39  
    Kuniarz napisał:
    ... i tej wersji będę się trzymał wysoki sądzie ;-)

    I bardzo dobrze :-P
    Zadeklarowałeś przerwanie od porównania, a włączyłeś od przepełnienia więc Ci nie działa.
    Włącz właściwe przerwanie i będzie git.
  • #11 12505457
    Kuniarz
    Moderator Projektowanie
    zumek napisał:
    Kuniarz napisał:
    ... i tej wersji będę się trzymał wysoki sądzie ;-)

    I bardzo dobrze :-P
    Zadeklarowałeś przerwanie od porównania, a włączyłeś od przepełnienia więc Ci nie działa.
    Włącz właściwe przerwanie i będzie git.


    Rozumiem, że zmieniam etykietę przy "ON cośtam skocz_do_obsługi", więc ostatecznie na pałę sprawdziłem wszystkie etykiety z helpa : OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, ADCC, ERDY, ACI - w obsłudze przerwania dałem inkrementowanie zmiennej. Niestety nie skacze mi do tej nieszczęsnej procedurki.

    EDIT:

    Fałszywy alarm, oto poprawne wywołanie i WŁĄCZENIE ;-) przerwań:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dziękuję za pomoc, działa.
    Pomogłem? Kup mi kawę.
  • Pomocny post
    #12 12505972
    Konto nie istnieje
    Poziom 1  
  • #13 12833589
    Kuniarz
    Moderator Projektowanie
    Dziękuję za pomoc, temat jako rozwiązany zamykam.
    Pomogłem? Kup mi kawę.
REKLAMA