Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 lip 2025, o 11:46


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 26 maja 2016, o 13:30 
    Offline
    Użytkownik

    Dołączył(a): 09 kwi 2015
    Posty: 44
    Pomógł: 0

    Witam, pracuje nad pewnym projektem. posiadam 4 mikrofony (teraz testuje "aby dwa" :) )
    Program polega na tym że na 4 kanałach ADC1 robie pomiar z tych oto mikrofonów. Następnie porównuje ( a przynajmniej sie staram ) te mikro i zapalam odpowiednią diodke :) (Symulacja uruchomienia silników)
    Podsumowąjąc wstęp: robot bedzie sie miał poruszać za źródłem dzwięku.

    I tu mam problem bo pomimo że odpaliłem ADC na 4 kanały i teoretycznie to mi działa. Potem sprawdzam jeden mikrofon czy coś tam sie pojawiło i pasuje, ale gdy dopisuje warunek odnośnie drugiego mikro to wgl nie reaguje na ten drugi mikrofon. tylko na pierwszy..

    Zapewne robie jakiś kardynalny błąd w warunku, ale za grosz nie wiem jaki :)

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    i konfiguracja ADC:
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Ma ktoś jakiś pomysł jak to rozwiązać żeby ten drugi też zadziałał??

    Odczyt w debugerze z ADC to ok 2030 (12bit ADC)
    Moja płytka to STM32F4 Discovery.

    Pozdrawiam i błagam o pomoc :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 maja 2016, o 21:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 sie 2013
    Posty: 230
    Lokalizacja: Zabrze
    Pomógł: 17

    Nie wiem jak deklarujesz zmienną licznik. Powinna być volatile.

    _________________
    40-32:2=4!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 maja 2016, o 21:46 
    Offline
    Użytkownik

    Dołączył(a): 09 kwi 2015
    Posty: 44
    Pomógł: 0

    jest jest :) bardziej chodzi mi o to jak programistycznie rozwiązać badanie 4 mikrofonów i wybieranie na którym sygnał jest najmocniejszy :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2016, o 07:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1978
    Lokalizacja: Lipsko
    Pomógł: 125

    Najpierw wyłap wszystkie sygnały (najlepiej uśrdnione), umieść w dodatkowych zmiennych i dopiero rób porównania.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2016, o 13:40 
    Offline
    Użytkownik

    Dołączył(a): 09 kwi 2015
    Posty: 44
    Pomógł: 0

    Zakładam że żeby uśrednić to muszę wykonać filtr górno i dolno przepustowy. Ale w sumie nie wiem jak taki zrobić.. Mógłby mi ktoś pomóc, podesłać materiały jak zrobić taki filotr programowo?
    W tym projekcie ADC działa ciągle. Więc wartości zmieniają się cały czas. więc pytanie czy takie filtrowanie coś mi pomoże ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2016, o 20:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Tak sobie myślę.
    ARM jest mi obcy, CPP także, ale..
    Chodzi mi o samo podejście.
    Tak jak kolega "SylwekK" podpowiada.

    SylwekK napisał(a):
    Najpierw wyłap wszystkie sygnały (najlepiej uśrdnione), umieść w dodatkowych zmiennych i dopiero rób porównania.


    tzn. tam gdzie zapisujesz czytane wartości z adc użyłeś timera. - chyba że źle rozszyfrowałem.-
    Zorganizuj sobie tak program by zapisywał odczyty z adc np.

    pomiar_1_mik_1, pomiar_1_mik_2, pomiar_1_mik_3,
    cd. programu.

    obliczenia średnich.

    następnym razem:
    pomiar_2_mik_1, pomiar_2_mik_2, pomiar_2_mik_3,

    obliczenia średnich.
    itd.

    dla-- 1_mik: pomiar_1_mik_1 dodać pomiar_2_mik_1, i podzielić przez ilość do uśrednienia. czyli tutaj: 2 ._ to by była pierwsza uśredniona wartość, którą będziesz potem sobie przyrównywał.
    dla-- 2_mik: pomiar_1_mik_2 dodać pomiar_2_mik_2, i podzielić przez ilość do uśrednienia. czyli tutaj: 2 ._.......druga....
    itd.
    może wykorzystać inny sposób zapisu np. tablicę.
    potem odczytujesz wartości zmiennych "uśrednionych", które obliczysz w kodzie :
    dodając i dzieląc ( jak w matmie).

    ( myślę że to o uśrednianie w tym stylu chodzi.)-, a nie o filtrowanie górno i dolno przepustowe. tak mi się wydaje.

    Chociaż można by pomyśleć o czymś jakby stabilizator, do zmniejszenia hmm.. 'szpilek' adc dźwięku,
    poprzez może dodanie kondka, który będzie pompowany sygnałem z mikrofonu, i filtrowany dławikiem przed adc. coś jak zasilanie AVCC, by zmniejszyć dynamikę skoków napięcia z mikrofonów.
    hm... no chyba że to ma śledzić muchę w locie. to może być problem z tempem odczytu.

    (czy to zda egzamin, tego nie wiem - to tylko taka myśl, którą bym sprawdzał na początku, bo prosta do przetestowania.)

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 cze 2016, o 10:55 
    Offline
    Użytkownik

    Dołączył(a): 09 kwi 2015
    Posty: 44
    Pomógł: 0

    Ale jeżeli mikrofony są aktywne cały czas, to czy mogę sobie to uśredniać w ten sposób i nie będę miał opóźnień ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 cze 2016, o 12:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1978
    Lokalizacja: Lipsko
    Pomógł: 125

    Cała ta operacja zbierania danych nie będzie trwała dłużej jak kilka ms - myślę, że nawet tego nie odczujesz. Uśrednianie można robić conajmniej na kilka sposobów i jaki wybierzesz zależy od ciebie

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 cze 2016, o 12:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Kod który napisałeś, pracuje tysiące razy na sekundę.
    Pomyśl ile razy w ciągu tej sekundy jest sprawdzany poziom napięcia.
    Opóźnienie ?.
    Właśnie się staramy wyliczać średnią, po każdym pomiarze aktualizującym jeden z naszych przykładowych trzech pomiarów z mikrofonu.
    jeszcze raz:

    pomiar 1 mik 1
    pomiar 1 mik 2
    pomiar 1 mik 3

    srednia z pom. 1, 2, 3...(dla mik. 1 i dla mik. 2 i dla mik 3)
    ...
    cd Twojego programu ...
    i pętla się powtarza, ale przypisując pomiary do następnych zmiennych.( czyli musisz tak napisać tę część programu, żeby w następnym obiegu zapisywał do zmiennej reprezentującej kolejny pomiar tego mikrofonu, a po zakończeniu zapisu na ostatniej, zaczynał od nowa)
    średnią niech wylicza za każdym zakończeniem serii pomiarów dla wszystkich mikrofonów.

    pomiar 2 mik 1
    pomiar 2 mik 2
    pomiar 2 mik 3

    srednia z pom. 1, 2, 3...(dla mik. 1 i dla mik. 2 i dla mik 3)
    ...

    pomiar 3 mik 1
    pomiar 3 mik 2
    pomiar 3 mik 3

    srednia z pom. 1, 2, 3...(dla mik. 1 i dla mik. 2 i dla mik 3)
    ...
    Tak ja to widzę, ale może ktoś ma lepszy pomysł.

    aaa.. nadpisałem post kolegi :) sorka.
    szybciej piszecie niż ja :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO