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



Teraz jest 7 sty 2025, o 05:48


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 ]
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: 1967
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: 1967
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 4 gości


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO