Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    2764
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    210

Elvis zajął 1. miejsce w rankingu.
Data osiągnięcia: 6 lipca.

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

Reputacja

1397 Mistrz

3 obserwujących

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Warszawa
  • Zawód
    programista
  • Moje zainteresowania:
    Linux, STM32, FPGA

Ostatnio na profilu byli

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

  1. @APJ Masz oczywiście rację, że procesor czekając na zapalenie lub zgaszenie diody marnuje czas. Warto jednak zawsze dobierać rozwiązanie do problemu, a nie odwrotnie. Jeśli piszemy program, który ma tylko migać diodą, to aktywne czekanie nie jest niczym złym. Przecież i tak w tym czasie nic lepszego procesor nie ma do roboty. W części dotyczącej oszczędzania energii pokazujemy jak można usypiać procesor podczas oczekiwania - ale warto powtórzyć: zawsze dobieramy rozwiązanie do potrzeb. Jeśli chcemy mieć niski pobór energii, odpowiednio projektujemy układ i piszemy program. Jeśli poza miganiem
  2. Podczas obsługi przerwania blokowane jest przyjmowanie kolejnych o priorytecie niżym lub równym aktualnemu. Więc nic się złego nie stanie, jeśli kolejne zostanie zgłoszone podczas wykonywania procedury obsługi poprzedniego.
  3. Elvis

    Tablice dynamiczne c++

    Nie jestem pewien, czy alokowanie pamięci na stercie to dobry pomysł. Jest jednak duża różnica między pierwszymi programami, gdzie tablica była alokowana na stosie, a ostatnią wersją - może to ładnie w wygląda w C++, ale działać może o wiele gorzej.
  4. @padus Dodanie biblioteki math.h było w przykładzie potrzebne, aby użyć funkcji exp() i nie miało nic wspólnego z wcześniejszym zdaniem Rdzeń Cortex-M4 posiada wsparcie sprzętowe dla operacji na liczbach zmiennopozycyjnych pojedynczej precyzji, czyli po prostu dla typu float. Proste operacje jak np. dodawanie, odejmowanie, mnożenie i dzielenie liczb tego typu są wykonywane sprzętowo, a dzięki temu o wiele szybciej niż w przypadku czysto programowej realizacji obliczeń. Aby skorzystać ze wsparcia koprocesora arytmetycznego nie trzeba robić nic poza użyciem typu float - domyślne ustawieni
  5. @Frantick Najprościej jest użyć wsprintf.
  6. @Emerid Moduł RTC działa nawet w trybie standby i nie musisz aktualnego czasu zapisywać w pamięci SRAM2 - tym bardziej, że wówczas czas spędzony w uśpieniu nie byłby liczony, więc sam "zegarek" pewnie zbyt dokładny by nie był. Problem wynika chyba z nieporozumienia. Na początku programu wywołujesz funkcję HAL_RTC_GetState, która zwraca stan HAL_RTC_STATE_RESET co oznacza, że moduł RTC nie został jeszcze zainicjalizowany. Musisz więc najpierw wywołać HAL_RTC_Init, albo raczej MX_RTC_Init. Warto popatrzeć jak wygląda kod HAL_RTC_GetState: HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_Ha
  7. W tej części chcieliśmy pokazać jak można za pomocą naszego mikrokontrolera komunikować się z czujnikami podłączanymi za pomocą interfejsu 1-wire, ale okazało się, że przy okazji musieliśmy sporo miejsca poświęcić na opisanie działania samego czujnika DS18B20. Nie jest to kurs obsługi tych czujników i wiele funkcji musieliśmy pominąć, ale o jednej warto byłoby wspomnieć. Pokazaliśmy jak można odczytywać temperaturę z jednego czujnika nawet bez znajomości jego kodu (adresu) - wystarczy wysłać polecenie SKIP_ROM (0xCC) i jeśli tylko jeden czujnik jest podłączony, możemy z nim "rozmawiać". W
  8. Zawsze zachęcamy do używania dokładnie takiej samej płytki bazowej oraz identycznych elementów jak opisywane w kursie. Używanie innych jest oczywiście możliwe, ale bywa o wiele trudniejsze. Wykorzystując analogię do "przesiadania" - jeśli mamy prawo jazdy i prowadzimy samochód od lat, to przesiadka do innego modelu nie jest problemem. Wystarczy ustawić fotel, lusterka i można jechać. Ale na początku, gdy dopiero się uczymy, nawet niewielkie różnice mogą sprawiać wiele problemów. A jeśli uważamy, że nie, to proponuję pierwszy raz poprowadzić samochód z kierownicą po prawej stronie Podobn
  9. Dwa małe sprostowania. Po pierwsze, tak jak pisaliśmy w kursie, dla enkodera generującego 40 impulsów na obrót wartość Period Counter należy ustawić na 39, aby po wykonaniu pełnego obrotu uzyskać identyczną wartość jak poprzednio. Ustawienie okresu na 40 oczywiście zadziała, ale po pełnym obrocie zwracana wartość będzie się różnić od początkowej. Druga sprawa to liczby ze znakiem i bez znaku. Rejestry sprzętowe są 16-bitowe i są to wartości bez znaku. Czyli mamy w nich zakres od 0 do 65535, nie ma żadnego bitu znaku. Natomiast w naszym programie możemy sobie interpretować te wartości jak
  10. Dostęp do rejestrów jest bardzo prosty, ustawienie bitu RSS realizuje taki kod: PWR->CR3 |= PWR_CR3_RRS; Wszystkie używane wartości pochodzą z pliku stm32l476xx.h, który znajduje się w katalogu Drivers\CMSIS\Device\ST\STM32L4xx\Include, czyli jak łatwo się domyślić jest częścią biblioteki CMSIS. Natomiast jak chodzi o umieszczanie zmiennych w pamięci SRAM2 to jest na to kilka sposobów, warto wymienić chociaż dwa: prosty, albo poprawny. Prosta wersja to zdefiniowanie struktury, która będzie przechowywała potrzebne zmienne jako składowe, np.: typedef struct { int x; int
  11. Za nami kolejna część poświęcona modułom licznikowym, mam nadzieję, że udało nam się pokazać ogromne możliwości jakie te peryferia oferują. Ostatnie dwie części się do pewnego stopnia uzupełniają, w poprzedniej zobaczyliśmy jak można wykorzystać timery do wysyłania danych (do diod WS2812B), a teraz poznaliśmy sposób na odbieranie danych przesłanych z pilota podczerwieni. Możliwości układów licznikowych oczywiście się na tym nie kończą i można za ich pomocą zrealizować komunikację przez właściwie dowolny interfejs cyfrowy. W naszym kursie zajmujemy się tylko odbieraniem danych przesyłanych
  12. @Frantick Efekt, który opisujesz to najprawdopodobniej rezystancja źródła sygnału, czyli w tym przypadku napięcia odniesienia. Takie źródło nie jest w stanie dostarczać dużych prądów, a jeśli używasz domyślnych ustawień ADC, to czas próbkowania wynosi 2.5 cyklu, więc przy małej wydajności źródła (czyli wysokiej impedancji), pojawiają się takie efekty jak opisujesz. Przeczytaj w kursie akapit "Pomiar napięcia zewnętrznego przez STM32", w nim opisujemy to samo zjawisko na przykładzie pomiaru napięcia ustawionego potencjometrem. Jako eksperyment proponuję ustawić taktowanie ADC na 80MHz, zmierzyć
  13. @padus Wybranie opcji C++ nie sprawi, że kod będzie większy, ani wolniejszy. Niezależnie od wyboru C/C++ zarówno biblioteki HAL, jak i cały wygenerowany przez CubeMX kod będzie w czystym C i nadal będzie tak samo kompilowany. Jedyna różnica to opcje samego projektu oraz użycie linkera, który obsługuje C++. Ale dopóki nie dodasz kodu w tym języku, otrzymany wynik będzie praktycznie taki sam. Czyli podsumowując - biblioteka HAL oraz wygenerowany kod jest zawsze w C, natomiast można napisać własny kod w C++, który będzie korzystał z funkcji napisanych w C i wtedy wszystko działa bez problemu
  14. Napisanie tej części kursu było bardzo ciekawym, chociaż niekoniecznie łatwym doświadczeniem. Okazało się, że pozornie prosty temat jak mierzenie ciśnienia atmosferycznego kryje w sobie wiele niespodzianek, a wykorzystywanie czujnika do pomiaru wysokości wcale nie jest takie oczywiste. W każdym razie większość wniosków opisaliśmy w tej części kursu, ja dodam od siebie tylko, że podczas testów płytka Nucleo-L476RG wraz z wyświetlaczem TFT z naszego kursu, powerbankiem oraz czujnikiem LPS25HB trafiła do prowizorycznej, kartonowej obudowy. Następnie taki "przyrząd pomiarowy" został zabrany w
  15. @ethanak może najpierw małe wyjaśnienie - celem tej części kursu było głównie pokazanie sposobu działania interfejsu I2C oraz jego obsługi z poziomu biblioteki HAL dla STM32. Sama pamięć EEPROM jest tylko prostym i popularnym przykładem. Masz oczywiście w pełni rację odnośnie bufora zapisu, postanowiliśmy jednak świadomie nie opisywać tego w tej części kurs. Ograniczyliśmy się tylko do uwagi: "Na dodatek, przesyłając więcej niż jeden bajt, należy brać pod uwagę wielkość licznika oraz adresowanie stron. Szczegóły na ten temat znaleźć można oczywiście w dokumentacji tego układu". Po prostu nie c
×
×
  • 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.