Skocz do zawartości

Kurs STM32L4 – #9 – przetworniki analogowo-cyfrowe (ADC)


Pomocna odpowiedź

Na początek małe wyjaśnienie - w przypadku odczytu więcej niż jednego kanału zalecane jest używanie DMA, co pokazujemy w kolejnym ćwiczeniu. Używanie wielu kanałów w trybie odpytywania (ang. polling) miało na celu jedynie ułatwić zrozumienie przejścia od prostego odczytu jednej wartości do nieco bardziej skomplikowanego trybu z użyciem DMA.

Problem z użyciem funkcji printf() wynika z opóźnienia które ona wprowadza. Konwerter analogowo-cyfrowy ma tylko jeden sprzętowy rejestr, w którym może zapisywać wyniki. Ponieważ używamy trybu scan, więc odczytane zostaną 2 kanały i program musi je odczytać "na czas", inaczej wyniki zostaną nadpisane kolejnymi. W przypadku DMA nie ma problemu, bo sprzęt kopiuje kolejne wyniki do pamięci RAM i program nie musi się tym przejmować.

Aby sprawdzić, że przyczyną problemu jest opóźnienie, a nie wywołanie printf, można je zastąpić opóźnieniem, czyli np. HAL_Delay. Efekt powinien być ten sam.

A przy okazji - niepotrzebne jest ponowne wywołanie HAL_ADC_Start(). W kursie chyba zostało jako pozostałość po kopiuj-wklej 😞 (linia 13, więc ma prawo być pechowa).

 

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

2 godziny temu, Elvis napisał:

A przy okazji - niepotrzebne jest ponowne wywołanie HAL_ADC_Start(). W kursie chyba zostało jako pozostałość po kopiuj-wklej 😞

Poprawiłem na blogu 🚀

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Hej ja mam taki problem:

Mam ustawione czytanie napięć z dwóch potencjometrów, i przy ustawieniu 2 kanałów

wisi mi na drugim HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); <------ linijka 119

image.thumb.png.42fe977053a2099e5c35f9e8a57b8bb6.png

image.thumb.png.072d06769521fd6fb6056f943e9c53d4.png

A w srodku tej funkcji wisi na takiej pętli i chyba czeka na podniesienie flagi zakońńczenia konwersji:
image.thumb.png.0a848791a902e1eb78e54e7989745ee3.png

Link do komentarza
Share on other sites

41 minut temu, Treker napisał:

@dudoxx w ramach formalności daj tylko znać czy odtwarzasz dokładnie taki sam przykład jak jest w kursie (konfiguracja i kod), czy zmieniłeś coś względem przykładu?

Używam UARTA1 jako moduł USB (zamiast uarta2 przez programator) , ale próbowałem również 1 do 1 z kursu i nie trybi tak samo. Oba potencjometyry działają osobno oraz kanał 1 i 2 na ADC1 również działa osobno. Problem jest dopiero przy próbie ustawienia dwóch

Link do komentarza
Share on other sites

11 minut temu, Elvis napisał:

@dudoxx Której wersji CubeHAL używasz? Próbowałeś dodać HAL_ADC_Start() przed drugim wywołaniem HAL_ADC_PollForConversion() ?

Sprawdzę w pracy ale prawdopodobnie najnowszej bo ściągałem IDE z cubemx tydzień temu. Próbowałem drugie wywołanie ale nie pomaga. Zauważyłem że jak zbierasz z jednego kanału to nie musisz mieć nawet pod pin nic podpięte i wejście analogowe głupoty z powietrza zbiera. Jak ustawisz dwa kanały to nawet przed podłączeniem już zawiesza na tej drugiej funkcji. 

Link do komentarza
Share on other sites

Dnia 20.01.2023 o 13:18, dudoxx napisał:

Z jakiegoś powodu opcja
image.thumb.png.751a8e77311ce52422f720e3fd9e480d.png

powoduje że wszystko działa jak należy 😐

Oo, właśnie dzięki za wpis. Miałem ten sam błąd i opcja 'Low Pawer Auto Wait' - zadziałała. Pytanie dlaczego.

Link do komentarza
Share on other sites

Mam problem z wykonaniem ćwiczenia z wykresami w STM Studio- wygląda na to, że program jest w wersji tylko na Windowsa, ja używam Mac OS-a więc nie za bardzo mam jak to zrobić. Czy istnieje jakaś możliwość wykonania tego na macu, czy mam odpuścić/zrobić na innym komputerze?

Edytowano przez StefanekP
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.