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.

Atmega644pa-pu - ADC-odczytanie poprzedniego pomiaru i porównanie z bieżącym

Natalia02bx 05 Lut 2016 23:09 696 15
  • #1 05 Lut 2016 23:09
    Natalia02bx
    Poziom 4  

    Mam pytanie,
    odczytuję pomiar z czujnika odległości i chcę jakoś zapamiętać poprzedni pomiar, aby porównać z bieżącym w celu wyłapania dużej różnicy napięć (skoku napięcia) w kolejnych cyklach pomiarowych. Pomiar wykonuję w przerwaniu, stosuję filtr dolnoprzepustowy i uśredniam wyniki i po wyjściu z przerwania odczytuję ostateczną wartość pomiaru. Czy powinnam zastosować drugie przerwanie aby zapisać jakoś pomiar i go utrzymać aby potem porównać go z kolejnym? Jak to programowo zrobić?
    Bardzo proszę o pomoc :)

    0 15
  • #3 06 Lut 2016 10:43
    2675900
    Użytkownik usunął konto  
  • #4 06 Lut 2016 10:58
    Natalia02bx
    Poziom 4  

    Cześć Piotruś! :D

    no tak tylko currADC ciągle by mi sie uaktualniało więc i prevADC też w tym wypadku, i tak kombinuję czy jeszcze wewnątrz przerwania zapisać odczyt do jakiejś zmiennej a potem w głównym programie ją wyciągnąć, czy może w głównym jakoś zapisać wartość poprzednią tylko tak żeby urzymywana była dopóki poprzedni cykl pomiarowy się nie spończy, a potym nadpisać tą zmienną kolejną wartościa pomiaru i ją trzymać, itd, .. kurde może pętlę zrobię.
    Albo jakoś drugie przerwanie i tam coś takiego zrobić :D
    tak wgl to po przerwie wracam do tematu https://www.elektroda.pl/rtvforum/topic3142216-30.html#15320246 i kontynuuję, więc Dondu, program jest tutaj pod tym linkiem :D

    0
  • #5 06 Lut 2016 11:08
    2675900
    Użytkownik usunął konto  
  • #6 06 Lut 2016 12:03
    Natalia02bx
    Poziom 4  

    nie nie, jadę robotem i mierzę odległość bocznym czujnikiem od ściany, jak zauważę skok napięcia czyli koniec ściany (obiektu) oznacza to możliwą wolna przestrzeń w którą mogłabym wjechać, muszę tylko ocenić czy przestrzeń ta jest wystarczająco duża abym się zmieściła. Stąd odczytanie różnicy napięć z bieżącego i poprzedniego cyklu - skok wartości oznaczający początek jakiejś luki pomiedzy obiektami. Tym samym sposobem koniec tej luki :D

    To mówisz w tym samym przerwaniu odczytać wartość, lub zapisać wartość bieżącą z czujnika do jeszcze jednej zmiennej? może zanim wejdę ponownie w przerwanie to jeszcze ta wartość zostanie jakoś w tej drugiej zmiennej i będę mogła porównać, zanim się uaktualni

    Dodano po 41 [minuty]:

    chyba że zadeklaruje po prostu w przerwaniu od razu prevADC = CurrentResult (czyli wskazanie z czujnika) a dalej w tym przerwaniu będzie sie wykonywał pomiar bieżący, który będzie odczytany jako wynik w programie głównym, a potem po ponownym wejściu do przerwania znów zmienna prevADC nadpisze się tą wartością i nastąpi dalszy pomiar w przerwaniu itd, także uzyskam podtrzymanie poprzedniej wartości do momentu kolejnego wykonania przerwania. To serio byłoby takie proste? xD

    0
  • #7 06 Lut 2016 12:37
    2675900
    Użytkownik usunął konto  
  • #8 06 Lut 2016 12:46
    Natalia02bx
    Poziom 4  

    no właśnie tylko tą zmianę najpierw muszę uchwycić zapamiętując jakoś wartość z ADC o cykl wcześniej i porównując z bieżącym, jeśli w poprzednim cyklu była mniejsza wartość a w bieżącym jest nagle większa to znaczy że nastąpiła zmiana, tylko jak tą poprzednią zapamiętać to nie wiem

    0
  • #9 06 Lut 2016 14:00
    2675900
    Użytkownik usunął konto  
  • #10 11 Lut 2016 16:52
    Natalia02bx
    Poziom 4  

    wracam po krótkiej przerwie. Piotruś dziękuję za odpowiedź :) sęk w tym że wykorzystałam już wszystkie timery procesora i teraz zastanawiam się jak tu zliczyć czas bez timerów, nie wiem czy zwykła inkrementacja zmiennej załatwi sprawę

    0
  • #11 11 Lut 2016 17:19
    dondu
    Moderator Mikrokontrolery Projektowanie

    Wybierasz timer, który Ci pasuje, a który ustawiłaś na stały okres. Ustawiasz przerwanie od przepełnienia tego timera, a w przerwaniu za pomocą lokalnej zmiennej static zliczasz czas i reagujesz wtedy, gdy uznasz za stosowne.

    ... albo kombinujesz jak zwolnić któryś z timerów.

    0
  • #12 11 Lut 2016 21:31
    2675900
    Użytkownik usunął konto  
  • #13 12 Lut 2016 17:12
    Natalia02bx
    Poziom 4  

    hmm no dobra, czyli po prostu mogę w tym samym przerwaniu dać inkrementację zmiennej? A jeśli mam licznik ustawiony w tryb CTC, pracujący z częstotliwością 1kHz i faktycznie przerwanie od przepełnienia, to ta zmienna będzie się inkrementowała z taką właśnie częstotliwością tak? czyli 1kHz=0,001s, więc jeśli chcę odmierzyć 1 sekundę to w programie głównym tą zmienną odczytuję i mnożę przez 1000 aby mieć sekundę, mam rację? :D

    0
  • #14 12 Lut 2016 17:14
    2675900
    Użytkownik usunął konto  
  • #15 12 Lut 2016 18:06
    Natalia02bx
    Poziom 4  

    nie no zaraz, przecież Hz to odwrotność sekundy, więc 1000Hz = (1/1000)s czyli 0,001s. Aby mieć sekunde no to mnożę ten wynik przez 1000, nie dzielę, tylko mnożę :D
    Jak tak zrobiłam to miga mi dioda (test), a jak dzielę to nie miga, podejrzewam że właśnie za 2 tygodnie by mignęła :D
    Nie wiem już sama

    0