Dowolna częstotliwość PWM na Atmega8 Bascom

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Dowolna częstotliwość PWM na Atmega8 Bascom

Post autor: M@ciej » 24 cze 2010, 6:55

Witam.

Jak wiadomo, Bascom pozwala na ustalenie częstotliwości np. od Timer1 dla PWM tylko ściśle określonych. Częstotliwości te są ustalane jedynie głównym zegarem i preskalerem. Jednakże Atmega8 umożliwia poprzez konfigurację rejestrów ustalenie innych częstoliwości, niż wynikające tylko z preskalera i zegara głównego.

Czy ktoś wie, jak skonfigurować rejestry z poziomu Bascoma, by uzyskać częstotliwość np. 5,5kHz?

Artizzz
-
Posty: 41
Rejestracja: 03 mar 2007, 11:59
Lokalizacja: xx

Post autor: Artizzz » 24 cze 2010, 8:09

Hmmm jeśli mi wiadomo, to częstotliwości dla sprzętowego PWM masz właśnie te "ściśle określone". I nie da rady tego obejść.
Ale jest możliwość uzyskania sprzętowego generatora o "dowolnej" częstotliwości, czyli ustawiasz Timera w tryb CTC, a modyfikując rejestry Timera zmieniasz okres. Jednak tu masz niezmienne wypełnienie dokładnie 50%.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 24 cze 2010, 8:49

Jest to możliwe. Miałem okazję zmierzyć PWM generowaną przez Attiny26, własnie z częstotliwością 5,5kHz i wiem, że nie był to FastPWM. Z tego, co udało mi sie wyczytać, sprawa polega na skróceniu cyklu zliczania zegara Timer1, jednak nie moge na razie dojść, jak to wykorzystać w praktyce. Bascom nie daje takich możliwości wprost, ale poprzez ingerencję w rejestry powinno się udać.

keruseykaryu

Post autor: keruseykaryu » 24 cze 2010, 16:56

Częstotliwość można ustawić "prawie" dowolną, ale kosztem rozdzielczości licznika! Są tryby PWM, w których TOP licznika ustalasz w rejestrze ICR1 albo OCR. Ale ten drugi nie będzie przydatny jak dwa PWM są potrzebne. Trybów z ICR1 jest trzy: 8, 10 i 14. Nota strona 98, jakby co.
Attiny26 jak piszesz ma to coś czego Atmega8 nie ma. Liczniki taktowane z PLL, nawet 64MHz, i bogaty preskaler, bo aż 15 stopni podziału. Jest w czym wybierać i nie tracić tyle na rozdzielczości.

Jak to wszystko ustawić w BASCOM? Prosto. Razem z notą katalogową ustawiasz rejestry TCCR1A TCCR1B ICR1, a nawet policzysz wszystko ze wzorów (strona 91, 93 i dwie dalsze) i heja banana.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 24 cze 2010, 19:24

Korzystam tylko z PWM1A, PWM1B jest odłączony. Co do trybów ICR mam już rozeznanie, bo jestem już po lekturze notki do Atmega8. Przyjrzę się jeszcze rejestrowi ICR1, bo TCCR1 i TCCR2 już mniej więcej wiem, jak ustawić. Jak ustawię rozdzielczość na 10 bitów, powinno wystarczyć, bo jak się domyślam, przy ustalonej innej częstotliwości pracuje się w zawężonym zakresie wartości PWM?

keruseykaryu

Post autor: keruseykaryu » 25 cze 2010, 5:43

Nie masz ustawiać na sztywno rozdzielczości, ona sama wychodzi jak wpiszesz TOP. Z pobieżnych obliczeń wynika, że przy 8MHz taktowania procesora i licznika, przy pracy PWM w trybie dwu zboczowym trzeba w ICR1 wpisać 726 (wartość TOP). Dostaniesz wtedy fpwm = 5502Hz, a rozdzielczość będzie ok. 9,4 bita. I teraz wypełnienie 0% = 0, 50% = 362, 100% = TOP.

ODPOWIEDZ