Pewnie to proste ale z moim słabym doświadczeniem jesli chodzi o przerwania to .... 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
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
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 .
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 .
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.
Dzieki. Teraz ruszę trochę do przodu ale jeszcze daleko do finału całości.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 42 gości