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

[C] Jak uśrednić wyniki ADC na ATmega 16 dla stabilnych pomiarów napięcia?

Krzysiek_k1984 08 Maj 2008 21:57 4318 3
REKLAMA
  • #1 5120823
    Krzysiek_k1984
    Poziom 13  
    Posty: 127
    Pomógł: 4
    Ocena: 1
    Witam.

    Napisałem program, który mierzy napięcie na kanale 0 i 1. Niestety wynik nie jest stabilny. Skacze o ok 0,5V. Podłączyłem zewnętrzne napięcie odniesienia (LM336-5.0) i dodatkowo kondensator 100nF pomiędzy AVcc i GND. Przerabianie układu raczej nie wchodzi w grę:/ Zastanawiam sie nad tym w jaki sposób napisać program, który powiedzmy zmierzy 4 razy daną wartość i dopiero po uśrednieniu wyrzuci ją na wyświetlacz. Z góry dzięki wszystkim za pomoc :)
  • REKLAMA
  • #2 5120861
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Krzysiek_k1984 napisał:
    Zastanawiam sie nad tym w jaki sposób napisać program, który powiedzmy zmierzy 4 razy daną wartość i dopiero po uśrednieniu wyrzuci ją na wyświetlacz.

    napisz go tak, zeby powiedzmy zmierzyl 4 razy dana wartosc i dopiero po usrednieniu wyrzucil ja na wyswietlacz.

    zadaj konkretne pytanie, to otrzymasz konkretna odpowiedz

    0x41 0x56 0x45!!
  • REKLAMA
  • Pomocny post
    #3 5120877
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    WItam.

    Możlwości uśredniania czy po prostu cyfrowej filtracji sygnału może być kilka.
    Najprostrza to taka jak napisałeś - zbierasz kilka próbek pomiaru a następnie je uśredniasz. Może to wyglądać np tak:

    unsigned int pomiar;
    unsigned int usredniony_pomiar;
    unsigned char pomiar_licznik;
    
    
    
    
    static unsigned int temp;
    pomiar = ADC;      // pobranie wartosci pomiaru z rejestru ADC
    
    temp+= pomiar ;
    pomiar_licznik++;
    if(pomiar_licznik == 4)
    {
    
       usredniony_pomiar = temp / pomiar_licznik;   // zmienna przechowuje usredniony pomiar
       temp = 0;
       pomiar_licznik = 0; 
    }
    



    W bardziej rozbudowanej wersji można zapamietywac próbki "w stecz" w jakiejs tablicy i na bierzaca je usredniac z aktualną wartością przez co nie tracimy na predkosci odczytu, oczywiscie maleje "dynamika" tak usrednianego sygnalu.
  • #4 5120970
    Krzysiek_k1984
    Poziom 13  
    Posty: 127
    Pomógł: 4
    Ocena: 1
    Akurat na dynamice mi nie zależy :) W moim przypadku najważniejsza jest dokładność. Dzięki Adamusx za tak szybką pomoc :D
REKLAMA