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 15 cze 2025, o 13:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
    Autor Wiadomość
     Tytuł: Timer1
    PostNapisane: 27 kwi 2012, o 17:28 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Witam
    Mam taki kłopot bo nie do końca rozumie timery. Timer 0 i 2 w miarę ogarnąłem ale timer 1 niestety nie mogę.
    Moje pytanie polega na tym że?
    1.Timer1 składa się z timer1A timer1B ?
    2.Timer który ma tryb 8bitów albo 16bitów. Czym się one różnią? Tym że w OCR możemy w trybie 8bitowym dawać wartości w zakresie 0-255 a w trybie 16bitowym to wartości w zakresie 0-65536??
    3.Jak uruchomić te timery w tryb CTC?
    dla timer1B to coś takiego??
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    4.Przy takim ułożeniu uzyskamy częstotliwość 8MHz? jeśli procesor będzie miał ustawiony wewnętrzny kwarc 8MHz?
    5.Jak uruchomić timer1A bo z tego co wiem to on ma inne rejestry?
    6. O co w tym chodzi że są 2 timery timer1A i timer1B? czy można zrobić ze procedura obsługi przerwania Compare Match będzie osobna dla tych timerów?
    7.I jeszcze takie może głupie pytanie przypuśćmy że timer 2 będzie po ustawieniu odpowiedniej częstotliwości np.100Hz czyli że co? Że w sekundę zrobi 100razy jakąś funkcje która będzie w compare match?

    Proszę o o napisanie który z punktów dobrze rozumuję a który nie.
    Oraz proszę o wyjaśnienie tych pytających punktów. Gdyż w książce co prawda jest dział o timerach ale jest ogólnie bo ustawienia timerów to kolejna książka by była ;)
    Proszę o pomoc

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 27 kwi 2012, o 19:26 
    Offline
    Moderator
    Avatar użytkownika

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

    Ja nie za bardzo jestem w stanie to wytłumaczyć odnosząc się do tych punktów bo bym się zakałapućkał. Od razu powiem ci gdzie robisz błędy myślowe - to może coś ci się wyjaśni.

    Timer1 - to TYLKO jeden Timer16 bitowy a nie jakieś tam dwa timery A czy B albo co gorsze że wymyślasz jeszcze jakiś 8-bitowy i 16-bitowy timer w timerze1 - to już niestety pomieszanie z poplątaniem

    Zatem dokładnie Timer1 działa IDENTYCZNIE jak Timer0 czy Timer2 czyli zlicza sprzętowo impulsy w swoim podstawowym rejestrze TCNTx. Sam się zastanów - jest to tak samo jak w timerach 8-bitowych czy nie ? Pewnie że jest

    tyle że sprzętowy licznik Timera1 zlicza aż 16-bitową wartość a zatem od 0 do 65535 i koniec

    Jak ustawić tryb CTC w Timerze1 ??? No IDENTYCZNIE jak w Timer0 czy Timer2 - wchodzisz na tabelkę trybów pracy i tam masz jak byk napisany tryb CTC. To znaczy są aż dwa tryby - CTC mode 4 oraz mode 12 .... ale jak widzisz w każdym z nich zliczanie następuje poprzez porównanie do innego rejestru. W mode 4 kolumna TOP pokazuje ci że następuje zliczanie do wartości rejestru porównania właśnie OCR0A ...... I ten tryb niech cię na razie interesuje. Drugiego nie będę tłumaczył bo masz za mało podstaw i wszystko zaraz by ci się pokiełbasiło

    No więc skoro jest porównywanie do OCR1A to znaczy że po zaistnieniu równości zliczonych impulsów w sprzętowym liczniku timera1 - rejestrze TCNT1 - zrówna się on z wpisaną wcześniej przez ciebie wartością do OCR1A to nastąpi przerwanie CompareMatchA ..... właśnie od kanału A bo jest jeszcze kanał B - czyli masz rejestry porównania OCR1A oraz OCR1B

    w uproszczeniu OCR1A działa identycznie jak w przypadku OCRx dla timerów 8-bitowych .... I jak chcesz przerwania od porównania działającego analogicznie to wybieraj właśnie to przerwanie

    Można jeszcze wprowadzić drugie od rejestru OCR1B - ale wartość wpisana do niego nie może być większa niż ta wpisana do OCR1A albo do ICR1

    Zatem nie ma mowy o jakichś oddzielnych procedurach przerwania dla tych dwóch timerów rzekomych o jakich ty myślisz wewnątrz Timera1 - przecież idąc twoim tokiem to byśmy tu mieli bałaganik

    Jest jeden Timer1 - 16-bitowy ale ma dwa rejestry porównania i dzięki temu można generować dwa niezależne przerwania CompareA oraz CompareB w różnym czasie

    o to tu chodzi

    ale ja proponuję ci najpierw przeprowadzić więcej ćwiczeń na trybach pracy timerów 8-bitowych żeby zabrać się za analizę większej ilości trybów w Timerze1 - ponieważ brak zrozumienia tamtych - utrudnia ci zrozumienie tego - OK

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 27 kwi 2012, o 20:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 paź 2011
    Posty: 582
    Pomógł: 17

    A jeśli ustawimy tryb na normal, to aby otrzymać wartość to musimy 'dodać' dwa rejestry?
    uint16_t wynik=(TCNT1H<<8 + TCNT1L); ??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 27 kwi 2012, o 21:22 
    Offline
    Moderator
    Avatar użytkownika

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

    xamrex napisał(a):
    A jeśli ustawimy tryb na normal, to aby otrzymać wartość to musimy 'dodać' dwa rejestry?
    uint16_t wynik=(TCNT1H<<8 + TCNT1L); ??


    A dlaczego taka karkołomna operacja ? .... przecież wystarczy:

    Kod:
    uint16_t wynik = TCNT1;


    i to wsio ;)

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 09:00 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Aha
    Sporo się dowiedziałem.
    Timery 0-2 już w miarę ogarnąłem.
    Mam takie pytanie:
    Przypuśćmy że potrzebujemy przerwanie co 1ms gdy procesor jest taktowany z częstotliwością 8MHz
    Czyli musimy wykorzystać w tym celu timer1A bo inny timer się nie nadaje?
    Jaka musi wynosić częstotliwość tego by uzyskać 1ms? 1KHz ?
    Nie mogę znaleźć w nocie pdf jakie rejestry odpowiadają za timer1A w tryb CTC
    Na której to stronie może być?
    Z tego co udało mi się zauważyć i wywnioskować to może tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Czy rejestry są dobre?
    Co do częstotliwości to
    8000000/64=125000 (wynik z preskalera)
    125000/125 = 1000 (1KHz) (dodatkowy podział przez 125 w ORC1A)
    1s=1000ms
    Czyli przerwanie co 1ms?
    Czy ja to dobrze rozumuję ?Bo coś mi się wydaje że na innych timerach też by się to udało hmm...

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 10:29 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 lut 2012
    Posty: 243
    Lokalizacja: wlkp
    Pomógł: 2

    Jest OK. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 10:41 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Ok ale na wszelki wypadek poczekam na Pana Mirka może coś dopowie :)

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 10:44 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    Na mój gust OK , ale to Mirek jest tu Guru w "C" i on niechaj zatwierdzi

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 10:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 lut 2012
    Posty: 243
    Lokalizacja: wlkp
    Pomógł: 2

    Jednak widzę błąd. Podpowiedź datasheet str. 108.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 10:59 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Aha chyba znalazłem ten błąd czy teraz jest dobrze?

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

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 11:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 lut 2012
    Posty: 243
    Lokalizacja: wlkp
    Pomógł: 2

    Zajrzyj na stronę 108, spójrz na rejestr..... :)
    Preskaler teraz ok, spójrz na te bity w jakim rejestrze timera1 się znajdują, a jaki masz wpisany?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 11:24 
    Offline
    Moderator
    Avatar użytkownika

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

    Janadamis napisał(a):
    Czyli musimy wykorzystać w tym celu timer1A bo inny timer się nie nadaje?.


    No właśnie już tu popełniasz nadal ten sam błąd myślowy i dlatego wszystko ci się kotłuje ;)

    Nie ma Timer1A albo Timer1B - pisałem ci o tym wyżej i musisz to zrozumieć, jest TYLKO

    Timer1

    bo ty tworząc sobie w głowie timer1A zaraz wymyślasz że do niego są rejestry TCCR1A natomiast do twojego głowowego że tak go nazwę timera1B są rejestry TCCR1B ..... a to już niestety prowadzi cię w totalne maliny a nawet jeżyny :(

    Jeszcze raz króciutko:

    Timer1 ma rejestry konfiguracyjne:

    TCCR1A oraz TCCR1B

    zaglądasz sobie pan do noty PDF i co tam widzisz ? no musisz czy chcesz czy nie chcesz patrzeć na te bity i ich opisy a poniżej tabelki. Zobacz sobie przecież że tryb pracy Timera (a tobie chodzi o CTC) ustawiasz za pomocą bitów o nazwach WGM1x ..... czy zwróciłeś uwagę że one znajdują się w obu tych rejestrach ???? Tak tak - WGM11 oraz WGM10 są w rejestrze TCCR1A natomiast WGM12 oraz WGM13 są w rejestrze TCCR1B. Skąd więc pomysł na jakieś rozgraniczanie Timera1 na dwa inne ????

    Więc zobacz - skoro chcesz wybrać TRYB 4 (CTC) to musisz ustawić na 1 bit WGM12 i to w rejestrze TCCR1B !!!

    natomiast później przechodzisz do preskalera - za niego ZAWSZE w każdym AVR odpowiedzialne są bity o nazwach CSxx - no i w którym rejestrze je widzisz ???? TCCR1A czy TCCR1B ???? A może w obu ??? jak wynika z twojego podziału na Timer1A i Timer1B ?????

    NIE! ;) ...... bity CS12..CS10 masz TYLKO w rejestrze TCCR1B i tylko tam je ustawiasz dla całego Timera1 !!!! nie można ustawiać jakichś dwóch preskalerów dla dwóch twoich wymyślonych timerów w ramach timera1 bo tego nie ma ;)

    Dlatego na początek dla uproszczenia przyjmij że jak chcesz działać z CTC z Timerem1 to korzystasz z przerwania CompareA oraz rejestru porównania OCR1A - i wyjdzie ci wszystko dokładnie tak jak robiłeś z timerami 8-bitowymi tylko że tu będziesz miał 16-bitowy licznik TCNT1

    teraz będzie jaśniej ? ;)

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 12:01 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Trochę jaśniej
    Czyli:
    Tryb CTC ustawia się w timerze1B
    Preskaler w timerze1B
    Dodatkowy podział (OCR1A) w timerze1A
    Zezwolenie na przerwanie w timerze1A
    Przerwanie comparematch dla timer1A
    Ten timer1A i timer1B to chodzi mi nie że są 2 timery tylko o sekcje w tym jednym timerze.
    czyli jeśli powyżej jest prawda to załączanie timeru wyglądało by tak:
    Dodałem funkcjie na przerwanie comparematch bo tam też się wybiera ten symbol itp.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Tak zrozumiałem z twojej wypowiedzi
    Czy coś tu jest prawdą czy nadal jestem w błędzie?

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 16:57 
    Offline
    Moderator
    Avatar użytkownika

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

    No i w końcu program napisałeś dobrze ale jeśli chcesz się porozumiewać z innymi prawidłowo to niestety ale musisz też posługiwać się odpowiednimi terminami. No ja nie mogę zrozumieć co ci się kołacze po głowie że nadal piszesz te dziwne rzeczy jak:

    w timerze1A albo w timerze1B

    że to niby jakieś dwie sekcje.

    Żadne dwie sekcje i żadne timery1a i 1b

    masz DWA REJESTRY

    TCCR1A oraz TCCR1B do konfigurowania Timer1

    i NIC POZA TYM - rozumiesz ?

    a że akurat ustawienie trybu CTC wymaga tylko i wyłącznie ustawienia bitów w TCCR1B to tyle - nie ma to nic wspólnego z jakimś timerem1B czy sekcją timera1.

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 17:01 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    OK dzięki
    Wszystko zrozumiałem
    A co do timer1A i timer1B to właśnie chodziło mi o te rejestry TCCR1A i TCCR1B

    _________________
    Programowanie to styl życia :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 17:09 
    Offline
    Moderator
    Avatar użytkownika

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

    Janadamis napisał(a):
    A co do timer1A i timer1B to właśnie chodziło mi o te rejestry TCCR1A i TCCR1B


    No tak ale zobacz jak posługiwanie się nieprawidłowym nazewnictwem może prowadzić do zamieszania ;)

    cieszę się że w końcu poszło - a teraz na spokojnie będziesz mógł sobie powoli analizować pozostałe tryby pracy Timera1

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 28 kwi 2012, o 17:14 
    Offline
    Użytkownik

    Dołączył(a): 27 mar 2012
    Posty: 511
    Lokalizacja: Sląsk
    Pomógł: 14

    Faktycznie trochę namieszałem :)
    Ale udało się i mam nadzieję ze na następny raz nie popełnię tego błędu :)

    _________________
    Programowanie to styl życia :D



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 11 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