Arduino Polska Forum

Pełna wersja: ATTINY24, a PWM z wyjściem przeciwsobnym
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
Witajcie.
Sytuacja wygląda w ten sposób; potrzebuję zaprogramować uC attiny24 do generowania przebiegu PWM o zmiennym wypełnieniu na wyjściu OC1A oraz tego samego przebiegu, ale o odwróconym stanie i w zgodnej fazie na wyjściu OC1B. W zasadzie najprościej byłoby generować tylko jeden sygnał PWM, a następnie przy pomocy tranzystora PNP dorobić drugie, przeciwsobne wyjście, ale;
- skomplikuje to konstrukcję
- potrzebuję mieć również możliwość programowego ustawienia stanu niskiego na obu tych wyjściach (to też da się zrobić na tranzystorach, ale jeszcze bardziej skomplikuje układ, a miejsca jest niewiele)

Podsumowując; nie wiem w jaki sposób ustawić rejestry timera żeby na dwóch wyjściach generował komplementarny PWM w taki sposób aby nie występowała sytuacja, w której na obu wyjściach jednocześnie będzie stan wysoki. Natomiast, w moim przypadku, kwestię deadtime-u oraz częstotliwości generowanego przebiegu można pominąć.

Pamiętam, że kiedyś chyba zrobiłem coś podobnego na arduino z użyciem biblioteki TimerOne, ale w tym przypadku arduino jest jedynie programatorem dla wspomnianego uC, natomiast biblioteka TimerOne go nie obsługuje.

Będę wdzięczny za pomoc Smile
A nie da się w ten deseń:
digitalWrite(OC1B,!digitalRead(OC1A));
Pomysł z kategorii zwariowanych Smile
Ty tak na poważnie?
No nie próbowałem, zwykle jak odpowiadam to albo wiem albo to przetestowałem. Ta odpowiedź była na zasadzie spróbuj. Jak nie działa to do kosza i już.
Jak wiesz, że takie coś jest niemożliwe to napisz słówko.
Ja raczkuję w programowaniu i na pewno nigdy nie będę sprinterem Smile
Zobacz ten temat: PWM przesuniete w fazie
Chyba nie do końca o to chodzi, a przynajmniej tak wynika z filmów zamieszczanych tam przez autorów.
Owszem, mają dwa wyjścia PWM i zależność, że jeśli na wyjściu A jest wypełnienie 25% to na wyjściu B jest 75%, ale brakuje tej synchronizacji, że stan wysoki na wyjściu B jest _tylko_ wtedy, gdy na wyjściu A jest stan niski.
Naprawdę, nikt nic?
Nie można timer ustawić na przepełnienie, i przerwaniu machać pinami?? Timer w locie prze konfigurować i mamy zmienną PWM i częstotliwość. A jedno wyjście jest synchronizowane z drugim i mozemy mieć przeciwne stany..

Tylko pewnie zbyt dużej częstotliwości nie można mówić..
Generalnie nie zależy mi na częstotliwości. Myślę, że te kilkaset Hz wystarczy. Jak ustawić ten timer?
to zalezy jaką chcesz częstotliwość

Ale to będzie wyglądało mniej więcej tak,

Ustaw timer1 do przerwania ISR(TIMER1_COMPA_vect)

w przerwaniu ISR(TIMER1_COMPA_vect) prze konfiguruj timer na przerwanie ISR(TIMER1_COMPB_vect)

a w przerwaniu ISR(TIMER1_COMPB_vect) prze konfiguruj go na przerwanie ISR(TIMER1_COMPA_vect)

i w każdym przerwaniu machaj pinami dwóch wyjść ....

w jednym i drugim przerwaniu będzie trzeba ustawić OCR1A i OCR1B a wypełnienie to własnie stosunek ich czasów... Wiec jak chcesz częstotliwość stała 1kHz to suma OCR1A i OCR1B musi być zawsze równa 1ms...
Stron: 1 2 3