Skocz do zawartości

padus

Użytkownicy
  • Zawartość

    17
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

padus zajął 1. miejsce w rankingu.
Data osiągnięcia: 30 lipca 2021.

Treści użytkownika padus zdobyły tego dnia najwięcej polubień!

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

padus's Achievements

2/10

2/10 (2/10)

8

Reputacja

  1. Udało się. Zastosowałem dodatkowo jeden scalak za 50 groszy i działa. Tutaj jest film pokazujący jak działa układ przy zwolnionym zegarze. Wszystko dzieje się sprzętowo. Wykorzystuję dwa kanały licznika TIM3 w trybie PWM. Jedyne linie kodu to: HAL_TIM_Base_Start_IT(&htim3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); Reszta to ustawienia w CubeMX. Dodatkowy scalak to 74HC00, który robi prosty dekoder.
  2. Drążę temat, ale wcale nie jest to takie proste. Aby nie zaśmiecać tego forum założyłem osobny temat tutaj
  3. Potrzebuję zrobić potrójną barierę podczerwoną. Mniej więcej wygląda to tak: cała płytka: D2, D3, D4 to potrójny nadajnik podczerwieni, częstotliwość nośna 38kHz. Trzy odbiorniki podczerwieni: Piny RX1, RX2 oraz RX3 są analizowane przez mikrokontroler i załączają silnik 24DC. Komplet obejmuje zasilacz 24/4 DC, sterowanie na atmega328p oraz płytkę z podczerwienią: Jest to wersja 4.0a więc przerabiałem już dużo innych opcji w stylu czujniki odbiciowe, pojedynczy tor itd. i obecne rozwiązanie wydaje się w pełni sprostać moim wymaganiom. W tej chwili działa to tak, że na raz świecą 3 diody LED. Do generowania impulsów jest używany poczciwy '555. Czujniki jak "widzą" diody to mają wyjścia ustawione na zero, jeżeli jakiś obiekt je zasłania to wtedy mam jedynkę. Wszystko działa jak należy ale przerobiłem właśnie kurs z nukleo STM32L476RG i zastanawiam się nad tym czy w ramach testu nie zagonić do tego STM32. Znalazłem taki całkiem sympatyczny układ za 8zł i postaram się to na nim ruszyć. Chciałbym zlikwidować płytkę z atmega328p oraz '555 i całe sterowanie wsadzić do STM32. I tutaj mam dylemat. Chcę sterować diodami na zasadzie multipleksowania, tzn. na raz świeci tylko jedna dioda. Coś jak na poniższym rysunku: Mam taki pomysł aby utworzyć tabelę typu: static const uint16_t init_table[] = { 0x01, //led1 0x00, //przerwa 0x02, //led2 0x00, //przerwa 0x04, //led3 0x00, //przerwa }; i zagonić DMA aby cyklicznie wyrzucał to na port. Próbowałem to zrobić tak: - uruchomiłem TIM - dla danego TIM uruchomiłem DMA - wyłączyłem przerwania od DMA - ustawiłem kierunek Memory to peripheral No i teraz muszę podać adres bufora, 6 danych i gdzie to ma być wysyłane, tylko nie mam pojęcia jak to zrobić i czy się da ?
  4. Dobrnąłem do ostatniej lekcji i musze przyznać, że bardzo dużo się nauczyłem. Odpowiedzi na forum, na pytania które zadawałem praktycznie pojawiały się natychmiast. Poszczególne części kursu super zrobione, praktycznie wszystko dopracowane. Wykonaliście olbrzymią robotę. Powoli będę odstawiał atmega328p, STM32L4 to naprawdę fajna sprawa. Nic dodać, nic ująć - pozostaje mi tylko się pod tym podpisać. Mam rozgrzebaną płytkę od automatycznego czyścika do grotów na atmega. Chyba przerobię ją na STM32L - ot taki mały test tego czego się tu dowiedziałem.
  5. Jak zwykle, kolejny ciekawy odcinek. Elvis napisał: Bardzo cenna wskazówka, ale zastanawiam się nad trochę innym zagadnieniem. Załóżmy, że potrzebuję tor podczerwieni typu nadajnik 38kHz i odbiornik. Żadna modulacja nie jest mi potrzebna. Po prostu jeżeli nadajnik widzi odbiornik to na jego wyjściu jest zero logiczne. Jeżeli jakiś przedmiot zasłania odbiornik to na jego wyjściu jest jedynka logiczna. Do takiego nadawania mogę ustawić sprzętowy TIM w trybie PWM z odpowiednią częstotliwością. Wszystko wtedy powinno śmigać. Na podstawie poprzednich części kursu powinienem sobie poradzić. Zależy mi na odbiorniku takim jak w kursie ponieważ takie urządzenie jest dosyć odporne na różne zakłócenia. Ale teraz ten problem niestety jest bardziej złożony, otóż co zrobić jeżeli potrzebuję potrójny tor podczerwieni, tzn. niezależne 3 nadajniki i 3 odbiorniki umieszczone obok siebie. Taką po prostu potrójną kurtynę podczerwieni. Ze względu na oszczędność energii na raz może świecić tylko jeden tor, później drugi i na końcu trzeci. Oczywiście mogę zrobić generowanie sprzętowe nośnej na trzech TIM, ale czy nie da się jakoś prościej? Np. na jednym?
  6. padus

    Kurs STM32L4 - USB

    Dokładnie o to mi chodziło. Dzięki.
  7. Wkradł się drobny błąd. Przy podłączeniu wyświetlacza 7 seg. jest napisane: Wszystkie piny, do których podłączyliśmy wyświetlacz, konfigurujemy jako wejścia, powinno być: konfigurujemy jako wyjścia Przy wzmacniaczu operacyjnym miałem trochę kłopotów z błędami kompilacji ale w końcu wszystko ruszyło. Powtórka z timerów fajnie zrobiona.
  8. Prosto, zwięźle i na temat. Dzięki za odpowiedź. Czy autorzy przewidują w tym kursie odcinek dotyczący portu USB? Chodzi mi o to, że chciałbym się podłączyć do procesora nie poprzez przejściówkę i USART2 ale bezpośrednio poprzez USB. Nigdy tego nie robiłem, podejrzewam, że jest jakaś biblioteka na procesor oraz sterowniki do PC z wirtualnym COM'em.
  9. Jak zwykle - kolejny ciekawy fragment możliwości zestawu. Mam pytanie co do koprocesora matematycznego. Otóż w kursie jest napisane: Jak to naprawdę się odbywa. Kiedy załącza się ów koprocesor? Czy przy każdej operacji na liczbach zmiennoprzecinkowych czy dopiero po dodaniu deklaracji typu #include <math.h>?
  10. Bardzo fajny kawałek kursu. Utworzenie własnej biblioteki krok po kroku, no i wykorzystanie innej z własnymi funkcjami - super sprawa.
  11. Doszedłem do 10 części i zaczynam doceniać jakie możliwości dają nam procesory STM32. Faktycznie peryferia rozbudowane praktycznie pod każde rozwiązanie. Zrobiłem też quiz ale zabrakło mi czasu na dwa ostatnie pytania. Nie wiem jak inni użytkownicy ale przy normalnym czytaniu ze zrozumieniem bez potwornego pędu przydało by się jeszcze dodatkowe 30 sek.
  12. Właśnie skończyłem walkę ze sprzętowym uruchomieniem enkodera. Oczywiście mam wersję enkodera, która na każde kliknięcie daje dwa impulsy. Siedziałem trochę nad tym ale udało mi się znaleźć rozwiązanie, które chciałem opisać. W momencie kiedy się zalogowałem na forum to zobaczyłem, że to nie tylko mój problem. Zrobiło mi się trochę lżej. Postaram się omówić jak ja to zrobiłem. Po pierwsze chylę czoła przed autorami kursu bo opisują trudne sprawy w miarę łatwy sposób, wielkie dzięki. Po drugie literówka w opisie pod fragmentem Tryb obsługi enkoderów w STM32L4: ....., a następnie opcję Combined Channels ustawiamy na Enoder Mode...... winno być Encoder Mode Teraz enkoder: 1) Filtrowanie cyfrowe daje u mnie mizerne efekty, w przeciwieństwie do filtrowania analogowego. Nie upieram się, prawdopodobnie u mnie w laboratorium jest mnóstwo zakłóceń. Obejrzałem pierwszą lepszą notę katalogową i nawet producent zaleca filtr RC taki jak jest podany w kursie. Sprawdziłem. Bez filtru praktycznie enkoder głupiał. Przy kręceniu w jedną stronę miałem takie wartości: Załączony filtr cyfrowy A tutaj filtr analogowy i zakres 25 impulsów 2) Teraz ustawienia, które u mnie działają jak trzeba, tzn. każdy klik to jeden impuls (zakres Counter Period ustawiony na 40 impulsów z przepełnieniem, wartości tylko dodatnie). Oczywiście oba sygnały filtrowane analogowo. 3) Ustawienia dla wartości dodatnich i ujemnych 4) Jeszcze chciałbym się zatrzymać przy ustawieniach zakresu (Counter Period). Z tego co zauważyłem to wartość jest 16-to bitowa. Obsługiwane są wartości ujemne czyli mamy 15 bitów na liczbę + znak. Jeżeli wpiszemy wartość poniżej 65536/2 to mamy zakres liczb dodatnich z przepełnieniem. Powyżej tej wartości program przelicza i można się trochę zdziwić jak to wygląda: ustawienie 35000 ale już przy wartości 30000 jest ok
  13. Posiedziałem trochę czasu nad tymi przerwaniami. Opis mi się podoba, wszystko czytelne. Niemniej sposób obsługi mocno rozbudowany. I mam dwa zasadnicze pytania: Pierwsze z nich: Do przycisku mamy aż trzy funkcje, które wywołane są po kolei: 1) void EXTI15_10_IRQHandler(void); 2) void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); 3) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); Dopiero w tej ostatniej HAL_GPIO_EXTI_Callback() wstawiamy swoją funkcję. Rozumiem, że tak się to robi i tego mam się trzymać? Tzn. jeżeli wstawię kod od razu w pierwszej z nich EXTI15_10_IRQHandler() to nie będzie zbyt eleganckie? Drugie pytanie: Załóżmy, że nie wstawię w kodzie HAL_GPIO_EXTI_Callback(), dlaczego kompilator się nie buntuje, że jej nie ma? Czy jest ona gdzieś zaszyta np. z parametrem "weak" podobnie jak __io_putchar()?
  14. Długo się zabierałem za tą część kursu, ale warto było. Fajnie opisane i wszystko jasne. W opisie chyba jest literówka. W sekcji PCC – rozbudowany kalkulator zużycia energii, 4 linie poniżej jest wyjaśniony skrót PPC (Power Consumption Calculator), chyba powinno być PCC (Power Consumption Calculator).
×
×
  • 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.