RTV forum PL | NewsGroups PL

Generacja przebiegu w Atmega16 z użyciem Timer2 w CTC - problem z zatrzymywaniem OC2

Timer2 w Atmega16

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Generacja przebiegu w Atmega16 z użyciem Timer2 w CTC - problem z zatrzymywaniem OC2

JS
Guest

Sat Mar 20, 2004 3:41 am   



Symuluję w VisualMicroLab + GCC generację przebiegu kilkunastu kHz na
wyjściu OC2 wykorzystując mode CTC. Gdy chcę zatrzymać licznik, wykonuję
sekwencję:
TCCR2 = 0x00;
TCNT2 = 0x00;
OCR2 = 0x00; (te dwie ostatnie pewnie nie są konieczne)
Problem w tym, że po zatrzymaniu na wyjścieu OC2/PD7 jest losowo jedynka lub
zero.
Czy w fizycznym procesorze też się tak dzieje? (niestety nie mam jeszcze
płytek aby to sprawdzić)
cbi(PORTD,7)
też nie chce ustawić portu na zero.
Czy coś robię źle, czy to poprostu pluskwa symulatora?

Pozdrawiam
Jacek Studziński


--
_N_O_S_P_A_M_bsj@poczta.onet.pl
(usuń _N_O_S_P_A_M_ z adresu)

EM
Guest

Mon Mar 22, 2004 4:39 pm   



Quote:
Symuluję w VisualMicroLab + GCC generację przebiegu kilkunastu kHz na
wyjściu OC2 wykorzystując mode CTC. Gdy chcę zatrzymać licznik, wykonuję
sekwencję:
TCCR2 = 0x00;
TCNT2 = 0x00;
OCR2 = 0x00; (te dwie ostatnie pewnie nie są konieczne)
Problem w tym, że po zatrzymaniu na wyjścieu OC2/PD7 jest losowo jedynka
lub
zero.
Czy w fizycznym procesorze też się tak dzieje? (niestety nie mam jeszcze
płytek aby to sprawdzić)
cbi(PORTD,7)
też nie chce ustawić portu na zero.
Czy coś robię źle, czy to poprostu pluskwa symulatora?

Witam
Postaram się pomóc...
Otóż prawdopodobnie masz ustawiony tryb, w którym każde porównanie powoduje
zmianę stanu OC2 (COM21=0, COM20=1 Toggle OC2 on compare match). W takim
razie po zatrzymaniu licznika pozostaje ostatnio ustawiony stan.
Musisz albo najpierw zmienić tryb na taki, który przy porównaniu ustawia pin
OC2 w wymagany stan, czyli ustawić wspominane bity na 11 (Set OC2 on compare
match) lub 10 (Clear OC2 on compare match), a potem zmusić go do osiągnięcia
porównania, albo odłączyć pin OC2 (00) i ustawić port PD7 w tradycyjny
sposób.
W zależności od tego jak często pojawia się porównanie może wystarczyć
jedynie wpisywanie wartości 01 (COM21, COM20) by powodować generację
sygnału, a wpisywanie 11 lub 10 spowoduje ustawienie portu na danym stanie.
Ja osobiście stosowałem coś takiego gdy potrzebowałem generowania przebiegu
o częstotliwości 36kHz.
Pozdrawiam
EM

JS
Guest

Tue Mar 23, 2004 7:02 am   



Quote:
Witam
Postaram się pomóc...
Otóż prawdopodobnie masz ustawiony tryb, w którym każde porównanie
powoduje
zmianę stanu OC2 (COM21=0, COM20=1 Toggle OC2 on compare match). W takim
razie po zatrzymaniu licznika pozostaje ostatnio ustawiony stan.
Musisz albo najpierw zmienić tryb na taki, który przy porównaniu ustawia
pin
OC2 w wymagany stan, czyli ustawić wspominane bity na 11 (Set OC2 on
compare
match) lub 10 (Clear OC2 on compare match), a potem zmusić go do
osiągnięcia
porównania, albo odłączyć pin OC2 (00) i ustawić port PD7 w tradycyjny
sposób.
W zależności od tego jak często pojawia się porównanie może wystarczyć
jedynie wpisywanie wartości 01 (COM21, COM20) by powodować generację
sygnału, a wpisywanie 11 lub 10 spowoduje ustawienie portu na danym
stanie.
Ja osobiście stosowałem coś takiego gdy potrzebowałem generowania
przebiegu
o częstotliwości 36kHz.
Pozdrawiam
EM


Dzięki, to może być ten problem. Jutro (właściwie dziś po południu)

sprawdzę.
Jacek

--
_N_O_S_P_A_M_bsj@poczta.onet.pl
(usuń _N_O_S_P_A_M_ z adresu)

elektroda NewsGroups Forum Index - Elektronika Polska - Generacja przebiegu w Atmega16 z użyciem Timer2 w CTC - problem z zatrzymywaniem OC2

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map