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

ATmega88 - UART zakłóca działanie programowego PWM dla serwomechanizmu

skeleton 14 Mar 2012 16:43 1771 5
REKLAMA
  • #1 10676684
    skeleton
    Poziom 10  
    Dzień dobry! ;) Mam problem z obsłużeniem UARTu wraz z programowym PWM.
    PWM steruje serwomechanizmem (w przyszłości nawet sześcioma - buduję robota kroczącego). Jego kod zapożyczony jest z forum, a konkretnie z tematu: https://www.elektroda.pl/rtvforum/topic1156395.html
    W momencie, gdy wprowadzam obsługę UART, PWM przestaje działać. Docelowo przez UART chcę sterować wychyleniem się orczyka serwomechanizmu.

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


    Bardzo proszę o pomoc w rozwiązaniu tego problemu. Jeśli potrzeba więcej informacji to oczywiście ich udzielę.

    edit:
    Dodam jeszcze, że z ATmegą komunikuję się przez przejściówkę opartą na ATmedze88 zrobioną dokładnie jak tutaj: http://www.recursion.jp/avrcdc/cdc-232.html#schematic .
  • REKLAMA
  • #2 10678005
    Bruce^666
    Poziom 15  
    Witam !!

    Kolega define i include w funkcji ?? używa :>, zaznaczył kolega kod jako C, To tak można ??

    skeleton napisał:

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

  • REKLAMA
  • #3 10678088
    skeleton
    Poziom 10  
    Takie coś znalazłem w książce "Język C dla mikrokontrolerów AVR" Tomasza Francuza. AVR Studio nie wypisuje żadnych errorów, ani warningów więc chyba to nie jest błąd.
  • REKLAMA
  • #4 10678917
    Bruce^666
    Poziom 15  
    No niby to nie błąd rzeczywiście, ale stanowczo odradzam tego typu zabiegi, tak tworzy sie kiepski i nie czytelny kod, do pełni szczęścia brakuje jeszcze tylko "GOTO".
  • REKLAMA
  • #5 10679650
    skeleton
    Poziom 10  
    Poprawiłem kod żeby był czytelniejszy i nieco go skomentowałem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Niestety mimo, że spędziłem wczoraj większość dnia na próbie rozwiązania mojego problemu nie udało mi się nic poprawić.
  • #6 10679893
    tmf
    VIP Zasłużony dla elektroda
    Bruce^666 napisał:
    No niby to nie błąd rzeczywiście, ale stanowczo odradzam tego typu zabiegi, tak tworzy sie kiepski i nie czytelny kod, do pełni szczęścia brakuje jeszcze tylko "GOTO".


    Ja z kolei stanowczo zachęcam do zapoznania się z tym plikiem nagłówkowym i przemyślenia, kiedy takie zabiegi są konieczne.
    W pokazanym akurat przypadku taka potrzeba nie zachodzi, bo autor nie zmienia prędkości transmisji USART. Gdyby jednak ją zmieniał (posiadał kilka funkcji inicjalizacji USART z różnymi prędkościami, lub też inicjalizacji więcej niż jednego USART z różnymi prędkościami), to byłbym wdzięczny za wskazanie możliwości uniknięcia includowania nagłówka setbaud.h w kodzie.

    skeleton: trochę zamieszałeś z tymi timerami. Najpierw jednak rozwiń co znaczy przestaje działać PWM?
    Druga sprawa - czemu nie wykorzystasz timery do sprzętowego generowania impulsów dla serwa? Czyli ustawiasz timer tak, żeby miał okres mniej więcej 20ms, po czym impulsy 1,25-1,75ms generujesz sprzętowo przez rejestr porównania.
REKLAMA