Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32F4 Discovery. wyzwalanie przetwornika ADC timerem

kolton 12 Lip 2012 14:02 3311 9
  • #1 12 Lip 2012 14:02
    kolton
    Poziom 16  

    Witam,
    chciał bym zrobić prosty filtr cyfrowy oparty na stm32F4 Discovery, częstotliwość próbkowania ustalana była by za pomocą jednego z timerów w tym przypadku TIM1 (oczywiście może być inny). Niestety mam problem z ustawieniem wyzwalania przetwornika ADC1 przy pomocy timera TIM1. Poniżej przesyłam kod programu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    kod przerwań:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    W kodzie którym przesłałem można wyzwalać przetwornik ADC w podprogramie obsługi przerwań timera1 TIM1_CC_IRQHandler, używając funkcji
    Kod: c
    Zaloguj się, aby zobaczyć kod

    wolal bym jednak zrobić to wyzwalanie sprzętowo , czy jest taka możliwość ??, wiem że z przetwornikiem DAC jest to możliwe.
    Pozdrawiam Wojtek

    0 9
  • Pomocny post
    #2 12 Lip 2012 14:16
    stanleysts
    Poziom 27  

    ktoś już chyba dziś o to pytał tylko nie wiem czy o F4 też mu chodziło

    0
  • #4 12 Lip 2012 18:24
    kolton
    Poziom 16  

    Witam wielkie dzięki za wskazanie drogi :), niestety pojawił się dość dziwny problem.
    Dodałem do kodu następujące linijki:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    które kolejno włączają przetwornik ADC oraz ustawiają pole EXTEN rejestru CR2 na wartość "01" (). Niestety jak włączam Debuger w Atollic TrueStudio i podgląd rejestrów, to nie ulegają one zmianie :?: wiecie może dlaczego ??

    0
  • #5 12 Lip 2012 20:31
    LordBlick
    VIP Zasłużony dla elektroda

    Reference Manual s. 216 Hint : EXTSEL

    kolton napisał:
    Niestety jak włączam Debuger [...] podgląd rejestrów, to nie ulegają one zmianie
    Spróbuj ADC zamiast ADC1. Akurat nie mam dostępu do nagłówka STM32F4XX, więc tylko strzelam patrząc w manuala - nie są w nim numerowane...

    0
  • #6 12 Lip 2012 20:36
    kolton
    Poziom 16  

    Hej, niestety zamian na ADC powoduje błąd kompilacji:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    także musi być ADC1

    0
  • #8 12 Lip 2012 22:05
    kolton
    Poziom 16  

    Proszę :)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    asembler tego kawałka wygląda tak :
    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Dodano po 27 [minuty]:

    Jeśli chodzi o optymalizacje to jest ustawiona na "None (-O0)"

    0
  • #9 12 Lip 2012 22:23
    LordBlick
    VIP Zasłużony dla elektroda

    No z ta optymalizacją, to nawet w asm widać. Kod wygląda w porządku. Raczej coś z debugowaniem lub linkowaniem lub programowaniem.

    0
  • #10 08 Sie 2012 14:26
    kolton
    Poziom 16  

    Witam,
    przepraszam że tak późno odpisuje, ale wakacje są :)
    Jeśli chodzi o układzik to już wszystko działa. Problem tkwił w niewłączonym zegarze APB1 dla przetwornika DAC-a :D
    poniżej przesyłam kod dla przetwornika DAC oraz ADC wyzwalanego licznikiem TIM3, częstotliwość próbkowania można zmienić za pomocą makra periodd. Dodatkowo TIM3 generuje PWM-a.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz kod zakończenia przetwarzania przetwornika. Realizowany jest tutaj filtr różniczkujący:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Za wszelkie błędy i niejasności w kodzie z góry przepraszam. Co do filtru, łatwo można go zmienić, generując wsp. filtru h[N] np. w Matlabie i ewentualnie pozbywając się składowej stałej na wyjściu (2047.0)

    0