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

AVR - Histereza język C - sygnał z ADC

08 Sie 2016 19:00 1641 5
  • Poziom 24  
    Witam.

    Głowie się już cały dzień kombinując w while'ami, pętlami for i nie mogę nic wymyślić.

    Mamy sygnał z ADC.
    Załóżmy, że ADC maleje do momentu osiągnięcia wartości 300. Przyjmijmy, że maleje od 1023.
    W pewnym momencie przechodzi przez 600, ale aktualna wartość trochę "pływa" i czasami przyjmuje wartość 599 potem 601, 598, 610, 598 itp. oscylując wokół magicznej wartości 600. Jeśli podłączylibyśmy przekaźnik i uzależnili jego zmianę stanu od wartości ADC=600 to po prostu trzaskałby przez pewien czas. Jak więc tego uniknąć. Będzie trzeba stworzyć jakiś przedział pewnie... Załóżmy, że jak wartość będzie rosła np. od 0 do 1023 do przekaźnik może włączyć się przy wartości większej niż 600.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Relpol przekaźniki
  • Pomocny post
    Poziom 32  
    Najprościej to tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Relpol przekaźniki
  • Poziom 22  
    Najprościej to po pomiarze określać jeden z 3 stanów:
    < v1 - ustaw stan 1 (np poniżej 500 wyłączony)
    > v2 - ustaw stan 2 (np powyżej 700 włączony)
    pomiędzy v1 i v2 nic nie zmieniaj.
    Wszystko wykonujesz w jednej pętli.
    Teraz tylko ustalasz sobie progi, zapamiętujesz przed pętlą stan bieżący, żeby nie włączać już włączonego i nic stukać nie ma prawa.
  • Poziom 33  
    @mr.Sławek Najprościej? Chyba bardziej zamotać się nie dało. Poza tym używasz niezainicjalizowanej zmiennej.

    Najprościej i najlepiej tak jak napisał @kinggustav, czyli ujmując to w kod, tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    Jeśli musisz wykonać coś zależnie od tego, czy przekaźnik jest włączony dodaj po prostu warunek sprawdzający stan wyjścia.
    ADC dobrze byłoby uśrednić.
    Dodatkowo możesz użyć timera, żeby ograniczyć częstość przełączania przekaźnika.
  • Poziom 32  
    LED5W napisał:
    Poza tym używasz niezainicjalizowanej zmiennej.

    A po co zmienną static inicjalizować skoro domyślnie ma 0.
  • Poziom 33  
    @mr.Sławek Mój błąd, przepraszam.