Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

BASCOM-51 Pomiar czasu

Mariusz_N 01 Paź 2005 15:11 897 2
  • #1 01 Paź 2005 15:11
    Mariusz_N
    Poziom 18  

    Witam Wszystkich !!

    Mam prośbę o pomoc w stworzeniu programu w Bascom na procesorek AT89c2051

    Robię pierwsze kroki w Bascom'ie i mam trochę problemów ze zrozumieniem niektórych rzeczy :|

    Chciałem zbudować prosty układ ( procesor i wyświetlacz LCD 16*1 ), który jedno razowo dokonał by pomiaru czasu impulsu na jednym z wyprowadzeń procesora i podał wynik na wyświetlaczu LCD w mili sekundach ( np. 750ms ) ( maksymalny czas pomiaru do 5 sekund ). W przypadku przekroczeniu czasu 5sek. po prostu napis error. Nie wiem jaką konstrukcję powinien mieć program, jaki rezonator powinien być zastosowany, żeby w miarę możliwości był dokładny czas.

    Proszę o jakąś pomoc
    Pozdrawiam

    0 2
  • Pomocny post
    #2 03 Paź 2005 01:12
    Paweł Es.
    Pomocny dla użytkowników

    Kwarc dajesz np. 12 MHz

    Robisz sobie pętelkę pomiarową wywoływaną z Timera np. co 200 µs sprawdzającą dane wejście pomiarowe.

    Jeżeli wejście jest =0 to nie zliczasz jeżeli = 1 to zwiększasz zmienną WYNIK o 1 (zmienna 16 bitowa) zakres będzie do jakichś 6.4 sekundy.
    W pętli sprawdzasz także czy zmienna nie przekroczyła 25000 (5 sekund).

    Jeżeli tak to ustawiasz zmienną ERR=1.

    Jeżeli wejście zmieni się z 1 na 0 to wychodzisz z pętli pomiarowej, dzielisz zmienną WYNIK przez 5 i masz wynik w milisekundach i na LCD go !
    Potem zerujesz zmienną wynik, czekasz aż wejście bedzie równe 0, wchodzisz w pętlę pomiarową. Ogólny zarys programu:

    1. Inicjalizacja (typ kwarcu, LCD)
    2. Deklaracje zmiennych i lini wejściowej
    3. Ustalenie parametrów przerwania timera
    4. LICZ=0:ERR=0:WYNIK=0
    5. Wyświetl WYNIK
    6. Czekaj na WE=0 (początek sygnału)
    7. Ustaw znacznik LICZ=1 (zezwala przerwaniu na zliczanie gdy WE=1)
    8. Czekaj na LICZ=0 (czyli do momentu przejścia WE=1 na WE=0)
    9. Podziel WYNIK przez 5
    10. Wyświetl WYNIK (z uwzględnieniem stanu zmiennej ERR)
    11. WYNIK=0
    12. Idź do punktu 6

    przerwanie od Timera wywoływane co 200 µs:

    jeżeli LICZ=1 i WE=1 to WYNIK=WYNIK+1
    jeżeli WYNIK>25000 to LICZ=0 i ERR=1 (przepełnienie)
    jeżeli LICZ=1 i WE=0 to LICZ=0 ' Zablokowanie zliczania gdy WE z 1 na 0

    koniec obsługi przerwania

    Można jeszcze dodać pomiędzy 11 i 12 jakiś warunek by nie mierzył w kółko (jakiś styk zewnętrzny POMIAR).

    Teraz wystarczy to zakodować w Basicu

    0
  • #3 05 Paź 2005 18:42
    Mariusz_N
    Poziom 18  

    Wielkie wielkie dzięki !!
    Już wszystko działa :D teraz kumam o co chodzi :D a ja myślałem od d... strony.

    dzieki i pozdrawiam :!:

    0