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



Teraz jest 29 mar 2026, o 19:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 13 lis 2016, o 16:15 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 13 lis 2016
Posty: 2
Lokalizacja: Szczecin
Pomógł: 0

Cześć :)

Zbudowałem układy na dwóch Uno, z czego pierwszy jest pilotem, a drugi odbiornikiem. Wykorzystuję jakąś diodę IR 940 i TSOP2236.
Wykorzystałem bibliotekę IRRemote, która jest całkiem popularna, ale chciałem nauczyć się kodowania RC-5 i napisać samemu prostą
bibiliotekę. I tak zrobiłem. Przeanalizowałem później bibliotekę i zrozumiałem wszystko prócz ustawień dotyczących Timer2.

Mam w swojej bibliotece coś takiego dla nadajnika:
Kod:
// Initialize Timer2
TCCR2A = 0;
TCCR2B = 0;

// Set mode 5, PWM phase correct mode, counts up and down
bitSet(TCCR2A, WGM20);
bitSet(TCCR2B, WGM22);

// Set up 1 prescale
bitSet(TCCR2B, CS20);

// Set frequency 36kHz
OCR2A = 222;
OCR2B = 74;


TCCR2A i TCCR2B to timer counter control register A i B, zawierają ustawienia dla timera.
Ustawiam więc wszystko na zero, a później ustawiam tryb PWM Phase Correct.

Następnie ustawiam preskaler na 1 i OCR2A na 222, co daje mi:
16MHz / 1 / 222 / 2 (PWM Phase Correct) = 36 036, czyli 36kHz

Nie rozumiem do czego służy OCR2B, ale bez tej wartości 74 to mi w ogóle nie działa.

Nadajnik IR podłączony do pinu 3.

Tak wygląda kod konfiguracji Timer2 na układzie odbierającym:
Kod:
// #defines
// MICROSECONDS_PER_TICK 50
// TIMER_CLOCK_CYCLES_LIMIT 16000000 * MICROSECONDS_PER_TICK / 1000000 // to wynosi 800

TCCR2A = _BV(WGM21);
TCCR2B = _BV(CS21);
OCR2A = TIMER_CLOCK_CYCLES_LIMIT / 8; // to wynosi 100
TCNT2 = 0;


Czy możecie podpowiedzieć coś odnośnie tego OCR2B i dlaczego to musi być ustawione na 74?

Z góry dzięki.


Zanim stworzyłem wątek przeczytałem również poniższe linki i wiele więcej, ale nadal nie rozumiem wszystkiego:
https://arduino-info.wikispaces.com/Timers-Arduino
https://maxembedded.wordpress.com/2011/06/28/avr-timers-timer1/
https://withinspecifications.30ohm.com/2014/02/20/Fast-PWM-on-AtMega328/
https://sites.google.com/site/qeewiki/books/avr-guide/pwm-on-the-atmega328
http://maxembedded.com/2011/08/avr-timers-pwm-mode-part-i/
http://forum.arduino.cc/index.php?topic=379240.0
http://www.avrfreaks.net/forum/timer2-phase-correct-pwm-mode-atmega168



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 17:24 
Offline
Użytkownik

Dołączył(a): 31 lip 2016
Posty: 154
Pomógł: 4

Witam.
Jaki to mikrokontroler ?
Sprawdź w Ds jakie są rejestry i do czego służą.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 17:59 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 13 lis 2016
Posty: 2
Lokalizacja: Szczecin
Pomógł: 0

Atmega328p, właśnie zabieram się do czytania.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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