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



Teraz jest 30 mar 2026, o 20:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 28 lis 2013, o 00:31 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.
Tak się zastanawiam jak policzyć rzeczywistą częstotliwość Prescalera, bo mi wychodzi inaczej niż z oscyloskopu.
tzn.
Mam częstotliwość zegara 8MHz.
Timer0 8 bit = 256
Czyli bez prescalera (Prescaler=1) częstotliwość na PWMie będę miał 31250 (8000000/256) a mi na oscyloskopie pokazuje około 15kHz.
Natomiast dając prescaler 8 powinno być 31250/8 a mam około 250Hz, dając prescaler 64 mam około 50Hz.
W datashecie Atmegi8 znalazłem taki wzór
f = fclk/(PRESCALERx(1+TOP))
tylko co to jest Top
Niby TOP to TCNT1 - ale ile to jest?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 03:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

iwi napisał(a):
częstotliwość na PWMie będę miał 31250 (8000000/256) a mi na oscyloskopie pokazuje około 15kHz


Częstotliwość "rzeczywista" ma być jakoby 2x mniejsza od częstotliwości "teoretycznej". Zastanawiające, akurat 2x ;)
Zastanów się dokładnie, co oznacza częstotliwość 312500kHz (co się dzieje z częstotliwością 312500kHz) a co mierzysz na oscyloskopie, że wychodzi ci 15kHz. Co dzieje się z częstotliwością 15kHz?

Nie chciałem ci wprost odpowiadać, taka forma zagadki myślę, że jest ciekawsza i bardziej pouczająca :) Jak wpadniesz na to, co robisz (albo myślisz?) źle, to się pacniesz w czoło, gwarantuję :)


Edit: NVM :)

_________________
sig off ;(



Ostatnio edytowano 28 lis 2013, o 03:36 przez krokodyl1220, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 03:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

A zobacz sobie do noty na ten timer, w register description i masz tryby dla timera rożne tak? I masz tam wartości TOP.


Wysyłane z mojego iPad przy użyciu Tapatalk HD

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 10:27 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

krokodyl1220 napisał(a):
Zastanawiające, akurat 2x ;)
....
(co się dzieje z częstotliwością 31250kHz) a co mierzysz na oscyloskopie, że wychodzi ci 15kHz. Co dzieje się z częstotliwością 15kHz?

Nie chciałem ci wprost odpowiadać, taka forma zagadki myślę, że jest ciekawsza i bardziej pouczająca :) Jak wpadniesz na to, co robisz (albo myślisz?) źle, to się pacniesz w czoło, gwarantuję :)



Myślałem i myslałem i nic nie wymyśliłem. Z rysunku datasheetu na stronie 108 (Figure 18-9 - Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8)) wyraźnie jest, że przy dzieleniu przez 8 jest 1/8 fclk_I/O a nie 1/16.
Natomiast dziwne jest TOVn - zmienia się 2x rzadziej. Ale nie ma TOVn we wzorze.

ale 2x jest częstotliwość mniejsza od teoretycznej tylko przy Prescalerze = 1
Przy Prescalerze = 8 jest to 20x mniej a przy prescalerze 64 jest 10x mniej.

Znalazłem jeszcze coś takiego <b>period</b> przy trybie CTC jest co 2 okresy Timerów, ale w trybie FastPWM period jest równy okresowi Timera. Ale mam ustawiony tryb Fast PWM a nie CTC - no chyba, że coś przeoczyłem.


Czyli tak wygląda tabelka dla 8Mhz
Zmieniam tylko bity CS10-CS11-CS12
Prescaler f_t f_R iloczyn różnicy ustawienie bitów
1 31250 15000 2x CS10 = 1
8 3906 200 20x CS11 = 1
64 488 50 10x CS12 = 1

Te wartości rzeczywiste są w przybliżeniu oczywiście ale

arturf209 napisał(a):
w register description i masz tryby dla timera rożne tak? I masz tam wartości TOP.

Tak jak myślałem TOP dla Timera 8bit = 255. Trochę myli zaspi 0xFF ale to jest to.

Czyli podstawiając do wzoru wyjdzie 31250 przy prescalerze 1 = 31250



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 10:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

iwi napisał(a):
Witajcie.
Tak się zastanawiam jak policzyć rzeczywistą częstotliwość Prescalera, bo mi wychodzi inaczej niż z oscyloskopu.
tzn.
Mam częstotliwość zegara 8MHz.
Timer0 8 bit = 256
Czyli bez prescalera (Prescaler=1) częstotliwość na PWMie będę miał 31250 (8000000/256) a mi na oscyloskopie pokazuje około 15kHz.
Natomiast dając prescaler 8 powinno być 31250/8 a mam około 250Hz, dając prescaler 64 mam około 50Hz.
W datashecie Atmegi8 znalazłem taki wzór
f = fclk/(PRESCALERx(1+TOP))
tylko co to jest Top
Niby TOP to TCNT1 - ale ile to jest?


Coś kolega przekombinował na maxa że aż strach ;) masz tu poniżej kod dla np ATmega32 (zresztą w Bluebooku też masz to opisane dokładnie)

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


odpal go i sprawdź sobie na oscylu częstotliwość na PB3 .... nie ma możliwości żebyś widział inną wartość niż ok

31,250 kHz

;) ... oczywiście może być ciut więcej , ciut mniej jeśli użyjesz wewn. oscylatora RC - ale to chyba zrozumiałe

a obliczanie częstotliwości PWM .... no pokazuję w książce SUPER PROSTE podejście a ty kombinujesz i sobie sam utrudniasz życie na własne życzenie. Skąd się wzięło to powyższe 31,250 kHz ?

Cytuj:
F_CPU / PRESCALER / timer_resolution


czyli panie kochanieńki

Cytuj:
8 000 000 / 1 / 256 = 31250 Hz


i nie inaczej - no proste jak drut

chcesz dać preskaler kolejny np = 8, proszę bardzo

Cytuj:
8 000 000 / 8 / 256 = 3906 Hz


czyli na oscylu zobaczysz na PB3 częstotliwość ok 3,9 kHz

---------------------------

jeśli widzisz na oscylu co innego to :

1. albo coś źle odczytujesz z oscyla
2. albo z oscylem coś nie tak
3. albo coś źle w kodzie robisz

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 12:00 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

mirekk36 napisał(a):
1. albo coś źle odczytujesz z oscyla
2. albo z oscylem coś nie tak
3. albo coś źle w kodzie robisz


OK - tak właśnie myślałem, że to się musi zgadzać, ale ponieważ się nie zgadzało dlatego zapytałem
a co Twoich pytań to pierwszy wykluczam, ale 2 i 3 jak najbardziej. Zwłaszcza drugie, bo zauważyłem, że przeskalowywuje mi napięcie więc muszę go skalibrować ponownie.
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2013, o 15:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

Spieszę z wyjaśnieniami, o co mi chodziło :)
Częstotliwość 30kHz, wyliczoną na bazie ustawień timera - jest to częstotliwość przełączania sygnału albo generowania przerwania.
Natomiast jeśli na oscylu odczytasz okres takiego sygnału - to dostaniesz 15kHz. Sygnału, a nie czas przełączania. Jeśli dodatkowo zastosujesz funkcję automatycznych pomiarów, na bank wyświetli ci częstotliwość 15kHz.

Nie twierdzę, że popełniasz taki błąd, ale widziałem to zbyt wiele razy, żeby po przeczytaniu 1. posta taki scenariusz nie wpadł mi od razu do głowy :)

_________________
sig off ;(



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO