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 328P-AU - FAST PWM na pinie PD6 nie działa poprawnie - analiza kodu

Boryna95 25 Gru 2016 15:37 2046 15
REKLAMA
  • #1 16148669
    Boryna95
    Poziom 9  
    Zaczynam przygodę z programowaniem AVRów, chciałbym zakręcić silniczkiem DC przy użyciu sygnału PWM na pinie PD6 (ATMEGA 328P-AU). Na razie w ramach testu chciałem wypróbować timer FAST PWM. Napisałem parę linijek kodu, które wydaje mi się, powinny działać, jednak coś nie gra. Czy ktoś byłby w stanie mnie naprowadzić na błąd, który popełniam? Poniżej kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 16148946
    Eagle
    Poziom 24  
    Cytat:
    Napisałem parę linijek kodu, które wydaje mi się, powinny działać,


    Programowanie jest jak opis czegoś. Niektóre opisy są nie zrozumiałe.
    Wystarczy, że opiszesz co robi pętla while, tylko nie opisuj linia po linii, tylko bardziej abstrakcyjnie, w jednym zdaniu co się dzieje w tej pętli.
  • #3 16148973
    Boryna95
    Poziom 9  
    Inkrementuję wartość rejestru OCR0A do określonej wartości, po czym chcę tę wartość wyzerować
  • REKLAMA
  • #4 16148975
    Konto nie istnieje
    Poziom 1  
  • #5 16149008
    Boryna95
    Poziom 9  
    Silnik się nie obraca - to mi nie działa :D
  • #6 16149020
    ejcon
    Poziom 14  
    Witam,
    Dopisz bibliotekę #include <avr/interrupt.h>
  • #7 16149032
    Boryna95
    Poziom 9  
    W zasadzie na razie i tak nie wykorzystuję przerwać, to sei() jest tam zbędne.
  • #8 16149033
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 16149052
    Boryna95
    Poziom 9  
    Jeżeli chodzi o schemat to jest to wytrawiona płytka, na schemacie mam wyprowadzenie z pinu PD6.

    Zmieniłem na coś takiego, jednak nadal bez zmian:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #10 16149054
    PiotrPitucha
    Poziom 34  
    Witam
    Nie wiem co to za silnik, ale trudno będzie zaobserwować cokolwiek jak traktujesz silnik dość szybkozmiennym przebiegiem piłokształtnym ( wartość test zmienia się 10 razy na sekundę ) jak na typowe bezwładności silników.
    Nie wnikam czy delay jest cool w programach, ale jak zwiększysz delay do 1000 to może coś zauważysz.
    Druga sprawa to Fast PWM, szacowałeś jaka będzie częstotliwość? może się okazać że jak będzie to bardzo dużo to sygnał zdechnie na indukcyjnościach....
    Podłącz jakiś element niskoindukcyjny o małej bezwładności ( żarówka ? ) to zauważysz efekt nawet dla delay 100.
    Pozdrawiam
  • #11 16149064
    Eagle
    Poziom 24  
    Cytat:
    Wystarczy, że opiszesz co robi pętla while


    Cytat:
    Inkrementuję wartość rejestru OCR0A(...)


    Nawet po zmianie, zwiększasz zmienną test a nie wartość rejestru OCR0A, Zmienną test, której wartość nigdzie nie używasz.
  • #12 16149075
    Boryna95
    Poziom 9  
    No tak, zauważyłem właśnie, że nic z tym rejestrem nie robię... Jednak obecnie również bez zmian:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #13 16149078
    ejcon
    Poziom 14  
    Zerknij na to
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #14 16149362
    Boryna95
    Poziom 9  
    Mam 4 piny z PWMem wykorzystane w układzie, teraz próbuję na PB1, nieco przerobiłem kod, natomiast ten silnik również się nie obraca. Czy nadal coś robię źle?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #16 16150043
    Eagle
    Poziom 24  
    Cytat:
    for(;;); //Pętla nieskończona


    Jaki świąteczny akcent. Może jednak warto, używać znaczników code.
REKLAMA