logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zmierzyc liczbe impulsow i czas trwania kazdego z nich

Walderama 25 Cze 2004 14:49 2427 9
REKLAMA
  • #1 710929
    Walderama
    Poziom 12  
    Posty: 84
    Ocena: 5
    Potrzebuje zmierzyc za pomoca AVR i do tego najlepiej BASCOMA liczbe impulsow i czas trwania kazdego z nich w okreslonym czasie oczywiscie
    lub sam czas trwania wszystkich impulsow. Podobno AVR ma jakas mozliwosc mierzenia etgo sprzetowo wejscie ICP? jesli tak prosze o konfiguracje timera/licznika do tego.
    Nie moglem znalezc sensownego tematu jesli ktos znalazl prosze o linka lub najlepiej jakis kod moze byc ewentualnie C lub asembler
  • REKLAMA
  • #2 710970
    manka8
    Poziom 2  
    Posty: 3
    Wszystko zależy od tego jakie to impulsy(czas trwania) i co jaki czas sie pojawiają. Nanosekund raczej na tym nie zmierzysz a i tak to jest kicha a nie komputerek do mierzenia impulsow, chyba, ze chodzi o częstotliwości akustyczne.

    Pozdrówa,
    Maniek
  • REKLAMA
  • #3 711251
    Walderama
    Poziom 12  
    Posty: 84
    Ocena: 5
    impulsy czas trawania ms oraz paresetek us liczba od 0 do ok 200 na s
  • REKLAMA
  • #4 711268
    J_Bravo
    Poziom 28  
    Posty: 1373
    Pomógł: 36
    Ocena: 161
    trzeba by bylo zastosowac zewnetrzne liczniki sprzezone z AVR-em (to do licznika impulsow)

    co do licznika czasu trwania iimpulsu to mysle ze dalo by sie to zrobic podobnie... ale pomyslu niemam
  • REKLAMA
  • #5 711296
    Walderama
    Poziom 12  
    Posty: 84
    Ocena: 5
    z liczeniem liczby impulsow radzi sobie kazdy timer avr. gorzej z odmierzeniem czasu trwania. Moze uzyc 2 przerwania 1 reagujace na zbocze narastajace 2 na opadajace i mierzyc roznice czasowwe miedzy nimi z tym ze nie cche aby procesor sie tylko tym zajmowal
  • #6 711313
    Bielsky
    Poziom 21  
    Posty: 333
    Pomógł: 30
    Ocena: 19
    Zacytuję:
    • Bit 6 – ICES1: Input Capture Edge Select
    This bit selects which edge on the Input Capture Pin (ICP1) that is used to trigger a capture
    event. When the ICES1 bit is written to zero, a falling (negative) edge is used as
    trigger, and when the ICES1 bit is written to one, a rising (positive) edge will trigger the
    capture.

    Po naszemu: Za pomocą bitu ICES1 ustawiasz, czy przełączać ma dodatnie czy ujemne zbocze.

    Po przełączeniu przestawiasz bit i czekasz na przeciwne zbocze.
    Czasy trwania impulsów wyliczasz na podstawie stanów licznika, niestety, o ile ma być ich do zapamiętania kilkaset - będziesz musiał użyć zewnętrznego ram-u.
    Dobrze też będzie jeżeli "przedłużysz" licznik, 16 bitów to może być za mało, żeby odmierzać takie czasy z dostateczną dokładnością.
  • #7 711642
    Walderama
    Poziom 12  
    Posty: 84
    Ocena: 5
    No nie wiem jak w bascomie przelaczac zbocza raz z narastajacego a 2 raz z opadajacego tak szybko zeby nie zgubic czasu impulsu.
    Myslalem nad czyms takim jedno przerwanie informuje o narastaniu zbocza odczytauje czas z timera po czym ICP reaguje na opadajace
    i wtedy tez odczytuje czas. roznica miedzy 2 a 1 czasem daje mi czas trwania impulsu. dodatkowo przy int zwiekszam zmienna o 1 i mam liczbe impulsow. Jak napisalem interesuje mnie tez suma wszystkich czasow niekoniecznie czas do impulsu ale liczba impulsow tez jest wazna.
    wlasnie mam prawie taki program skonczony w bascomie jak zadzial to opublikuje.
    Jesli bym chial znac czas trwania impulsu dla danego impulsu to faktycznie potzreba by zewnetrznej pamieci
  • #8 711674
    dborycki
    Poziom 12  
    Posty: 85
    Ocena: 6
    Uruchom Help w bascomie i zobacz opis funkcji "PULSEIN"
    Action
    Returns the number of units between two occurrences of an edge of a pulse.
    to poinno Ci pomoc
    pozdrawiam
  • #9 714519
    Walderama
    Poziom 12  
    Posty: 84
    Ocena: 5
    instrukcja bardzo ciekawa ale wykonywana softwarowo mi zalezy na sprzecie aby procek robil tez co innego. Prawdopodobnie byla by dobra ale przez pewien czas impulsy moga zaniknac a w helpie pisze ze wtedy zatrzymuje ona program. Jeszcze to sprawdze ale dzieki
  • #10 714590
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Hm.. można by zrobić tak: uruhomić timer, niech zlicza czas, przerwanie ustawione na zbocze narastające i opadające, wyzwolenie przerwania zapisywalo by do kolejki fifo stan licznika poczym licznik był by zerowany, i następował powrót z przerwania, parzyste wyraz opisywały by stan wysoki (ile trwał) a nieparzyste - niski, można by jeszcze jakoś skalibrować przerwanie w sensie pobranie stanu licznika zajmuje 2 cykle zegara (16 bitowy) więc odrazu zapisywanie zer do tego licznika może dać błąd odczytu 2 cykli (o 2 zadużo) można więc zamist wpisywać 0 wpisać 2 (tak choćby były już zerowane podczas odczytu) :)
    zliczanie impulsów można zrobić na osobnych rejestrach, przy każdym przerwaniu dodawać 1 do rejestrów, a podczas odczytu wynik przesówać o jeden bit w prawo (gdyż występują 2 przerwania na impuls), wszystko rozwiązane.. program sobie spokojnie może działać a dane o impulsie pobiera z kolejki fifo.
    przykład by musiał być w assemblerze... moge napisać ale koledzy siedzą w bascomie więc nieda rady..

