pulsein jak uzywać?

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

pulsein jak uzywać?

Post autor: matrix » 29 paź 2009, 9:30

przeczytałem w polskim helpie do bascom'a jak uzywa się tego polecenia, ale nie rozwiewa to moich pewnych wątpliwości, więc piszę tutaj moje pytanie.

powiedzmy że mam źródło sygnału prostokątnego ze zmienną szerokością
w zakresie od 1 do 2 ms, która to szerokość zmienia się bardzo dynamicznie. i teraz za pomocą polecenia pulsein chcę na bieżąco odczytywać wartość tej szerokości z danego pinu. i teraz moje pytanie:

jak powinienem zastosować polecenie pulsein? jak w przykładzie nr1 czy w przykładzie nr2?

przykład nr1

Kod: Zaznacz cały

do
    pulsein dlugimp , Pinb , 1 , 0   
      if dlugimp < dlugimpdol then 


    'sprawdzam czy dlugosc impulsu w danej chwili
    'jest wieksza niz zapisana dolna wartosc graniczna
    

     end if
loop
przykład nr2

Kod: Zaznacz cały

pulsein dlugimp , Pinb , 1 , 0 
do
      if dlugimp < dlugimpdol then  

   
   'sprawdzam czy dlugosc impulsu w danej chwili
   'jest wieksza niz zapsana wartosc graniczna


      end if
loop
zauważcie że w drugim przykładzie zmieniła się kolejność zastosowania polecenia pulsein i początku pętli do...loop
ja sobie tłumaczę to tak że aby na bieżąco czytać wartość długości impulsu polecenie o którym mowa powinienem umieścić wewnątrz pętli do...loop, w ten czas z każdym kolejnym odczytem kodu procesor przypisze aktualną wartość impulsu do zmiennej dlugimp i mi ja zaktualizuje.

jeśli dobrze myślę to co w takim przypadku kiedy mam dwie pętle wewnątrz siebie w przykładzie jak poniżej?

czy na początku każdej z pętli powinienem podać polecenie pulsein ?

przykład nr3

Kod: Zaznacz cały

do
pulsein dlugimp , Pinb , 1 , 0      
  if dlugimp < dlugimpdol then 

     'w tej petli na poczatku
     'sprawdzam czy dlugosc impulsu w danej chwili
     'jest wieksza niz zapisana dolna wartosc graniczna


    do
    pulsein dlugimp , Pinb , 1 , 0
     if dlugimp > dlugimpdol then 


         'z tej petli nie pozwole wyjsc dopoki
         'nie zostanie spelniony warunek ze
         'wartosc zmiennej dlugimp 
         'bedzie wieksza niz
         'graniczna wartosc zmiennej zapisanej 
         'w pamieci ram dlugimpdol


      end if
  loop
end if
loop
symulacja w programie wskazuje że muszę w każdej pętli wstawić polecenie pulsein bo inaczej program nie chce działać poprawnie.

ROM
Użytkownik
Posty: 257
Rejestracja: 15 cze 2005, 0:11
Lokalizacja: Poznań

Post autor: ROM » 01 lis 2009, 10:46

A nie lepiej do tego celu wykorzystać przerwania ?

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 01 lis 2009, 12:48

ROM pisze:A nie lepiej do tego celu wykorzystać przerwania ?
eee. wolę pulsein, bo łatwiejszy w stosowaniu. zresztą program działa bo sprawdzony.

ODPOWIEDZ