ArturVF500
Guest
Mon Nov 01, 2004 1:26 pm
Nie moge sobie poradzic z pomiarem szerokosci impulsu podawanego na wejscie
T1... program chodzi na 2 przerwaniach: jedno od INT0 (wyzwalane zboczem
opadajacym, sygnal prostokatny podawany na polacznone wejscia INT0 i T1)
drugie zegarowe 50ms generowane z T0; przerwanie od INT0 wyglada
nastepujaco:
void it_int0 (void ) interrupt 0 using 2 // Przerwanie INT0
{
impulsy=TL1;
impulsy=impulsy+256*TH1;
TL1=0;
TH1=0;
}
gdy zawartosc licznika wyswietlam przy kazdym wywolaniu tego przerwania
wszystko dziala bez zarzutu
natomiast gdy chce to robic co 200ms w przerwaniu od T0:
void it_t0 (void ) interrupt 1 using 1 // Przerwanie od czasomierza
(generowane 20 razy na sekunde)
{
TL0=0xaf; //wartosc odpowiadanaja 50ms przy zegarze 12MHz
TH0=0x3c;
cz_sek++;
impulsy2=impulsy2+(impulsy/4); //srednia z 4 kolejnych odczytow T1
if (cz_sek==4) // wyswietlanie co 4 cykle przerwania
{
imp(); // funkcja wyswietlajaca wynik pomiaru
cz_sek=0;
impulsy2=0;
}
wszystko jest dobrze, gdy dlugosc impulsu nie przekracza 1.5ms (15000
impulsow przy zegarze 12MHz). powyzej tej wartosc wynik zaczyna plywac tym
bardziej im dluzszy jest impuls - przy 15000 jest to ok 500, przy 35000
nawet 5000
ma ktos pomysl jak to rozwiazac? probowalem zmieniac priorytety obu przerwan
i nic sie nie zmienia...
pozdrawiam
Artur
ArturVF500
Guest
Mon Nov 01, 2004 1:49 pm
ps.
w momencie wlaczenie drugiego przerwanie (zegarowego od T0) wynik pomiaru
jest dwukrotnie wiekszy niz rzeczywista wartość...
Piotrek Sz.
Guest
Mon Nov 01, 2004 6:06 pm
Quote:
wszystko jest dobrze, gdy dlugosc impulsu nie przekracza 1.5ms (15000
impulsow przy zegarze 12MHz). powyzej tej wartosc wynik zaczyna plywac tym
bardziej im dluzszy jest impuls - przy 15000 jest to ok 500, przy 35000
nawet 5000
Witam.
Coś mi się tu nie zgadzają Twoje obliczenia.
Mamy Kwarc 12MHz czyli timery taktowane są częstotliwością 1MHz.Więc skoro T1
zliczył do 15000 to upłynęło 15000 uS inaczej 15ms a nie 1.5ms.Więc moja
propozycja brzmi:Policz to jeszcze raz.
Pzdr.
Piotrek Sz.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
AlexY
Guest
Mon Nov 01, 2004 6:36 pm
Użytkownik Piotrek Sz. napisał:
Quote:
wszystko jest dobrze, gdy dlugosc impulsu nie przekracza 1.5ms (15000
impulsow przy zegarze 12MHz). powyzej tej wartosc wynik zaczyna plywac tym
bardziej im dluzszy jest impuls - przy 15000 jest to ok 500, przy 35000
nawet 5000
Coś mi się tu nie zgadzają Twoje obliczenia.
Mamy Kwarc 12MHz czyli timery taktowane są częstotliwością 1MHz.Więc skoro T1
zliczył do 15000 to upłynęło 15000 uS inaczej 15ms a nie 1.5ms.Więc moja
propozycja brzmi:Policz to jeszcze raz.
zdaje sie ze tu byl problem plywania wynikow przy wylaczonym T1, problem
z dwukrotnie dluzszym liczenie Artur ma jak T1 jest wlaczony