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



Teraz jest 23 sty 2025, o 22:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 8 sie 2014, o 20:47 
Offline
Nowy

Dołączył(a): 04 maja 2014
Posty: 22
Zbananowany użytkownik

Pomógł: 0

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


Jaką wartość wpisać aby przy 8Mhz procesora czas do zerowania wynosił 10ms ,jak to liczyć tyle jest przykładów że już się w tym gubię. Jak to się ma do 1024 skoro liczy do podanej wartości ?
Kiedyś działałem na drugim (liczy do 256)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ale taki zapis jakoś działał
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
czy to dodawało do 256 i zerowało przy 410 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2014, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

8000000[Hz] / 1024 * 0.010[s] = 78.125
Wobec tego wartość rejestru OCR1A powinna wynieść 78.

To 1024 albo 256 to tzw. preskaler czyli wstępny dzielnik częstotliwości i nijak się ma do wartości początkowej rejestrów OCRxy. Wzorcowy sygnał zegarowy (taktowanie procesora w Twoim przypadku 8MHz) jest dzielony przez ten właśnie dzielnik i takie "wydłużone" czasowo impulsy są podawane na układ liczący, który liczy do zadanej wartości OCRxy (lub innej - górne i dolne progi zależą od ustawień samego układu licznikowego).

Zauważ w takim razie, że obliczona wartość 78 jest dodatkowym dzielnikiem dla układu liczącego, gdyż każdy impuls (wstępnie podzielony przez preskaler = 1024) zwiększa wartość licznika (rejestr TCNT0) i porównuje go z wartością 78. Wobec czego musi być aż 78 "tyknięć" zegara licznika, aby uzyskać zakładany czas (10ms).

Jeżeli zastosujemy "inżynierię odwrotną" :D wtedy:
8000000[Hz] / 1024 / 78 = 100.16Hz, czyli w przybliżeniu 10ms.

To przybliżenie wynika z faktu świadomego odrzucenia wartości ułamkowej początkowych obliczeń.
Jeżeli potrzebna jest dwukrotnie większa częstotliwość (dwa razy krótszy czas interwału) wtedy wystarczy tylko podzielić wartość 78 / 2 = 39. Uzyskamy wtedy 200Hz na które wskazuje moja poniższa uwaga.


Timer0 oraz Timer2 to liczniki 8-mio bitowe, a więc rejestr OCR2 jest również 8-mio bitowy. W takim razie OCR2 |= 410; powoduje zapisanie wartości 154 do OCR2 odrzucając najstarszy bit (pomijam ewentualną poprzednią wartość tego rejestru). W związku z tym tak naprawdę uzyskana częstotliwość to ok. 200Hz:

8000000[Hz] / 256 / 154 = 202.92Hz => 5ms



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

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