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



Teraz jest 22 lis 2024, o 02:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 12 wrz 2012, o 12:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2012
Posty: 59
Pomógł: 1

Przerabiam ćwiczenie 5 z książki --> multipleksowanie led - przerwania i nie rozumiem jednego przeliczenia w książce. Działać - działa, musi działać wiadome, ale niestety nie rozumiem dlaczego.. Przeczytałem już kilkukrotnie ten rozdział, ale nie łapię tego i nie chciałbym brać się za kolejne ćwiczenie z LCD bo gdy przyjdzie znowu przeliczanie częstotliwości to poradziłbym sobie, bo zrobię jak w książce, bo działa, a naprawdę chciałbym wiedzieć dlaczego.... Tracę dużo czasu, ale przechodzę do kolejnego ćwiczenia jeżeli 100% wszystkiego rozumiem, nie wiem czy to dobrze, bo pewnie byłbym już dawno na PWMie. Już piszę o co chodzi..
Skoro są 4 wyświetlacze LED to jasne jest, że przerwanie musi odbywać się co 5ms czyli z częstotliwością 200Hz, czyli 200 razy na sekundę, czyli każdy z czterech wyświetlaczy mrugnie w sumie 50 razy w ciągu jednej sekundy.
Częstotliwość taktowania uP wynosi 8MHz i korzystamy z Timera0.
Timer0 to licznik 8-bitowy więc liczy do 256, więc trzeba wstępnie podzielić tę częstotliwość przez odpowiednią wartość preskalera - wybieram 1024.
8 000 000Hz / 1024 = 7813Hz (zaokrąglam żeby było łatwiej mi pisać, wiem że powinny wyjść całkowite częstotliwości, no ale chodzi tutaj tylko o zasadę działania)
O czym mówi ta częstotliwość? Mówi o tym, że licznik w ciągu sekundy zlicza 7813 impulsy. No i nie rozumiem dlaczego:
7813Hz / 200Hz = 39 = OCR0 Nie rozumiem sensu fizycznego tego dzielenia, dlaczego częstotliwość sygnału, który pojawia się na wejściu licznika należy podzielić przez dosłownie mówiąc "odwrotność okresu co jaki wykonywane jest przerwanie". Może to dzielenie wynika z jakiegoś wzoru czy proporcji i jako ostateczna postać to w uproszczeniu dzielenie?
Z góry dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 12:31 
Offline
Moderator
Avatar użytkownika

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

Spróbuj zastanowić się od drugiej strony

7813Hz / 39 = 200Hz

zgadza się ?

po prostu musisz podzielić jeszcze te 7813 przez taką liczbę żeby mieć na końcu przerwanie 200Hz .... to powoduje że 7813 musisz podzielić przez 39 zgadza się ? A te 39 masz możliwość wpisać w rejestr porównania OCRx ... bo dzięki niemu dokonasz właśnie kolejnego podziału zliczanych 7813 impulsów przez 39 ....

No to teraz odwrotnie jak będzie?

7813 / 200 = 39

tylko o to chodzi

_________________
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: 12 wrz 2012, o 12:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2012
Posty: 59
Pomógł: 1

Ok, ale dalej nie rozumiem....
Z tego działania wynika, że sygnał o częstotliwości 7813Hz dzielę na 39 fragmentów i każdy ten fragment to częstotliwość 200Hz..
Sorry nie widzę tego... :/

------------------------ [ Dodano po: 1 minucie ]

a chodzi tutaj o to, że jak timer zliczy 39 impulsów sygnału o częstotliwości 7813Hz to będzie to właśnie czas 5ms..
i to by miało sens, tylko właśnie nie rozumiem dlaczego to wychodzi z tego równania....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 12:44 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

A bo widzisz, musisz tak długo dzielić częstotliwość taktowania procesora aż otrzymasz taką jaka jest Ci potrzebna do sterowania wyświetlacza.
Gdybyś podzielił tylko przez 1024 to byłoby za mało. Dlatego wprowadzasz dodatkowy podział.
Żeby go wyliczyć przekształcasz wzór (czysta matematyka) i otrzymujesz podzielnik którego Ci brakuje.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 12:46 

Pomógł: 0

to chcesz osiagnąć -> 7813:x=200 -> wiec wyliczasz ile ma wynosić x



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 13:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2012
Posty: 102
Pomógł: 2

Na stronie 74 dokumentacji do ATMega32 masz rysunek 31, który wyjaśnia zasadę działania trybu CTC.
Pierwsze ząbki to czas zliczany przez licznik TCNTn (w naszym przypadku: TCNT0). OCn to wyjście Output Compare Match timera "n" (w naszym przypadku to OC0 czyli pin PB3, czyli 4 nóżka mikrokontrolera w obudowie PDIP).
I teraz zaczyna się cała magia ;)
W trybie CTC wartość licznika TCNT0 porównywana jest z wpisaną przez Ciebie wartością rejestru OCR0. Gdy wartość licznika TCNT0 == OCR0 to licznik TCNT0 jest zerowany, a wyjście OC0 zmienia stan na przeciwny.
I teraz, gdy wartość wpisana w rejestr jest "duża" to czas do doliczenia się do tej wartości jest "długi" - vide: Period 1 oraz 2 na wspominanym rysunku. W momencie, gdy do rejestru OCR0 wpiszesz mniejszą wartość, to czas potrzebny do zliczenia impulsów jest "krótszy". Jak pamiętasz, przy spełnieniu warunku TCNT0 == OCR0 wyjście OC0 zmienia stan. A im częściej zmienia stan to wyższą częstotliwość ma sygnał generowany na wyjściu OC0.
Do wyliczenia częstotliwości tego sygnału służy wzór umieszczony poniżej na tej samej stronie. Te wszystkie dzielenia i tym podobne operacje matematyczne to jedynie przekształcenia tego wzoru (znany jest nam preskaler, częstotliwość jaką traktujemy mikrokontroler, częstotliwość, którą chcemy uzyskać i jedyną niewiadomą jest wartość rejestru OCR0).
-- edit: dodałem obrazki.
Obrazek

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 15:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2012
Posty: 59
Pomógł: 1

Zgodnie z tym wzorem:
Obrazek
Po kliknięciu znaku równa się otrzymamy częstotliwość równą około 98Hz. Wartość OCRn wpisałem jako 39. Dlaczego fi/o nie wychodzi 200Hz?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2012, o 15:54 
Offline
Moderator
Avatar użytkownika

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

Ale co ty chcesz obliczyć ??? Może warto od tego zacząć - bo chyba kalkulator nie kłamie - trudno żeby z takiego wzoru wyszło inaczej

------------------------ [ Dodano po: kilkunastu sekundach ]

co to jest za salto-mortale (2*1024*(1+39)) ? ;)

------------------------ [ Dodano po: 1 minucie ]

Toż jak chcesz 200Hz to robisz:

8000000 / 1024 / 39 = ~200

albo

8000000 / 1024 / 200 = ~39

------------------------ [ Dodano po: 3 minutach ]

przed chwilą walłkowałeś temat na czacie i pisałeś tam że już zaskoczyłeś - ale widzę że dalej nie ? - wiesz co zadzwoń do mnie na Skype - to ci wytłumaczę - jeśli chcesz ? (mój nick skype: mirekk36)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

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