czwartek, 27 października 2016

[23] STM32F4 - Obsługa enkodera inkrementalnego

W tym poście chciałbym opisać w jaki sposób obsłużyć enkoder inkrementalny. W przykładzie wykorzystałem enkoder, który można znaleźć pod tym linkiem oraz drugi dla jakiego sprawdzałem czyli ten. Oba mają po 24 kroki na pełny obrót.

Podłączenie


Spotkałem się z czterema metodami podłączenia enkodera do mikrokontrolera.

poniedziałek, 24 października 2016

Stos oraz sterta w mikrokontrolerach

W tym poście chciałbym opisać co to takiego jest stos a co to jest sterta.

Stos:


Stos jest to pewien obszar pamięci, który jest adresowany za pomocą przeznaczonego do tego rejestru wskaźnikowe. Na stos operacje wprowadzone są w sposób standardowy tzn. element ostatnio odłożony będzie jako pierwszy z niego ściągany. 

sobota, 22 października 2016

[0] STM32F4 - Rejestry - Rejestry specjale mikrokontrolera

W tym poście chciałbym opisać rejestry specjalne mikrokontrolera STM32F4.

Z rejestrów specjalnych można wyróżnić:
  • PSR - rejestr w statusie.
  • PRIMASK - rejestry masek wyjątków
  • FAULATMASK - rejestry masek wyjątków
  • BASEPRI - rejestry masek wyjątków
  • CONTROL - rejestry kontrolny

piątek, 21 października 2016

C - Priorytety operatorów

Ten post chciałbym poświęcić na krótkie zestawienie priorytetów poszczególnych operatorów wraz z przykładowym ich wywołaniem.

Będą one podawane od najwyższego priorytetu:

[6] STM32F4 - Rejestry - Przerwania zewnetrzne EXTI

Ten post chciałbym poświęcić na opisanie przerwań zewnętrznych w tytułowym układzie, które zostaną zaprogramowane bezpośrednio na rejestrach mikrokontrolera.

Rejestry:


Możny wyróżnić następujące definicje przerwań EXTI definiowanych za pomocą NVIC dla opisywanego mikrokontrolera:

  • EXTI0_IRQn
  • EXTI1_IRQn
  • EXTI2_IRQn
  • EXTI3_IRQn
  • EXTI4_IRQn
  • EXTI9_5_IRQn 
  • EXTI15_10_IRQn

wtorek, 18 października 2016

[22] STM32F4 - Programowy PWM

Ten post chciałbym poświęcić na przygotowanie programu pozwalającego na wygenerowanie sygnału PWM programowo. Pozwoli to na generację tego sygnału z każdej dostępnej nogi mikrokontrolera. Do poprawnego ustawienia sygnału będzie wykorzystywany licznik Systick.

[21] STM32F4 - Generacja liczb pseudolosowych

Ten post chciałbym poświecić na opisanie sprzętowego bloku pozwalającego na generowanie 32 bitowych liczb pseudolosowych.

Opis bloku [1]:


Ta część będzie poświęcona na opis bloku RNG. Generator liczb pseudolosowych, który jest oparty o część analogową, jest wykorzystywany w większości mikrokontrolerów z rodziny STM32F2, F4, F7, L0 oraz L4.

wtorek, 11 października 2016

[20] STM32F4 - Akcelerometr LIS3DSH

Ten post chciałbym poświęcić na opis programowania akcelerometru LIS3DSH, który został zamontowany na nowszych płytkach Discovery.

Komunikacja, tak samo jak dla LIS302DL, odbywa się za pomocą I2C bądź SPI. Ja wykorzystam ten drugi sposób.

poniedziałek, 10 października 2016

[2] STM32F1 - Przerwania EXTI

W tym poście chciałbym przedstawić sposób obsługi przerwania zewnętrznego na rejestrach STM32. Trochę teorii i opisu części programowania tego opisu dla STM32 M3.

Teraz przejdę tylko do opisu rejestów oraz sposobu wywołania przerwania.

W formie przypomnienia to należy pamiętać o tym iż przerwania mają współdzielone wektory np. dla PA1 oraz PC1, czy dla linii od 10 do 15. Wobec tego trzeba będzie dokonywać sprawdzenia, która z linii dokonała wyzwolenia przerwania.

niedziela, 9 października 2016

[5] STM32F4 - Systick na rejestrach

W tym poście chciałbym opisać sposób konfiguracji systicka z wykorzystaniem rejestrów. Programy będą miały za zadanie generować przerwanie co określoną ilość czasu przez licznik.

[Źródło: http://www.st.com/en/evaluation-tools/stm32f4discovery.html]

Do uruchomienia Systicka wykorzystuje się funkcje SysTick_Config(). Jako jej argument podaje się zmienną w formacie uitn32_t, która określa ilość ticków zegara.

sobota, 8 października 2016

Python - Obsługa plików

Tym razem chciałbym przedstawić podstawowe sposoby obsługi plików i folderów w języku Python.


[Źródło: https://applover.pl/technology/python]

czwartek, 6 października 2016

[10] PCB - Płytka rozwojowa z mikrokontrolerem STM32F030

Ten post chciałbym poświęcić szybkiemu projektowi płytki PCB z mikrokontrolerem STM32F0.

Schemat


Schemat składa się z podstawowych elementów. Zasilanie podawane jest przez złącze mini usb, wchodzi ono na stabilizator podając 3.3V na wyjście. Z elementów dodatkowych na płytce znajduje się przycisk do resetu oraz dwie diody. Jedna z nich sygnalizuje włączenie zasilania, druga natomiast może być obsługiwana przez użytkownika.

[19] STM32F4 - Komunikacja z modułem bluetooth HC-05

Tym razem chciałbym opisać sposób dokonania komunikacji z modułem bluetooth HC-05. Połączenie odbywa się poprzez interfejs UART, który można wykonać bezpośrednio poprzez STM32, lub z wykorzystaniem komend AT. Pierwszy sposób ma większe zastosowanie ponieważ umożliwia dołączania dodatkowych modułów z których można przesyłać dane komputer lub tablet z wykorzystaniem bezprzewodowej komunikacji.

Na początku zaprezentują podstawową wersję programu na układ STM32 po czym przejdę do komend AT.

Program dla STM32:

środa, 5 października 2016

[27] Arduino - Przetwornik R-2R

W związku z tym, że płytka Atmega328 nie posiada konwertera cyfrowo analogowego to chciałbym zaprezentować jeden z najprostszych sposobów na jego wykonanie.

Przetwornik R-2R

niedziela, 2 października 2016

[18] STM32F4 - Ustawianie Systicka

Ten post chciałbym poświęcić na opisanie generowania przerwania od Systicka co określoną ilość czasu.

Systick jest to 24 bitowy timer. Działa on na takiej zasadzie, że zlicza od podanej wartości do 0. Gdy dojdzie się do 0 to jest zgłaszane przerwanie. Dzięki temu można go wykorzystać do generacji funkcji opóźniających, czy odliczania czasu w mikrokontrolerze.

sobota, 1 października 2016

[4] Atmega328 - Komunikacja przez UART

Ten post chciałbym poświęcić na przygotowanie komunikacji poprzez UART.

Jeśli chodzi o wysyłanie danych to do tego celu wykorzystana zostanie następująca funkcja.

  1. void SEND_BYTE(uint8_t b8_data)
  2. {
  3.     while(d_SEND_DATA_COMPLETE) { ; }
  4.     UDR0 = b8_data;
  5. }