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

Atmega8 - Licznik impulsów

18 Sty 2015 13:54 1608 9
  • Poziom 11  
    Witam

    Mam problem z liczeniem impulsów z wejścia Pind.3 Atmegi8.
    Do wejścia mam podłączony czujnik magnetyczny umieszczony na wałku taśmy transferowej. Wiem że magnes nie jest najlepszym rozwiązaniem, ale potrzebuje zliczyć impulsy z niewielką częstotliwością. Problem polega na tym, że jeżeli taśma zatrzyma się w miejscu zwarcia czujnika to impulsy naliczają się cały czas.
    Potrzebuję zmienić tak kod, aby naliczenie 1 obrotu odbywało się po naruszeniu (nc) i zwolnieniu (no) czujnika...

    1 pełny obrót = (no) + (nc)

    Proszę o pomoc, gdyż rozpoczynam zabawę z uC...

    Napisałem taki prosty programik w bascomie:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 11  
    Zrobiłem tak:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Działa wydaje się super, tylko dla pewności trzeba by porównać z jakimś wzorcem....


    Mam jeszcze jedno pytanie
    Jak chciał bym zmierzyć prędkość impulsów np: w m/s , to muszę użyć Timera - ale jak... pomożecie?


    pozdrawiam
  • Poziom 36  
    dj-krzysiek napisał:




    Mam jeszcze jedno pytanie
    Jak chciał bym zmierzyć prędkość impulsów np: w m/s , to muszę użyć Timera - ale jak... pomożecie?


    Nie mierzy się prędkości impulsów.
    Impulsy nie poruszają się, lecz trwają; mozesz zatem zmierzyc czas trwania takiego impulsu (co w tym przypadku jest bez większego znaczenia), oraz częstotliwośc ich występowania (F); gdzie F = 1/T; a T (cykl) = czas trwania impulsu (stan wysoki) + czas przerwy (stan niski) z twojego czujnika.
    Mając zmierzony czas jednego pełnego cyklu (pełnego obrotu wału z bębnem napędzającym taśmę przenośnika) obliczysz prędkośc taśmy; ...=>bo tak zrozumiałem pytanie o m/sec(?)
    Zatem V= pi*D*F; gdzie:
    D - średnica bębna wyrażona w metrach
    T - wyrażony w sec; - musisz zmierzyc dowolnym timerem.
    Jak?
    Konfigurujesz timer w trybie 'Normal' aby mierzył czas. Ustalasz prescaler.
    Praktycznie (czyt. ułatwienie) dobierasz tak parametry (timer (8-bit albo 16 bit) i prescaler względem taktowania), aby przy najniższej/spodziewanej prędkości obrotowej nie musiałbyś zliczac przepełnień timera, co w nie wielkim stopniu komplikowałoby rachunki i minimalnie zwększyło program.
    W subrutynie gdzie incrementujesz ilośc impulsów, odczytujesz zawartośc timera i jednocześnie go zerujesz.
    Odczytana wartośc przedstawia czas pełnego obrotu wału/bębna.
    Obliczysz to z ustawień parametrów timera (taktowanie, prescaler).
    Wstaw odpowiednie obliczenia w pętli głównej przed wyświetleniem wyniku.

    e marcus
  • Poziom 11  
    Zrobiłem już licznik DZIAŁA jest super, to co chciałem uzyskałem.

    Lecz mam pytanie teraz potrzebuję przy wykorzystaniu 3 czujników umieszczonych na jednym wałku dodawać i odejmować obroty (odległość) w zależności od kierunku obrotu...

    I tu mi się pojawił problem....

    Możecie pomóc ???

    Oto działający mój kod:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Atmega8 - Licznik impulsów
  • Użytkownik usunął konto  
  • Poziom 11  
    Buduję drugi licznik właśnie taki, który ma dodawać i odejmować.Jak dokończę wrzucę i sprawdzę czy działa. Na razie dziękuję i napiszę jak i co....
    Pozdrawiam
  • Poziom 11  
    Na razie wystarczyło dodawanie impulsów... zamykam :)