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 31 maja 2025, o 18:58


    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 ] [ Zaznacz wszystko ]
    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 0 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