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

ATMega 8 Sterownik serwonapędów.

davidpi 29 Sty 2012 17:02 1599 3
REKLAMA
  • #1 10465335
    davidpi
    Poziom 10  
    Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc

    Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8).
    Taktowanie 8MHz.

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

    Serwo podłączone do dowolnego pinu PORTB. TIMER2 odmierza 20ms i generuje przerwanie. W przerwaniu zerowany jest TIMER1, ustawiany jest PORTB i włączane jest zezwolenie na przerwanie od TIMER1. Mija czas zależny od wartości OCR1A ( ustawiłem na razie na 1,5ms). Po tym czasie TIMER1 generuje przerwanie. W tym przerwaniu PORTB jest zerowany i wyłączane jest zezwolenie na przerwanie od TIMER1.
    Program się kompiluje. Przerwania się uruchamiają. Jednak serwo ucieka w skrajne położenie i próbuje iść dalej, tak jakby OCR1A była z poza zakresu pracy serwa.
    Czy ktoś ma jakiś pomysł co może być źle w tym programie?
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 10467176
    janbernat
    Poziom 38  
    Skopiowałem, wyrzuciłem obsługę LCD, skompilowałem, wgrałem i podłączyłem oscyloskop.
    Impulsy chyba są co 20ms.
    Ale impuls trwa 4us a nie 1.5ms.
    Coś jest nie tak w ustawieniach peryferii.
  • REKLAMA
  • #3 10468903
    davidpi
    Poziom 10  
    Dzięki za sprawdzenie tego na oscyloskopie. To mi dużo pomoże. Tak myślałem, że impulsy są wyjątkowo krótkie. Bo okres powinien być OK.

    Dodano po 26 [minuty]:

    Rozwiązałem problem poprzez wyłączanie TIMER1 gdy nie jest potrzebny.
    Oto poprawiony kod, może się komuś przyda.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA