Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Pomiar czasu od impulsu do impulsu

lupa
-
-
Posty:7
Rejestracja:20 sty 2006, o 15:10
Lokalizacja:Wielkopolska
Pomiar czasu od impulsu do impulsu

Postautor: lupa » 23 paź 2007, o 10:19

Pewnie to proste ale z moim słabym doświadczeniem jesli chodzi o przerwania to .... :605: Więc chodzi o pomiar czasu od rozpoczęcia impulsu aż do nowego impulsu , czyli impuls, przerwa o zmiennym czasie i rozpoczęcie nowego impulsu to wynik.
Napisałem tak jak niżej ale tak tylko mierzy czas trwania samego impulsu.
A służyć to ma temu aby generować nowy odmierzony impuls z możliwością jego wyprzedzenia od zera do kilku mili sek.
$crystal = 8000000
$regfile = "m8def.dat"
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.4 , Db7 = Portd.3 , E = Portb.0 , Rs = Portd.7
Config Int0 = Low Level , Rising 'Falling opadające , rising wzrastające
Config Timer0 = Timer , Prescale = 1
Enable Interrupts
Enable Timer0
Enable Int0
On Int0 _int ' wyzwalanie od impulsu wejsćiowego
Dim X As Word ' czas między impulsami generowanymi
Cls
Cursor Off
'''''''''''program
Do
Locate 1 , 1
Lcd "X=" ; X ; " "
Loop


_int:
Portd.0 = 0
Stop Timer0
X = Timer0 ' to tu wynik zliczania
Timer0 = 0

Start Timer0 'nowe zliczanie
Return

Fredy
-
-
Posty:141
Rejestracja:27 mar 2005, o 21:45
Lokalizacja:Małopolska

Postautor: Fredy » 24 paź 2007, o 07:35

przerwanie musisz ustawić na zbocze narastające.
Skąd wiesz czy licznik ci się nie przepełnia? Zrób drugie przerwanie od przepełnienie się timera i licz te przepełnienia.

lupa
-
-
Posty:7
Rejestracja:20 sty 2006, o 15:10
Lokalizacja:Wielkopolska

Postautor: lupa » 24 paź 2007, o 09:39

Ustawiałem na rożne możliwości jak i i odwracałem impuls na tranzystorze.
Licznik się nie przepełnia bo gdy zmieniam wartość prescale to przy podziale 256 wynik jest 1 a przy prescale 1 wynik jest 129 . Zrobiłem generatorek pomocniczy na 555 generujący impulsy o stałej szerokości a rożnych czasach między impulsami i gdy zmieniam ten czas to wynik jest zawsze ten sam .

Fredy
-
-
Posty:141
Rejestracja:27 mar 2005, o 21:45
Lokalizacja:Małopolska

Postautor: Fredy » 24 paź 2007, o 16:21

A nie jest tak że mierzony przez ciebie impuls ma stałą częstotliwość a Ty zmianiasz tylko wypełnienie? Jeśli tak jest to nie dziw sie że wynik jest ciągle taki sam.

lupa
-
-
Posty:7
Rejestracja:20 sty 2006, o 15:10
Lokalizacja:Wielkopolska

Postautor: lupa » 26 paź 2007, o 08:50

No więc miałeś racje, przy pierwszych próbach miałem przepełnienia i gdy wstawiłem Config Int0 = Low Level to liczył tylko czas impulsu czyli gdy był stan 0 na Int0 po wyrzuceniu Low Level mam teraz jasność że muszę zmienić rezonator na 1MHz bo 8 to za dużo i gdy jest prescale 1024 to mam przepełnienia w pewnym zakresie (częstotliwość mierzona od 200Hz do 5 Khz)
Dzieki. Teraz ruszę trochę do przodu ale jeszcze daleko do finału całości.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 42 gości