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



Teraz jest 19 kwi 2024, o 07:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 20 maja 2018, o 07:11 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Robię filtry cyfrowe na nucleo F410 i w zależności od rzędu filtru (ilości operacji do wykonania), uzyskuję różne szybkości próbkowania. ADC mam ustawione "na maksa" i w while'u po prostu pobiera próbkę, wykonuje obliczenia i wynik podaje na DAC.
Czy dobrze rozumiem, że aby uzyskać stałe szybkości niezależnie od rzędu filtru, muszę użyć timera i ADC wyzwalać jakimś przerwaniem od niego? Czy potrzebne jest też DMA, czy też ono nic tu nie polepszyć?
Chciałem prosić o nakierowanie, jak to zrobić, gdyż w przerwaniach i DMA jestem zielony.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2018, o 08:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 35
Pomógł: 4

Jeżeli odczytujesz więcej niż jeden kanał adc to użycie timera i DMA do celów adc jest mega wygodnym rozwiązaniem. Wyzwalanie adc ustawiasz od timera, DMA po skończonym przetwarzaniu prześle wartości do tablicy. Przerwanie od zakończonej transakcji DMA możesz wykorzystać. Robiłem dokładnie takie coś i wrzucę jak znajdę kody.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2018, o 13:03 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Wykorzystuję jeden kanał ADC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2018, o 16:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 35
Pomógł: 4

W takim razie DMA jest w tym momencie zbędne.

Do wyzwalania ADC można użyć TIM1 albo TIM5 (jest na stronie 215 w reference manual)

Obrazek

W rejestrze ADC_CR2 odpowiedzialnym za wybór wyzwolenia są bity EXTSEL[3:0].

Do odczytu wartości ADC użyłbym przerwania ADC_EOC (bit EOCIE w rejestrze ADC_CR1).

Nie mogę znaleźć swoich starych kodów, wieczorem postaram się coś napisać. Osobiście nie używałem bibliotek SPL.

Pisałeś już jakąś obsługę jakiegokolwiek przerwania w stm32?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2018, o 16:36 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

No właśnie przerwań nigdy nie robiłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2018, o 13:08 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Udało się może znaleźć ten kod?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2018, o 17:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 35
Pomógł: 4

Niestety nie, wrzucam jednak inicjalizację timera5 oraz jego przerwanie, okres przerwania jest ustawiony na 100us.

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2018, o 18:49 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Dzięki. A wiadomo, skąd w obliczeniach wzięło się 84 oraz dlaczego z 42-1 zrobiło się 41+1?



Ostatnio edytowano 25 maja 2018, o 07:12 przez radek04, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2018, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 35
Pomógł: 4

Ja mam ustawione taktowanie zegara APB1 na 84MHz stąt 84 * 10^6, 42-1 to ja sobie tak to zapisuję bo PSC w TIM zawsze jest +1 (stąd 41+1).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2018, o 07:15 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Ok, dzięki. A ten preskaler (wartość zaliczania domyślam się, że tak) to jest dowolny, czy tylko konkretne wartości przyjmuje?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2018, o 17:04 
Offline
Użytkownik

Dołączył(a): 31 mar 2017
Posty: 156
Pomógł: 0

Niestety kod u mnie nie działa. Kod z przerwania się nie wykonuje.



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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO