Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 gru 2025, o 23:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 7 maja 2017, o 09:22 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Witam.
Dopiero zaczynam poznawać timery i tryby PWM i mam takie pytanko:

czy jest możliwe uzyskanie przebiegu jak na obrazku w trybie PWM.

Obrazek


Procesor to Atmega 328 kwarc 18 432 000.

W tej chwili poradziłem sobie wywołując przerwanie wewnętrzne co 50us i programowo zmieniając stan wyjścia ale wydaje mi się to mało eleganckie.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wartości w warunku "if" są o przykładowe.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 11:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

witam,
założenia są trochę rozbieżne. :?
dla 650us ---> 1538Hz
dla 1666Hz ---> 600us



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 16:50 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Te wytyczne nie są aż tak wiążące.
Chodziło mi raczej o zasady.
Jak zrozumiem zasadę i będę umiał to zapisać to czasy sobie dobiorę.

czy rozwiązaniem może być: tryb 10 - PWM, Phase Correct - ICR'em określam częstotliwość, a OCR'em wypełnienie?

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 17:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

tak, można ten tryb zastosować.
Na wyjściu OC1A(PB1) generować ustalony sygnał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 17:58 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

WITAM.
Udało mi się wymęczyć taki kod który działa wg założeń

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Mam jeszcze jedno pytanie czy można wywołać przerwanie wewnętrzne gdy ICR osiąga TOP lub ZERO i gdy OCR osiąga swą wartość.
Chcę zainicjować jakąś akcję przy każdej zmianie stanu na pinie(przy każdym zboczu narastającym i każdym opadającym)
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

należy dodatkowo włączyć zezwolenie na przerwanie, :)
TOIE1(od ICR'a) oraz OCIE1A(od OCR1A).
i uruchomić procedury w przerwaniach.
ISR(TIMER1_COMPA_vect) {....
oraz
ISR(TIMER1_OVF_vect) {....
pozdrawiam.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
elmuerto napisał(a):
Chcę zainicjować jakąś akcję przy każdej zmianie stanu na pinie...

Tak nie fachowo, ale obrazowo:
Jest to możliwe lecz jest jedno "ale" - takie coś miałoby rację bytu jeśli częstotliwość PWM'a będzie odpowiednio malutka; przy Twoim ustawieniu nie zadziała bo "się zatka".
Pomyśl co ile taktów zegara miało by nastąpić samo "zgłoszenie przerwania"; teraz te Twoje przerwania od przerwania też zajmą trochę tyknięć - a to wszystko powinno mieć dość zapasu taktów aby pracowało bez zakłóceń.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

To co "kicajek" napisał to ważna informacja.
Ja zakładam że to tylko do testów sprzętowego PWM'a.
Między przerwaniami (OCR1A=4000) coś tam można jeszcze zmieścić razem z obsługą tego przerwania. :)

------------------------ [ Dodano po: 23 minutach ]

np. lcd'ek działa. wyświetlam na nim TCNT1.
Widać że wartości się zmieniają w szybkim tempie.(jedna wielka mrygawka) :)

------------------------ [ Dodano po: 25 minutach ]

co prawda w przerwaniach zmieniam tylko stan pinu z dodatkową diodą.
w jednym przerwaniu zapalam a w drugim gaszę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 20:16 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Witam.
Program napisany i oscyloskop pokazuje że wszystko działa.
Cały program nie jest bardzo skomplikowany i działa tak:
Timer 0 generuje częstotliwość nośną 36Khz w trybie PWM
Timer 1 kluczuje tę częstotliwość tak aby zadziałał odbiornik podczerwieni TSOP
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

Wiem że te przerwania trochę obciążają procesor ale wiele się w nich nie dzieje więc na razie może tak zostać.
Mogę na wyjście PWM Timera 1 dać tranzystor i tak kluczować PWM TIMERA 0 wtedy pozbędę się przerwań wewnętrznych.

Bardzo dziękuję za zainteresowanie i pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO