Skocz do zawartości
Vroobee

[STM32F1] Przerwanie EXTI - losowa reakcja

Pomocna odpowiedź

Witam!
Pewnie problem na zasadzie początkującego użytkownika STM32 ale co poradzę - wystąpił ! 🙂 Mianowicie, mam podłączone 3 przyciski do STM32F103CBT6, przyciski podłączone z rezystorem pull-up i poprzez kondensator filtrujący. W procesorze włączony również pull-up na wejściu od przycisku. Reakcja na wciśnięcie (zbocze opadające) miała być uruchamiana z wykorzystaniem przerwań zewnętrznych. I tu pojawia się problem bo o ile program nie zajmuje się czymś innym albo tylko jakimiś drobnymi rzeczami to wszystko jest w porządku - reakcja następuje od razu. Jeśli tylko zacznę np. więcej rzeczy wyświetlać na OLEDzie to reakcja następuje losowo. Wszystkie przerwania mają priorytety i grupy ustawione na 0. 

Dodam, że sprawdzałem na oscyloskopie czy występują jakiekolwiek drgania styków - zbocze opadające jest gładziutkie, nie ma możliwości, ze tu coś jest nie halo. Program pisany w HALu tak jak w kursie Forbota. Jeśli będzie potrzeba to dodam listing. Dodatkowo również w ten sam sposób uruchomione są przerwania z zewnętrznego urządzenia i tam wszystko śmiga, no a na przyciskach nie chce - ciekawe.

Proszę o jakieś sugestie co to może być, czy ktoś się z czymś spotkał.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Co to znaczy "losowo"?

A jak szybkie jest to "gładziutkie" zbocze opadające? Ząbków w okolicach progu przełączania na jakie może zareagować wejście możesz na osyloskopie nie zauważyć. Jeżeli zbocze poprawnego sygnału cyfrowego,ma powiedzmy 5ns to w tym czasie nic się nie może wydarzyć. W Twoim przypadku, gdy rampa z powodu filtra RC ma np. milisekundę to  przejście przez krytyczny zakres napięć bufora wejściowego może trwać np. 20us a w tym czasie może zostać rozpoznanych i zgłoszonych np. 5 albo 17 zboczy interpretowanych jako przerwania.

EDIT: Jeżeli masz gdzieś w szufladzie jakiś bufor z wejściem Schmitta, np. 74HC14 lub 74HC132 lub 74LVC2G17... to wstaw go między filtr RC a wejście procka i sprawdź czy sytuacja się poprawiła. Nawet jeśli od ręki nie dysponujesz takim scalakiem, możesz taki dyskryminator śmieci zrobić z dwóch głupich inwerterów typu 74HC04 lub dwóch jakichkolwiek innych bramek odwracających np. 74HC00, 74HC02, 74HC86 itp i dwóch oporników.

Edytowano przez marek1707
  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Losowo tzn. że nie za każdym wciśnięciem przerwanie zadziała w przypadku jeśli pętla while ma dość sporo instrukcji np. wyświetlania na wyswietlaczu graficznym. Jeśli instrukcji jest niewiele to wszystko działa jak powinno. Z bramkami logicznymi będzie problem bo żadnego układu który @marek1707 zaproponowałeś aktualnie nie posiadam 😔 

Może jakoś programowo rozwiązać eliminacje drgań styków ? O ile dla SPL znalazłem fajne sposoby tak dla HAL nie mam pojęcia jak się za to zabrać, ze względu na trochę inaczej wyglądające instrukcje chociażby dla zegara (albo tak mi się tylko wydaje). Wolałbym rozwiązać to programowo bo płytka już jest wykonana. W kolejnej wersji pewnie uwzględnię jakiś bufor na przyciski.

Udostępnij ten post


Link to post
Share on other sites

Programowo to proste: nie reagujesz na zmianę stanu przycisku jeśli wystąpiła mniej niż n milisekund od tej, na którą zareagowałeś (taka bezpieczna wartość n to 100).

Udostępnij ten post


Link to post
Share on other sites

Okej więc sprawa wygląda trochę głupio bo w instrukcji obsługi przerwania zamieściłem funkcję wypisywania wyniku na OLEDzie po SPI. Program za każdym razem wchodził w przerwanie i wszystko grało. Ale widocznie taka funkcja wysyłania danych po SPI w przerwaniu to dla niego za dużo 🙂

Temat w sumie do zamknięcia bo sprawa się rozwiązała. Wszystko działa.

Udostępnij ten post


Link to post
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!

Gość
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...