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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 4 cze 2025, o 05:52


    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: 27406
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27406
    Lokalizacja: Szczecin
    Pomógł: 1043

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