Podsumowanie tematu

✨ Dyskusja dotyczy pomiaru liczby impulsów oraz czasu trwania każdego impulsu za pomocą mikrokontrolera AVR, najlepiej programowanego w BASCOM. Impulsy mają czas trwania w milisekundach i mikrosekundach, a ich liczba może sięgać około 200 na sekundę. Do liczenia impulsów wystarczy standardowy timer AVR, natomiast pomiar czasu trwania impulsów wymaga wykorzystania funkcji sprzętowego wejścia Input Capture Pin (ICP) oraz odpowiedniej konfiguracji timera/licznika. Proponowane rozwiązanie to użycie przerwań na zbocza narastające i opadające, gdzie w przerwaniu odczytywany jest czas z licznika, a różnica między czasami zboczy daje czas trwania impulsu. Wskazano, że do zapamiętania wielu pomiarów może być potrzebna zewnętrzna pamięć RAM, a 16-bitowy licznik może być niewystarczający do dokładnego pomiaru dłuższych impulsów. W BASCOM istnieje funkcja PULSEIN, jednak działa ona programowo i blokuje procesor, co jest niepożądane przy konieczności wykonywania innych zadań. Zaproponowano także implementację kolejki FIFO do zapisywania czasów z przerwań, co pozwoli na asynchroniczne przetwarzanie danych. Przykładowy kod mógłby być napisany w asemblerze, aby zapewnić większą wydajność i precyzję.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA