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



Teraz jest 15 lis 2024, o 12: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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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: 581
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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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
Avatar użytkownika

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

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

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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