Liczba postów: 250
Liczba wątków: 0
Dołączył: Dec 2016
Reputacja:
48
Witam,
Funkcja pinMode(), według dokumentacji ustawia dany pin jako wejście, podciągnięte wejście albo wyjście. Do wpisywania wartości z zakresu 0-255 służy raczej funkcja analogWrite().
Pozdrawiam,
Tomek.
Liczba postów: 654
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
G woli ścisłości dla potomnych, wytłumaczmy sobie działanie programu z poprzedniej strony i dla czego nie robił tego co by autor chciał żeby robił.
Zaznaczyć trzeba, że program robi zawsze to, do czego został napisany.
W naszym przypadku te dziwne zaklęcia w stylu: TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); włączają dwa kanały timera. Kanał A na 38.4kHz (no nie do końca się zgodzę z autorem), kanał B na połowę kanału A.
Po różnych czarodziejskich wyrażeniach na nogę PIN3 wystawiony zostaje sygnał o częstotliwości kanału A z wypełnieniem 50% (ponieważ B/A=0.5).
Dopiero w funkcji loop(); mamy pinMode(3, pot2);
To znaczy, że jak pot2>0, to PIN3 ustawiony zostaje jako wyjście i otrzymujemy na nim sygnał z zegara.
Silnik nie pracuje na pełnych obrotach jak to napisał bako1987, tylko na 50%.
Potencjometr po prostu włącza i wyłącza sygnał PWM na nodze 3.
Chcąc rozwiązać nasz problem, musimy zacząć sterować wypełnieniem, czyli nomen omen wartością kanału B dla OCR2.
I myślę, że w tym przypadku powinno to wyglądać tak:
void loop(){
int pot = (analogRead(A0));
val = map(val, 0, 1023, 0, 51);
OCR2B=val;
}
Rozwiązanie bako1987 z wykorzystaniem biblioteki PWM, jest dokładnie tym samym co ja tu napisałem, tylko że biblioteka jest opasła ze względu na zawartość wielu niepotrzebnych nam funkcji( niepotrzebnych w tym przypadku)
Dla usprawnienia można jedynie użyć makra digitalPinToTimer.
Pozdrawiam.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.
Liczba postów: 654
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
Aha i jeszcze jedno.
MOSFET piszczy, ponieważ sygnał kluczujący jest w zakresie częstotliwości słyszalnej.
Dla 39kHz już tego nie słychać.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.