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.

Atmega8 - Licznik impulsów

dj-krzysiek 18 Sty 2015 13:54 1386 9
  • #1 18 Sty 2015 13:54
    dj-krzysiek
    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

    0 9
  • #4 18 Sty 2015 19:46
    dj-krzysiek
    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

    0
  • #6 20 Sty 2015 06:18
    emarcus
    Poziom 35  

    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

    0
  • #7 30 Sty 2015 19:33
    dj-krzysiek
    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

    0
  • #8 31 Sty 2015 02:56
    373522
    Użytkownik usunął konto  
  • #9 01 Lut 2015 20:47
    dj-krzysiek
    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

    0
  • #10 18 Cze 2015 18:13
    dj-krzysiek
    Poziom 11  

    Na razie wystarczyło dodawanie impulsów... zamykam :)

    0
  Szukaj w 5mln produktów