Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Atmega8 i cyfrowy czujnik dźwięku. Filtracja zakłóceń.

Autor Wiadomość
dejmieno 



Posty: 71
Otrzymał 5 piw(a)
Programuję w:
Java, C
Wysłany: 16-03-2018, 11:29   Atmega8 i cyfrowy czujnik dźwięku. Filtracja zakłóceń.

Witam,

Posiadam taki cyfrowy czujnik dźwięku https://botland.com.pl/mikrofony-i-detektory-dzwieku/6638-czujnik-dzwieku-cyfrowy-5v.html.

Chciałem za jego pomocą zrobić światełka sterowane klaśnięciami jednak na początek chciałem wypróbować działanie czujnika.

Oto mój kod: Ogólnie czujnik działa jednak czasami objawia się niechciane zachowanie w stylu po klaśnięciu w dłonie dioda tylko mignie, włączy się i wyłączy, lub na odwrót.

Podejrzewam, że mikrokontroler wykrywa kilkukrotnie zbocze narastające i przełącza led.

Czy jest jakiś sposób, aby to jakoś odfiltrować, czy muszę się z tym pogodzić?

Kod programu: Zaznacz cały
int main(void) {
    DDRB = 0xFF;
    DDRD = 0x00;

    MCUCR |= (1 << ISC01 | ISC00);
    GICR |= (1 << INT0);

    sei();
    while (1) {
   
    }
}

ISR (INT0_vect) {
        // zmiana stanu led
    PORTB ^= 0x01;
}

Ostatnio popularny » Technika cyfrowa - #2 - algebra Boole’a w praktyce


Ostatnio zmieniony przez dejmieno 16-03-2018, 11:30, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2469
Pomógł: 138 razy
Otrzymał 210 piw(a)
Programuję w:
Python, C, Lua
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 16-03-2018, 11:41   

Możesz zrobić debouncing.

Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 71
Otrzymał 5 piw(a)
Programuję w:
Java, C
Wysłany: 16-03-2018, 12:30   

Aha, potraktować to jak drgania styków w przyciskach.

Rozumiem, że proste rozwiązanie programowe, żeby odczekać kilka ms aż zakłócenia ustaną odpada, ponieważ _delay_ms nie ma wpływu na przerwania?

Czyli pozostaje filtr RC.

Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2469
Pomógł: 138 razy
Otrzymał 210 piw(a)
Programuję w:
Python, C, Lua
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 16-03-2018, 12:49   

Zapamiętujesz w przerwaniu czas kiedy ostatnio było przełączenie i na początku sprawdzasz czy nie było bliżej niż zadany czas, jeśli tak, to wychodzisz nie robiąc nic.

Do tego oczywiście potrzebujesz jakiś timer liczący czas, jak Arduinowe millis().

Ostatnio popularny » Dni Druku 3D - Kielce, 11-12.03.2015


Ostatnio zmieniony przez deshipu 16-03-2018, 12:50, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 71
Otrzymał 5 piw(a)
Programuję w:
Java, C
Wysłany: 17-03-2018, 16:44   

Dzięki za pomoc. Ostatecznie zrobiłem filtr RC i wszystko śmiga.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: [C] Sterowanie serwo... Funkcja "CONFIG... JTAG dla procesora A... Polski opis Fusebitó...
lub przeszukaj forum po wybranych tagach: atmega8, cyfrowy, czujnik, dzwieku., filtracja, zaklocen.


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki