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



Teraz jest 23 kwi 2024, o 19:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 28 maja 2014, o 19:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2014
Posty: 279
Lokalizacja: Kraków
Pomógł: 4

Witam!

Troszkę się nie mogę połapać w rozdziale o timerach w nocie katalogowej dla rodziny atmega48/88/168/328. Otóż pojawiają się tam jakieś TCCR0A i TCCR0B - ja potrzebuję uruchomić tylko najprostszy timer CTC :roll: ale chętnie bym się dowiedział jakie możliwości posiada ta rodzinka w zakresie timerów. Jeśli ktoś mógłby mi to wyjaśnić, naprowadzić, jakiegoś linka przytoczyć byłbym rad! ;)

_________________
http://forum.atnel.pl/topic15633.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Mellanogaster napisał(a):
ja potrzebuję uruchomić tylko najprostszy timer CTC

CTC to nie jest timer. To jest tryb,w którym pracuje timer.

Mellanogaster napisał(a):
Otóż pojawiają się tam jakieś TCCR0A i TCCR0B

Są to rejestry, w których wybiera się jaki ma być np. tryb timera (np.CTC) albo prescaler.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 22:18 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Timer 0 ma dwa rejetry controlne TCCR0A i TCCR0B które razem tworzą jakby jedno 16 bitowe słowo, czyli to jest taki jakby jeden rejstr kofiduracyjny 16 bitowy podzielony na dwie części. (JA TAK SOBIE TO TŁUMACZE).

Chcesz Tryb CTC?

Patrzysz na tabele 15-8. w nocie ATmegi328 i co tam widać? Aby ustawić Timer w tryb CTC trzeba w obu rejestrach (TCCR0A i TCCR0B) ustawić odpowiednie bity WGM na odpowiednie wartości czyli:

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


Co prawda nie trzeba ustawiać WGM00 i WGM02 na zero bo po restarcie są tak domyślnie ustawione ale wpisałem Ci do dla zobrazowania.

Teraz pora na preskaler! :) służą do tego bity w rejestrze B oznaczone CS00-CS02, ustawmy więc preskaler na 1024

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




teraz musimy zrobić coś żeby zgłaszało nam się przerwanie gdy timer nam zliczy do wartości jaka znajduję się w rejestrze porównawczym OCR0A lub OCR0B, gdyż są dwa takie rejestry. my wybieramy sobie rejestr OCR0A, gdy timer zliczy do tej wartości którą wpiszesz do rejestru zgłosi przerwanie a więc trzeba właczyć to przerwanie

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


i proszę bardzo, mamy skonfigurowany timer0 w tryb CTC. teraz wystarczy do rejestru OCR0A wpisać jakąś wartość od 0 - 255 i zgłaszał będzie przerwanie gdy zliczy do tej wartości:) musisz funkcją

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


odblokować przerwanie i zaimplementować w programie obsługę przerwania:)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 22:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2014
Posty: 279
Lokalizacja: Kraków
Pomógł: 4

O! Super, super!
I domyślam się, że Jeśli wybiorę rejestr porównawczy A to wektor przerwań również będzie opatrzony sufiksem A.

Coś już zaczynam kapować! (chyba)
Raczej nie można wybrać dowolnie rejestru porównującego (OCR0A/OCR0B)

- powinien być OCR0A - TOP (tabela 14.8)

Czy się mylę?

_________________
http://forum.atnel.pl/topic15633.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 23:37 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Cytuj:
Raczej nie można wybrać dowolnie rejestru porównującego (OCR0A/OCR0B)


chyba można ale nigdy tego nie robiłem, zawsze wybierałem A. ale CO Ci zależy spróbowac:)? najwyżej nie zadziała:)

Mellanogaster napisał(a):
I domyślam się, że Jeśli wybiorę rejestr porównawczy A to wektor przerwań również będzie opatrzony sufiksem A.


Dokłdnie tak będzie jak myślisz:) OCIE0A oznacza On_Compare_Interrupt_Enable_timer0_rejestrA:) czyli włacz przerwanie od porównania z rejestrem OCR0A:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 00:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Rejestry są nazywane w sposób dość logiczny
TCCRxA, TCCRxB, TCCRxC - gdzie x to numer timera. W 48/88/168/328 są trzy timery odpowiednio:
0 - 8 bitowy
1 - 16 bitowy
2 - 8 bitowy

Tak samo jest z rejestrami do krórych wpisuje się wartość do porówniania:
OCRxA, OCRxB - gdzie x to numer timera

W tej linii procesorów wszystkie timery mają po dwa wyjścia:
OC0A i OC0B dla timera0
OC1A i OC1B dla timera1
OC2a i OC2B dla timera2
Timer1 ma jeszcze wejście ICP

Wszystkie timery mogą pracować w trybach NORMAL, CTC, PWM i PWM Phasecorrect. Timer1 dysponuje większą ilością trybów, związaną z możliwymi do wyboru rozdzielczościami PWM oraz trybem ICP
Timer2 poziada dodatkowe funkcje zwiazane z trybem asynchronicznym.

Tryb CTC można uzyskać na 2 wyjsciach danego timera np. timer0 (OC0A i OC0B) i otrzymać od nich dwa oddzielne przebiegi prostokątne i / lub oddzielne przerwania, pod warunkiem że wartość OC0B będzie MNIEJSZA niż OC0A.

To czy w wyniku pracy timera w trybie CTC uzyskujemy na jego wyjściu / wyjściach przebieg prostokątny czy nie zależy od ustawienia bitów w rejestrze. W przypadku Timera0 jest to rejestr TCCR0A.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 wrz 2017, o 08:40 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 78
Pomógł: 0

Kod:
DDRB |= (1 << DDB1)|(1 << DDB2);  // PB1 and PB2 wyjscie PWM

TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);        //NON Inverted PWM
TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //PRESCALER=64 MODE 14(FAST PWM)

ICR1=2499;  //fPWM=50Hz (Period = 20ms Standard).
   
      OCR1A=pwm1;
      OCR1B=pwm2;


czy mogę jednocześnie generować rożnego PWM na kanala ai b Czy muszę zrobić programowy przełącznik raz kanał z a raz kanał b ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 wrz 2017, o 17:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

odpowiedź usunąłem. :|
Należy zakładać nowe wątki z pytaniami.
NIE DOPISUJEMY POSTÓW DO WĄTKÓW KOLEGÓW.



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