piątek, 30 grudnia 2016

[6] STM32F7 - Discovery - StemWin, FatFS

Ten post chciałbym poświęcić na opisanie sposobu wyświetlanie zdjęć na ekranie TFT umieszczonym na płytce discovery z wykorzystaniem biblioteki STemWin oraz FATFS.

Funkcja włączająca zegary:


wtorek, 20 grudnia 2016

[5] STM32F7 - CubeMx - Wyświetlacz cz. 2 - Touchpad, Biblioteka STemWin

Ten post chciałbym poświęcić na opisanie sposobu przygotowania projektu dotyczącego biblioteki STemWin. Będzie on kontynuacją wcześniejszej części gdzie zostały przedstawiony sposób wygenerowania projektu oraz dołączenia potrzebnych plików.

Touchpad


Panel dotykowy będzie działał tak ja poprzednio czyli albo w obsłudze przerwania od timera, bądź w pętli while, przy czym ten pierwszy sposób jest zdecydowanie wygodniejszy oraz dużo lepiej się prezentuje.

poniedziałek, 19 grudnia 2016

[5] STM32F7 - CubeMx - Wyświetlacz Cz. 1. - Obsługa wyświetlacza

Ten post będzie otwierał serie dotyczącą wyświetlacza umieszczonego na mikrokontrolerze STM32F7. Finalny projekt ma zawierać możliwość obsługi biblioteki STemWin. Aplikacja będzie tworzona od początku w środowisku CubeMx, a następnie w SystemWorkbench Ac6. Sterowniki oraz pozostałe potrzebne elementy pobrałem z przykładu dla wyświetlacza tego układu.

W tym poście opiszę jedynie odpalenie samego wyświetlacza oraz dołączenie wyszystkich potrzebnych elementów dotyczących wyświetlacza, touchpada oraz biblioteki STemWin. Samo włączenie touchpada oraz biblioteki graficznej zostawię na następny raz.

Przydatne linki:


Przykłady od firmy ST (do pobrania na dole w linku);
STM32F7 - Datasheet (Dokumentacja mikrokontrolera wykorzystywanego w płytce Discovery);
SDRAM - Datasheet (MT48LC4M32B2 Micron);
Touchpad (FT5336);

wtorek, 13 grudnia 2016

[25] STM32F4 - DWT

Ten post chciałbym poświęcić na opisanie sprzętowego licznika zegarowego DWT CYCCNT. Jest to bardzo precyzyjny układ sprzętowy za którego pomocą można dokonać bardzo dokładnych obliczeń. Rejestr CYCCNT zlicza ilość cykli wykonanych przez CPU. W związku z czym można go użyć do obliczenia dokładnej ilości cykli w danym czasie. 

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

czwartek, 8 grudnia 2016

[29] Arduino - Enkoder. WS2812B

Ten post chciałbym poświęcić na przygotowanie drugiego programu, który w nieco szerszym zakresie zaprezentuje możliwości diod programowalnych WS2812B.

Podłączenie:


W przykładzie wykorzystam enkoder bez przycisku oraz diody WS2812B. Drugi przykład natomiast będzie obsługiwał enkoder z przyciskiem.

poniedziałek, 5 grudnia 2016

[4] STM32F7 - CubeMx - Obsluga karty SD

Tym razem chciałbym przedstawić sposób rozpoczęcia pracy z kartą SD na mikrokontrolerze STM32F7 i środowisku CubeMx oraz System Workbench. Cały proces jest bardzo szybki i mało problematyczny. Po wygenerowaniu projektu w środowisku, prace można rozpocząć odrazu, nie trzeba wykonywać żadnych dodatkowych operacji na bibliotece, zostaje tylko przygotowanie podstawowych funkcji odpowiedzialnych za obsługę.


Przygotowanie projektu w CubeMx


Jak zwykle projekt należy najpierw wygenerować w środowisku CubeMx. Można to zrobić zarówno dla płytki jak i dla mikrokontrolera. 

niedziela, 4 grudnia 2016

[8] STM32F4 - CubeMx - Usart, DMA Cz. 2

Ten post będzie rozwinięciem wcześniejszego dotyczące układu USART oraz DMA. Będzie on zawierał rozwinięcie tematu komunikacji w dwie strony tzn. przesyłanie i odbieranie tych danych.

CubeMx - Zmiany w projekcie


Całą procedurę należy rozpocząć od dokonania drobnych zmian w projekcie poprzez dodanie w projekcie przerwania od linii RX, dodaje się ją w taki sam sposób jak poprzednio dla linii TX. Przerwania zostają automatycznie włączone od DMA dla USART'u.

Rys. 1. Ustawienie RX DMA

środa, 30 listopada 2016

[3] STM32F7 - Usart, zapis i odczyt danych

Ten post chciałbym poświęcić na opisanie kilku funkcji pozwalających na dosyć efektywną pracę z USART'em na mikrokontrolerze STM32F7. Ja wykorzystywałem dwa z nich tzn. wbudowany do wejścia USB oraz ten podłączony pod linie PC6 i PC7.

Poniżej przedstawię tylko sposoby włączenia oraz opis potrzebnych i przydatnych funkcji:

piątek, 25 listopada 2016

[2] STM32F7 - SDRAM

Ten post chciałbym poświęcić na opisanie sposobu zaprogramowania pamięci SDRAM zamontowanej na płytce STM32F7 Discovery. Jest to model MT48LC432B2B5-6A firmy Micron. Zastosowana kość posiada 128Mb pamięci, dla mikrokontrolera jest dostępne 64Mb. Linie DQ16 do DQ31 są podłączone do rezystorów podciągających do masy.

Rys. 1. Schemat podłączenia [UM1907]

wtorek, 22 listopada 2016

[1] STM32F7 - Porty GPIO

W tym poście chciałbym przedstawić podstawowe funkcje odpowiedzialne za obsługę portów WE/WY w układzie STM32F7. W tym przypadku biblioteki standardowe są już nie dostępne dlatego w całości posłużę się bibliotekami HAL'a oraz bezpośrednio rejestrami mikrokontrolera.

Funkcje:


poniedziałek, 21 listopada 2016

[7] STM32F4 - CubeMx - USART przez DMA

W tym poście chciałbym przedstawić sposób wykonania transmisji poprzez USART z wykorzystaniem DMA. Wykorzystam do tego celu środowisko Cube Mx oraz biblioteki Hal'a. 

Cały proces włączenia USART'a oraz przesyłania dany z wykorzystaniem DMA za pomocą CubeMx jest bardzo prosty i bezproblemowy.

CubeMx

niedziela, 20 listopada 2016

[|||] STM32F4 - Discovery - Projekt - Obsługa klawiatur membranowych 20x20

Ten post chciałbym poświęcić na przygotowanie programu, którego zadaniem będzie obsługa klawiatury membranowej o zadanym zakresie. Maksymalna liczba linii oraz wierszy została ustawiona na 20. Czyli potrzebna zastosować 40 pinów mikrokontrolera. 

Podłączenie


sobota, 19 listopada 2016

[1] STM32F429l - Wyświetlacz LCD

W tym poście chiałbym przedstawić sposób obsługi wyświetlacza zamontowanego na płytce STM32F429l Discovery za pomocą CubeMx oraz bibliotek standardowych.

Opis wyświetlacza:


Na płytkach discovery z  mikrokontrolerm STM32F429l znajduje się wyświetlacz LCD wyposarzony w sterownik ILI9341. Rodzielczość to 2,41", QVGA 240x320 pikseli. Głębia kolorów to 16(65536) bądź 18 bitów (262144). Co daje całkiem pokaźną liczbę kolorów.

sobota, 12 listopada 2016

C - Rozdzielanie zmiennej 32 bitowej, wyswietlanie w hex

W tym temacie chciałbym pokazać dwa proste programy pozwalające na rozdzielenie liczby dziesiętnej na pojedyncze elementy oraz wyświetlenie tej samej liczby jako wartości szesnastkowej.

Program do wyświetlenia wartości liczbowej po jednej cyfrze:

wtorek, 8 listopada 2016

[3] ATXmega - Biblioteka HID, klawiatura

Ten post chciałbym poświęcić na uruchomienie układu ATXmega, pracującego jako klawiatura.

Inicjalizacja biblioteki:


Po przygotowaniu projektu dla wybranego mikrokontrolera. Bibliotekę wgrywa się poprzez asf (atmel software framework). Po wgraniu jest ona prawie w pełni gotowa do używania. Zostało już tylko odpowiednio włączyć zegary:

poniedziałek, 7 listopada 2016

[0] STM32F0 - GPIO oraz UART

Tym razem przedstawię szybki post dotyczący mikrokontrolerów STM32F0 w którym przedstawię podstawowe operacje na portach GPIO w oparciu o mikrokontroler STM32F030P6.

Program dla GPIO

[2] ATXmega - 128A3U - Sygnały zegarowe

Ten post chciałbym poświęcić na szybki opis sygnałów zegarowych oraz sposobu ich deklaracji w mikrokontrolerach z rodziny ATXmega.

Mikrokontrolery z tej serii mają (tak przynajmniej mi się wydaje) jedno wejście pozwalające na podłączenie kwarcu. Dlatego należy wybrać jakiego rodzaju on będzie czy zwykły do taktowania całego układu, czy też zostawienie go dla zegara czasu rzeczywistego. Druga opcja jest zdecydowanie lepsza bo zegary wewnętrzne zdeklarowane zakresy pracy posiadają tylko dla temperatury pokojowej. Dla pozostałych zakresów te wartości mogą znacznie (kilka procent) odbijać od zdeklarowanej.

[24] STM32F4 - Biblioteka HID, klawiatura oraz myszka

W tym poście chciałbym opisać sposób wykonania oraz zastosowanie biblioteki HID (Human Interface Device) w mikrokontrolerze STM32F4. Można ją włączyć tylko dla mikrokontrolerów posiadających wbudowany interfejs USB. W przykładach będę przesyłał określony ciąg znaków poprzez USB do komputera. Dane zostaną wysłane po naciśnięciu klawisza,

Wspomniana powyżej biblioteka czy też klasa została opracowana dla urządzeń typu klawiatura czy myszka. Ma ona tą zaletę, że dzięki temu sterowniki zostały zawarte w każdym komputerze i urządzenie jest gotowe do działania zaraz po jego podłączeniu do komputera.

Aby urządzenie działało w nieco inny sposób to należałoby przygotować odpowiedni program na komputer PC np. w języku Delphi czy C#. I bibliotekę aktywować jako Custom HID. Program dla mikrokontrolera jest bardzo prosty w implementacji zwłaszcza z wykorzystaniem bibliotek HAL-a oraz programu Cube Mx.

Bardzo ważne jest także dobranie taktowania. Zegar dla USB powinien wynosić 48MHz.

sobota, 5 listopada 2016

czwartek, 3 listopada 2016

[3] STM32F1 - Rejestry - Timer na przerwaniach

Ten post chciałbym poświęcić na opisanie timerów w mikrokontrolerze STM32F103.

Rejestry:


Dokładny opis przedstawionych rejestrów znajduje się w dokumentacji producenta CD00017119.

TIMx_CR1 - jest to 16 bitowy rejestr kontrolny. Do wyboru są takie ustawienia jak prędkość (CKD), automatyczne przeładowanie (ARPE), sposób zliczania (CMS), kierunek (DIR), tryb jedno-impulsowy (OPM), żądanie aktualizacji źródła (URS), wyłączenie aktualizacji UEV (UDIS), włączenie zliczania (CEN);

środa, 2 listopada 2016

[28] Arduino - Klawiatura membranowa

Ten post chciałbym poświęcić na przygotowanie programu obsługującego klawiaturę membranową w formacie 4x4, która posiada 16 klawiszy. Jej wygląd przedstawiłem poniżej na rysunku 1. 

Rys. 1. Klawiatura matrycowa [elektroda.pl]

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. }

czwartek, 29 września 2016

[3] Atmega328 - Timer 2/Timer 1

Ten post chciałbym poświęcić na opisanie programowanie 16 bitowego timera na mikrokontrolerze Atmega328 poprzez płytkę Arduino oraz 8 bitowego timera 8 bitowego. Timer 0 zostawię na inną okazję. 

Mikrokontroler Atmega328 zawiera jeden timer 16 bitowy. Jest on w dokumentacji opisany jako Timer/Counter1 (TC1).

środa, 28 września 2016

[2] Atmega328P - Obsługa przycisku

W tym poście chciałbym przedstawić sposób obsługi przycisku.

Działanie programu będzie standardowe jeśli przycisk będzie wciśnięty to odczeka 100 ms, po tym czasie ponownie sprawdzi czy przycisk jest wciśnięty. Jeśli tak to zapali diodę wbudowaną do płytki Arduino.

poniedziałek, 26 września 2016

[6] STM32F4 - Discovery - CubeMx - USB

W tym poście chciałbym opisać sposób komunikacji z komputerem za pomocą USB. Opiszę tutaj sposób przygotowania układu do uzyskania komunikacji poprzez Virtual Serial Port.

Konfiguracja programu w środowisku CubeMx


W pierwszej kolejności należy odpowiednio skonfigurować zegary. Należy to zrobić w taki sposób aby USB nie było taktowane wyższym sygnałem niż 48 MHz. Można to ustawić w następujący sposób:

Rys. 1. Ustawienie zegarów

Python - Program do komunikacji z komputerem poprzez port szeregowy

W tym poście chciałbym przedstawić krótki skrypt do pythona, za pomocą którego można odbierać dane poprzez port szeregowy. Wszystkie poniższe skrypty testuje przy pomocy Arduino Uno

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

niedziela, 25 września 2016

[1] Atmega328P - Programowanie mikrokontrolera przez Arduino IDE.

Ten post chciałbym przedstawić w jaki sposób zaprogramować mikrokontroler Atmega328 znajdujący się na płytce Arduino Uno z wykorzystaniem programu Arduino IDE.

Opis

wtorek, 20 września 2016

C - Obliczanie pierwiastka

W tym poście chciałbym przedstawić krótki program pozwalający na obliczenie pierwiastka podanego stopnia. Program został przygotowany w języku C.

Program:


Do tego celu posłużę się funkcją expotencjalną, która będzie dokonywała obliczeń na wartości logarytmu liczby pierwiastkowanej podzielonej przez stopień pierwiastka.

poniedziałek, 19 września 2016

[4] STM32F4 - Rejestry ADC

W tym poście chciałbym opisać sposób obsługi układu ADC na rejestrach mikrokontrolera STM32F4.

Podłączenie:


ADC zostało wyprowadzone na następujące piny:

Wszystkie ADC taktowane są z linii APB2 z dzielnikiem 2.

niedziela, 18 września 2016

[3] STM32F4 - Rejestry DAC

W tym poście chciałbym opisać sposób zaprogramowania konwertera cyfrowo - analogowego na rejestach. Trochę teorii zostało już przeze mnie opisanej w części dotyczącej DAC na bibliotekach.

Program:


W pierwszej kolejności aby była możliwość wyprowadzania sygnału na zewnątrz to należy ustawić piny w tryb analogowy za pomocą rejestru MODER. Który wygląda następująco:

Rys. 1. Rejestr GPIO MODER

sobota, 17 września 2016

C - Zmienna const

Tym razem chciałbym przedstawić krótki post dotyczący obsługi wartości stałej z wykorzystaniem słowa kluczowego const.

Stała jest to zmienna której nie można zmienić wartości w trakcie działania programu. Stałą, jak już wspomniałęm wcześniej deklaruje się z użyciem słowa kluczowego const, które zostaje umieszczone przed typem zmiennej:

  1. const double c = 3.45;

czwartek, 15 września 2016

[17] STM32F4 - 3 osiowy akcelerometr LSM303D

Tym razem chciałbym omówić obsługę akcelerometru, magnetometru oraz termometru LSM303D. Komunikacja z tym układem odbywa się za pomocą interfejsu I2C bądź SPI. W tym poście opiszę komunikację poprzez I2C.

Opis układu


Na rysunku 1 znajduje się wygląd zewnętrzny modułu:

Rys. 1. Moduł z układem LSM303D [botland]

poniedziałek, 12 września 2016

[16] STM32F4 - Discovery - Tryby oszczędzania energii

Tym razem chciałbym przedstawić sposób obsługi trybów oszczędzania energii w mikrokontrolerach z rodziny STM32F4.

Do wyboru są następujące rodzaje trybów oszczędzania energii w STM32:

  • Tryb uśpienia (Sleep Mode)
  • Tryb zatrzymania (Stop Mode)
  • Tryb czuwania (Standby Mode)
  • Tryb Vbat (Vbat Mode)

Rys. 1. Pobór prądu dla mikrokontrolerów [datasheet]

środa, 7 września 2016

[15] STM32F4 - Programowanie pamięci Flash AT45DB161

Ten post chciałbym poświęcić na opis sposobu programowania pamięci AT45DB161.

Opis układu


W tym poście przedstawię program pozwalający na obsługę pamięci AT45DB161E oraz D. Kod powinien być podobny do innych kości z rodziny AT45DB. 

Komunikacja z mikrokontrolerem odbywa się poprzez interfejs SPI. Maksymalna częstotliwość taktowania wynosi 85MHz.

Rys. 1. Opis wyprowadzeń

środa, 31 sierpnia 2016

[14] STM32F4 - Discovery - Obsługa SPI na bibliotekach API&HAL

We wcześniejszym poście opisałem obsługę czujnika LIS302DL poprzez SPI. Tym razem chciałem przybliżyć uruchamianie samego interfejsu za pomocą bibliotek HAL oraz API. 

Biblioteki API


W tej części definiuje się część włączającą SPI oraz odpowiednie GPIO. Następnie należy zdefiniować funkcje za pomocą których dane będą wysyłane oraz odbierane.

wtorek, 30 sierpnia 2016

[13] STM32F4 - Programowanie pamięci Flash FL127SIF10

W tym poście chciałbym opisać sposób programowania pamięci Flash FL127SIF10 za pomocą mikrokontrolera STM32F4 zamontowanego na dwóch płytkach tzn. na Discovery z mikrokontrolerem STM32F407vg oraz na płytce Nucleo z układem STM32F446RE.

Opis pamięci flash FL127SIF10


Przedstawiana pamięć jest produkowana przez dwóch firmę Cypress. Jej pojemność wynosi 128 Mbit czyli 16Mbyte. Napięcie zasilania wynosi od 2.7V do 3.6V. Posiada ona 100 tyś cykli zapisu oraz odczytu. 

Rys. 1. Pamięć Flash FL127SIF10

wtorek, 23 sierpnia 2016

[12] STM32F4 - Discovery - Akcelerometr LIS302DL

W przykładzie opiszę sposób obsługi trzy osiowego akcelerometru firmy ST LIS302DL, który był umieszczany na starszych wersjach płytek Discovery z układem STM32F407VG.

Układ do komunikacji wykorzystuje magistralę SPI.

Opis układu


Opisywany czujnik pozwala detekcję przyśpieszeń od +/- 2g do +/- 8g. Komunikacja może się odbywać poprzez dwa interfejsy komunikacyjne SPI bądź I2C.

Rys. 1. LIS302DL

czwartek, 18 sierpnia 2016

[26] Arduino - Cyfrowy czujnik ciśnienia MPL3115A2

Tym razem chciałbym opisać sposób obsługi cyfrowego czujnika z interfejsem I2C. Pozwala on na pomiar takich parametrów jak ciśnienie, wysokość nad poziomem morza oraz temperaturę.

MPL3115A2 - Opis


Parametry czujnika:

wtorek, 16 sierpnia 2016

Źródła sygnału zegarowego dla mikrokontrolerów

Ten post chciałbym poświęcić na opis sposobu dobrania źródła sygnału zegarowego dla mikrokontrolera.

Opis


Sygnał jest potrzebny do synchronizacji przesyłanych danych pomiędzy zintegrowanymi blokami. Pozwala on także określić z jaką prędkością układ będzie działał. Przy czym należy pamiętać, że im większa częstotliwość tym większe potencjalne zakłócenia oraz zwiększony pobór prądu przez układ.

poniedziałek, 15 sierpnia 2016

Opis interfejsu SPI

Tym razem chciałbym zaprezentować opis magistrali SPI.

SPI


SPI (ang. Serial Peripheral Interfejs) jest to magistrala szeregowa stosowana w systemach opartych głównie o mikrokontrolery. Pozwala on na stosowanie synchronicznej, dwukierunkowej transmisji danych (full-duplex). Prędkość transmisji dostosowywana jest do najwolniejszego ze stosowanych układów.

Magistrala jest zbudowana z trzech linii:

  • SCK - czyli linia sygnału taktującego
  • MISO - wyjście danych z układu podrzędnego
  • MOSI - wejście danych dla układu podrzędnego
  • CS, SS - pozwala na wybranie układu który będzie przeprowadzał transmisję

czwartek, 11 sierpnia 2016

[12] STM32F4 - Discovery - Obsługa wyświetlacza HD44780

W tym poście opiszę w jaki sposób obsłużyć wyświetlacz 2x16 ze sterownikiem HD44780. 

Program


Poniżej przejdę po poszczególnych głównych funkcjach całego programu.

Rozpoczęcie pracy z wyświetlaczem należy rozpocząć od jego poprawnego włączenia, co się wykonuje na podstawie przedstawionej poniżej funkcji inicjującej pracę wyświetlacza oraz uruchamiającą potrzebne wyprowadzenia GPIO.

niedziela, 7 sierpnia 2016

Zadanie - Wzmacniacz operacyjny - [1] - Odwracający

W tym poście chciałbym przedstawić sposób obliczania wzmocnienia dla odwracającego wzmacniacza operacyjnego. 

Rys. 1. Wzmacniacz odwracający

[1] STM32 M3 - Nucleo - F103RB - Rejestry - Porty GPIO

Ten post chciałbym poświęcić na przedstawienie sposobu włączenia portów GPIO oraz zegara w mikrokontrorze wymienionym w tytule. 

Opis Rejestrów


Do obsługi portów GPIO można wyróżnić następujące rejestry: CRL, CRH, IDR, BSRR, BRR, ODR, LCKR.

Poniżej krótki opis wymienionych rejestrów. Po dokładniejsze informacje należy zajrzeć do Reference manual dla wybranego mikrokontrolera.

GPIO_CRL - Pozwala on na wybranie ustawień dotyczących wyprowadzeń od Px0 do Px7.

Rys. 1. Rejestr GPIO_CRL [manual]

środa, 3 sierpnia 2016

C - Sortowanie bąbelkowe

W tym poście chciałbym zaprezentować algorytm sortowanie bąbelkowego przygotowany w języku C.

Działanie tej metody polega na porównywaniu ze sobą dwóch liczb znajdującego się w ciągu znaków, z nich liczba mniejsza zostaje podstawiona pod niższą pozycję w tabeli a liczba większa pod pozycję o większym numerze. Poniżej krótka prezentacja:

tab[5] = 7;
tab[6] = 2;

Zadanie - Tranzystor bipolarny [1]

Ten post chciałbym poświęcić na rozwiązanie prostego narazie zadania dotyczącego obliczeń układu dla tranzystora bipolarnego.

Zadanie polega na wyznaczeniu w przybliżeniu prądu emitera Ie oraz napięcia kolektor emiter Uce, dla tranzystora krzemowego, w którym napięcie baza emiter wynosi Ube = 0,7. Obliczenia należy przeprowadzić dla kilku wartości napięcia Eb.(10 V, 2V, -6V)

poniedziałek, 1 sierpnia 2016

ESD - Opakowania

Ten post chciałbym poświęcić zagadnieniu dotyczącemu zastosowań opakowań ESD w procesie produkcyjnym.

Dopuszczalne rodzaje metod pakowania zostały opisane w normie PN-EN (IEC) 61340.

Można wyznaczyć cztery rodzaje opakowań ESD, które są przeznaczone do różnych zastosowań:

  • Conductive – C – są to opakowana przewodzące. – Rezystancja 10^5, trójwarstwowe z wielowarstwowej polietylenowej folii.
  • Dissipative – D – rozpraszają ładunki elektrostatyczne - Rezystancja 10^8 do 10^11. 
  • Shielding – S – zapewniają ekranowanie przed wyładowaniami elektrostatycznymi - typowa rezystancja takich opakować oscyluje w okolicach 10^10. Przeważnie są one trójwarstwowe, warstwa zewnętrzna to poliester (10^11), środkowa to metal (10^2), wewnętrzna polietylen (10^11). 
  • Field Shielding – F- Opakowanie ekranujące przed polem elektrostatycznym

poniedziałek, 25 lipca 2016

niedziela, 24 lipca 2016

C - Losowanie liczb pseudolosowych

Ten post będzie dotyczył metody jaką należy zastosować aby możliwe było losowanie liczb z określonego przez użytkownika przedziału za pomocą funkcji rand().

Jej zadaniem jest generacja liczby pseudolosowej. Poniżej przedstawię krótki program którego zadaniem będzie generacja przykładowych 10 liczb.

czwartek, 21 lipca 2016

Obliczanie pojemności baterii

W tym poście chciałbym zaprezentować w jaki sposób obliczyć jaka bateria będzie potrzebna dla budowanego urządzenia.

środa, 20 lipca 2016

[7] Stabilizator na diodzie Zenera

Najłatwiejszy układ stabilizatora można wykonać w oparciu o rezystor podłączony razem z diodą Zenera.

Rys. 1. Schemat podstawowego stabilizatora

wtorek, 19 lipca 2016

[5a] STM32F4 - Discovery - CubeMx - USART, komunikacja z komputera na mikrokontroler

Ten post będzie kontynuacją wcześniejszego, dotyczącego komunikacji poprzez USART. Tym razem przedstawię odwrotny sposób transmisji czyli od komputera do mikrokontrolera.

Program


Na samym początku po włączeniu zegarów w programie CubeMx, należy włączyć obsługę USART2 w trybie asynchronicznym, po czym uruchomić przerwania NVIC dla niego.

poniedziałek, 18 lipca 2016

[6] Dioda Schottky'ego

Ten post poświęcę na krótki opis diody Schottky'ego.

Jest to dioda zawierająca złącze metal półprzewodnik. Dzięki małej pojemności złącza, czas przełączania jest bardzo mały i podawany w ps. Powoduje to, że wartość strat jakie są wykorzystywane na generację ciepła jest ograniczona. Ich dodatkowym atutem oprócz szybszego działania jest występowanie mniejszego spadku napięcia w kierunku przewodzenia, typowo około 0,3V. Wartość napięcia wstecznego przeważnie jest niewielka i nie wychodzi poza zakres 100V.

niedziela, 17 lipca 2016

C++ - Podstawowy kalkulator

W tym poście chciałbym przedstawić krótki projekt kalkulatora przygotowanego w C++. Projekt będzie obsługiwany za pomocą okna konsoli.

Jego działanie będzie się opierało na wykonywaniu operacji na dwóch liczbach.

Będzie on posiadał następujące funkcje:

  • dodawanie
  • mnożenie
  • dzielenie
  • pierwiastkowanie
  • potęgowanie
  • silnia
  • dodawanie oraz odejmowanie liczb w systemie dwójkowym

sobota, 16 lipca 2016

[5] Dioda prostownicza

Ten post poświęcę opisowi diody prostowniczej, która jest wykorzystywana np. w mostku Graetza opisywanego w części [4].

Dioda prostownicza jest często wykorzystywana do prostowania prądu przemiennego. Ich głównym zadaniem jest przepuszczać prąd w jedną stronę, natomiast w drugą blokować. Wartość ich rezystancji w kierunku przewodzenia jest bardzo mała, w kierunku zaporowy natomiast jest ona bardzo duża.

Rys. 1. Symbol diody prostowniczej

[0] PCB - Podział warstw na płytkach

W tym poście przedstawię w jaki sposób należy dobierać warstwy w płytkach dwu oraz wielowarstwowych. 

Płytki wykonywane są poprzez nanoszenie warstw równego typu na siebie. Na rysunku 1 przedstawiłem przykładowy przekrój dla płyty 8 warstwowej.

Rys. 1. Przekrój poprzeczny przez warstwy PCB [1]

piątek, 15 lipca 2016

[4] Mostek Graetza

W tym poście chciałbym opisać zasadę działania mostku Greatza.

Mostek Graetza jest pełno-okresowym prostownikiem, który jest zbudowany z czterech diod prostowniczych zamontowanych oddzielnie, lub tak jak się częściej stosuje, w jednym scalaku. Prostowane są obie połówki napięcia przemiennego. Nie zależnie od kierunku w jakim przepływa prąd na wejściu, prąd na wyjściu będzie płynąć zawsze w tą samą stronę.

środa, 13 lipca 2016

[3] Dzielnik napięć

Ten post będzie dotyczył sposoby obliczenia oraz zastosowanie dzielnika napięć.

Zasada działania dzielnika napięć nie jest zbytnio skomplikowana, jego zadanie polega na dzieleniu napięcia wejściowego.

Rys. 1. Dzielnik napięć

wtorek, 12 lipca 2016

[5] STM32F4 - Discovery - CubeMx - UART

W tym poście opiszę w jaki sposób wykonać włączenie przesyłania informacji przez port szeregowy UART.

Projekt


Podobnie jak poprzednio należy rozpocząć od wybrania płytki w programie CubeMx. Po operacji okno programu powinno prezentować się następująco. 

[2] Połączenia szeregowe i równoległe

W tym poście przedstawię zagadnienia związane z połączenie szeregowym i równoległym takich elementów jak rezystory, kondensatory i cewki.

poniedziałek, 11 lipca 2016

[1] Prawo Ohma i Kirchoffa

Ten post będzie rozpoczynał mały cykl krótkich artykułów poświęconych podstawowym zagadnieniom związanym z elektroniką. Nie zamierzam w tych wpisach wchodzić głęboko w szczegóły tylko przedstawić krótki opis podstawowych zagadnień.

niedziela, 10 lipca 2016

C - Zmienna volatile

Ten bardzo krótki post chciałbym poświęcić zagadnieniu modyfikatorowi volatile, która jest najczęściej wykorzystywana w procedurze obsługi przerwania.

[Źródło: https://docs.microsoft.com/pl-pl/cpp/c-language/?view=msvc-160]

sobota, 9 lipca 2016

[9] PCB - Stabilizator na napięcie dodatnie i ujemne

W tym poście chciałbym zaprezentować sposób wykonaniu układu stabilizującego napięcie 5V o przeciwnej polaryzacji. Jako źródło można wykorzystać napięcie 9V pochodzące z baterii lub z zasilacza.

Głównymi elementami układu będzie regulator napięcia 78L05 oraz konwerter napięć ICL7660.

Układ 78L05


Jest to 5V regulator napięcia z maksymalnym prądem wyjściowym wynoszącym 100mA. Sprzedawany jest w obudowie TO-92, SO-8 lub SOT89. Stabilizator posiada ochronę przed przegrzaniem oraz przed zwarciem.

piątek, 1 lipca 2016

C - Wprowadzanie danych do pliku

Ten post chciałbym poświęcić metodzie wprowadzania i odczytywania danych z pliku tekstowego.

Dostęp wysokopoziomowy wykorzystuje następujące funkcje pozwalające na uzyskanie dostępu do pliku. Są to funkcje fopen(), fread(), fclose(). Dodatkowo należy wykorzystać wskaźnik, który będzie pokazywał na strukturę FILE. Będzie ona przechowywać informacje o pliku. Kolejną grupą jest dostęp niskopoziomowy, który obsługuje takie funkcje jak read(), open(), write() czy close().

Należy pamiętać, że dostępy muszą być od siebie oddzielone. Nie można na jednym otwartym pliku operować metodami niskopoziomowi po czym przejść na wysokopoziomowe przed całkowitym zamknięciem pliku.

wtorek, 28 czerwca 2016

[11] STM32F4 - sprzętowy kooprocesor arytmetyczny FPU

Ten post chciałbym poświęcić kooprocesorowi arytmetycznemu FPU.

FPU - Opis


FPU czyli arytmetic logic unit jest to wyspecjalizowany blok sprzętowy, którego zadaniem jest przyśpieszenie obliczeń zmiennoprzecinkowych. 

Operacje na liczbach zmiennoprzecinkowych w przypadku nie wykorzystywania FPU są bardzo czasochłonne, powodem tego jest dekodowanie operandów oraz modyfikowanie wartości w celu uzyskania takich samych wykładników. Po jednokrotnej operacji są one ponownie kodowane, po czym proces zaczyna się od początku.

sobota, 25 czerwca 2016

[25] Arduino - Moduł Neopixel WS2812B 8xLED RGB

Ten post chciałbym poświęcić obsłudze modułu Neopixel WS2812B zawierającego 8 diod świecących.

Opis


WS2812B jest to sterownik LED-ów zintegrowany z diodą RGB w obudowie 5050

Parametry modułu są następujące:

Temperatura pracy od 0 do 60 st. C
Zasilanie 5V
Sterowanie odbywa się za pomocą jednego przewodu
Każda dioda posiada 3X PWM 8bit.

Rys. 1. Neopixel 8x LED RGB WS2812 [1]

czwartek, 16 czerwca 2016

C - Preprocesor

W tym poście omówię zagadnieniu preprocesora w języku C.

Teoria


Proprocesor jest to oddzielny krok wykonywany podczas kompilacji. Składa się na niego zestaw instrukcji jakie są wykonywane za nim proces kompilacji się rozpocznie. 

Komendy jakie się wykorzystuje są poprzedzone symbolem "#". Poniżej przedstawiam listę często spotykanych kodów wraz z przykładami.

poniedziałek, 13 czerwca 2016

[8] PCB - Zasilacz impulsowy - układ L4960

W tym poście chciałbym przedstawić sposób budowy zasilacza impulsowego w oparciu o układ firmy ST Microelectronics L4960. 

Układ L4960


L4960 jest impulsowym stabilizatorem napięcia z funkcją regulacji wartości napięcia wyjściowego.

Rys. 1. L4960 - wygląd zewnętrzny

Poniżej przedstawiam opis tego układu w punktach, został on pobrany z dokumentacji udostępnionej przez producenta:

niedziela, 12 czerwca 2016

C - Przydzielanie pamięci

Ten post chciałbym poświęcić opisowi takich funkcji jak calloc, malloc, free oraz realloc, które są zdefiniowane w stdlib.h.

calloc - pozwala na przydzielenie tablicy elementów o podanym rozmiarze. Zwracany jest wskaźnik do przydzielonej pamięci lub wartość NULL jeśli operacja się nie powiedzie. Dodatkowo przydzielona pamięć jest ustawiana na wartość 0.  Funkcja wygląda następująco:

void *calloc(size_t nitems, size_t size)

wtorek, 24 maja 2016

STM32F4 - Discovery - Wymiana kwarcu na płytce

W tym poście chciałbym opisać sposób w jaki należy przeprowadzić wymianę kwarcu na płytce STM32F4 Discovery.

Opis


Na samym początku należy zapoznać się z dokumentacją producenta odnośnie maksymalnej dopuszczalnej wartości kwarcu. Zgodnie z dokumentacją [1] wartość ta powinna mieścić się w zakresie od 4 do 26 MHz.

Kolejnym krokiem jest zapoznanie się z schematem podłączenia jaki został zastosowany na płytce Discovery oraz aktualną wartością umieszczonych kondensatorów w obwodzie kwarcu.

Rys. 1. Schemat części z kwarcem

czwartek, 19 maja 2016

[2] STM32F4 - Rejestry - Konfiguracja zegarów HSI oraz HSE

Ten post chciałbym poświęcić konfiguracji zegarów HSI oraz HSE za pomocą rejestrów, bez wykorzystania biblioteki API. 

Rodzaje zegarów


Możliwe źródła sygnałów zostały już przeze mnie opisane w innych postach, w związku z tym wymienię tylko ich rodzaje:

  • HSE - (ang. High Speed External) - zewnętrzne źródło sygnału. W STM32F4 - Discovery jest to kwarc o częstotliwości 8 MHz.
  • HSI - (ang. High Speed Internal) - wewnętrzny generator częstotliwości. Częstotliwość wynosi 16 MHz.
  • PLL - (ang. Phase Locked Loop) - zewnętrzna pętla powielacza częstotliwości
  • LSE - (ang. Low Speed External) - kwarc zegarowy. jego częstotliwość wynosi 32.768kHz
  • LSI - (ang. Low Speed Internal) - częstotliwość wynosi od 17 do 37 kHz.

poniedziałek, 9 maja 2016

C++ - Lista jednokierunkowa

Ten post będzie dotyczył zastosowania oraz wykonania listy jednokierunkowej.

Opis


Lista jednokierunkowa daje możliwość grupowania dowolnej liczby elementów. Jedynym ograniczeniem dla niej jest ilość dostępnej pamięci. Jak jej nazwa wskazuje można ją przeglądać tylko w jedną stronę tzn, od początku do końca. 

W celu jej budowy wykorzystuje się dwa typy komórek pamięci. Jeden z nich zawiera wskaźnik do początku oraz do końca listy. Drugi typ natomiast zawiera pole z wartością oraz wskaźnik na kolejny element z listy.

wtorek, 3 maja 2016

C++ - Sortowanie szybkie

W tym poście chciałbym przedstawić algorytm sortowanie szybkiego, zwanego QuickSort.

Opis działania


Jest to rekurencyjny algorytm oparty na metodzie dziel i zwyciężaj. Polega na dzieleniu całej grupy potrzebnej do posortowania na mniejsze części, które będą łatwiejsze do poukładania. Z całej tablicy wybierany jest element główny zwany osią. Jest on ustawiany losowo, nie musi to być element środkowy. Następnie względem niego przemieszczane są elementy większe, na prawą stronę, lub mniejsze, na stronę lewą, od wartości głównej. 

poniedziałek, 2 maja 2016

[3] Windows 7 - Samoczynne wybudzanie się komputera

Ten post chciałbym poświęcić opisowi rozwiązania problemu z samoczynnym wybudzaniem się komputera ze stanu uśpienia.

W pierwszej kolejności należy włączyć konsole CMD. W niej należy wprowadzić następujące polecenia.

powercfg -lastwake

środa, 27 kwietnia 2016

[24] Arduino - Transmisja radiowa nRF24L01+

W tym poście chciałbym przedstawić sposób wykonania transmisji bezprzewodowej za pomocą modułu nRF24L01+.

Opis modułu


Moduł transmisji opiera się na paśmie 2.4 GHz. Płytka zawiera wbudowaną antenę. Teoretyczny zasięg deklarowany w idealnych warunkach ma wynosić 100m. Zbadany zasięg pozwala na osiągnięcie odległości około 25m.

piątek, 22 kwietnia 2016

[7] PCB - Konwerter USART-USB

W tym poście przedstawię szybki projekt płytki PCB zawierającej konwerter UART - USB, opartego o układ FT232R.

Opis układu


Opisywany układ został opracowany przez firmę Future Technology Devices International. Ltd. Jest to układ konwertera USART - USB. Cały protokół USB został wprowadzony bezpośrednio w układzie. W związku z czym nie ma konieczności stosowania zewnętrznego oprogramowania. Dodatkowym atutem jest możliwość generacji sygnału taktującego z zarówno z zewnętrzengo jak i wewnętrznego układu. 

wtorek, 19 kwietnia 2016

[23] Arduino - Wyświetlacz OLED

W tym poście chciałbym zaprezentować wyświetlacz OLED 0,96" wykorzystujący interfejs I2C, ze sterownikiem SSD1306.

Opis


Parametry wyświetlacza są następujące:

  • zasilanie 3-5V
  • kolor niebieski
  • temperatura pracy od -30 st. C do 80 st. C
  • komunikacja poprzez SPI
  • pobór mocy maksymalnie 0,08W
  • sterownik SSD1306

niedziela, 17 kwietnia 2016

[2] STM32F4 - Discovery - Projekt - Generator sygnałów DAC

W tym poście chciałbym przedstawić szybki mały projekt generatora sygnałów, wykonanego w oparciu o STM32F4 - Discovery. Układ generował będzie wybrane przez użytkownika sygnały za pomocą DAC na pinach PA4 oraz PA5. Z dostępnych sygnałów będzie do wybory sygnał sinusoidalny, trójkątny, piłokształtny, prostokątny oraz szum. W celu wybrania funkcji będzie wykorzystywany wyświetlacz Nokia 5110 oraz kilka przycisków.

Podłączenie


Elementem wykorzystywanym do prezentacji danych będzie wspomniany wcześniej wyświetlacz Nokia 5110. Jego podłączenie jest następujące:

  • RST - GPIOC15
  • CE - GPIOC13
  • DC - GPIOC14
  • Din - GPIOC3
  • Clk - GPIOB10
  • VCC - 3,3V
  • BL - Włączenie podświetlenia wyświetlacza
  • GND - GND

środa, 13 kwietnia 2016

[2] Windows 7 - Tworzenie kont użytkowników za pomocą pliku wsadowego

W tym poście chciałbym zaprezentować sposób wykorzystania pliku wsadowego do tworzenia kont użytkowników.

Plik wsadowy


Plik wsadowy (batch file) jest to plik który jest wykonywany w trybie wsadowym, czyli, użytkownik nie ma wpływu na jego wykonywanie. Może nim być program komputerowy bądź scrypt, którym jest zapisany w pliku ciąg poleceń. Jest on wykonywany bez potrzeby kompilacji.

wtorek, 12 kwietnia 2016

C++ - Wyszukiwanie liczb w tabeli

W tym poście chciałbym opisać sposób wyszukiwania liczb w tabeli posortowanej. Algorytm wyszukiwania będzie się opierał na metodzie zwanej przeszukiwaniem binarnym.

Program


W pierwszej kolejności należy się zająć częścią programu odpowiedzialną za sortowanie liczb. Ja wykorzystałem algorytm sortowania bąbelkowego. Jest to jedna z prostszych metod sortowania. Działa ona dosyć dobrze na małych zbiorach, przy większych zbiorach raczej sobie nie poradzi za dobrze.

poniedziałek, 11 kwietnia 2016

C++ - Odwracanie tablicy metodą rekurencyjną

W tym poście chciałbym przedstawić sposób odwrócenia tablicy znaków, do tego celu wykorzystuje metodę rekurencyjną.

sobota, 9 kwietnia 2016

[1] Windows 7 - Ustawienie komentarza przy starcie systemu

W tym poście opiszę sposób w jaki można wykonać wyświetlanie jakiegoś komentarza, który się pojawi przy starcie systemu operacyjnego.

Sposób 1


W pierwszym sposobie należy zmodyfikować odpowiedni parametr w zasadach zabezpieczeń lokalnych. Dokonuje się to poprzez uruchomienie programu secpol.msc. Następnie należy wchodzić w następujące opcje: Zasady lokalne -> Opcje zabezpieczeń. Tam w oknie należy wyszukać dwóch parametrów:

środa, 6 kwietnia 2016

[4] STM32F4 - Discovery - CubeMx - PWM

Ten post chciałbym poświęcić generacji sygnału PWM, za pomocą bibliotek HAL.

Wstęp 


Dla przypomnienia wklejam poniżej opis poszczególnych liczników wraz z ich zastosowaniem oraz opisem sygnałów zegarowych.

niedziela, 3 kwietnia 2016

[0] Arduino - Typy danych

W tym poście chciałbym przedstawić rodzaje typów danych jakie są dopuszczalne w Arduino.

Wstęp


Typy danych pozwalają na odpowiednią deklarację zmiennych. Dzięki nim istnieje możliwość dokładnego zdefiniowania informacji w sposób zrozumiały dla mikrokontrolera. Dodatkowo ważne jest ich odpowiednie oznaczenie, ponieważ pozwala to na uzyskanie interesującego nas zakresu wpisywanych danych. Przez odpowiednią deklarację uzyskuje się także możliwość zredukowania zajmowanej pamięci układu.

środa, 30 marca 2016

[10b] STM32F4 - Discovery - DAC, generacja szumu białego

W tym poście chciałbym przedstawić sposób generacji szumu białego z wykorzystaniem konwertera cyfrowo analogowego.

Teoria


Do generacji pseudolosowego szumu wykorzystywany jest jego generator. W tym celu udostępniono rejestr LFSR (ang. linear feedback shift register). Zostaje on wybrany poprzez ustawienie rejestru WAVEx[1:0] na 01. Wartość automatycznie umieszczona w LFSR wynosi 0xAAAA.

Rejestr jest odświeżany co trzy cykle zegara APB1, po każdy zdarzeniu, które wywoła jego wyzwolenie. Proces odbywa się w oparciu o odpowiedni algorytm wyliczeniowy. 

Rys. 1. Rejestr LFSR, schemat algorytmu obliczeniowego

wtorek, 29 marca 2016

[10a] STM32F4 - Discovery - DAC, generacja sygnałów

W tym poście chciałbym przedstawić sposób generacji sygnałów za pomocą DAC oraz DMA.

Za pomocą konwertera cyfrowo analogowego można wygenerować sygnał prostokątny, piłokształtny trójkątny oraz sinusoidalny.

Sposób działania


Poniżej przedstawiam schemat blokowy pojedynczego konwertera cyfrowo analogowego. Dla przypomnienia w STM32 znajdują się dwa takie układy.

Rys. 1. Schemat DAC

środa, 23 marca 2016

poniedziałek, 21 marca 2016

[3] STM32F4 - Discovery - CubeMx - DAC

W tym poście zaprezentuje sposób generacji sygnału sinusoidalnego za pomocą ustawienia konwertera analogowo cyfrowego.

CubeMx


Całość jak poprzednio należy rozpocząć od wybrania odpowiedniego mikrokontrolera. Następnie należy włączyć DAC, wykonuje się to poprzez zmianę występujących na pinach PA4 i PA5 funkcji. W tym celu klika się prawym przyciskiem myszy na pinie.

Po zaznaczeniu DAC zostaje automatycznie aktywowany.


Rys. 1. Wlaczenie DAC

sobota, 19 marca 2016

[10] STM32F4 - Discovery - DAC

W tym poście chciałbym opisać w jaki sposób zainicjować oraz odpalić konwerter cyfrowo analogowy.

Charakterystyka DAC


STM32F407 został wyposażony w dwa wyjścia sygnału DAC. Zlokalizowane są one w następujących wyprowadzeniach:

  • DAC1 - PA4
  • DAC2 - PA5

poniedziałek, 14 marca 2016

[2] STM32F4 - Discovery - CubeMx - ADC

W tym poście chciałbym zaprezentować obsługę ADC z wykorzystaniem biblioteki HAL.

CubeMx


W tym celu po otwarciu odpowiedniego pliku można odrazu przejść do odpowiedniej zakładki w Peripheral. Opisywany mikrokontroler posiada trzy przetworniki ADC.

Rys. 1. Okno programu CubeMx

Układ Darlingtona

W tym poście chciałbym zaprezentować układ Darlingtona, opisać sposób jego działania oraz sposoby zastosowania.

Jest to układ wzmacniacza, który jest oparty o tranzystory bipolarne. Składa się on z dwóch tych samy układów albo NPN albo PNP.

Rys. 1. Schemat układu Dalingtona

piątek, 11 marca 2016

[1] STM32F4 - Discovery - CubeMx - Mruganie diodami

Ten post będzie zawierał opis wykonania prostego programu za pomocą oprogramowania CubeMx.

Rys. 1. Główne okno programu CubeMx

czwartek, 10 marca 2016

[9] STM32F4 - Discovery - USART, printf

W tym poście opiszę sposób włączenia oraz obsługi USART-u poprzez płytkę Discovery.

Opis


UART i USART można podłączyć w następującej konfiguracji do pinów:

W odróżnieniu od płytki Nucleo, Discovery nie ma wbudowanego konwertera, w związku z tym należy się posłużyć zewnętrznym.

wtorek, 8 marca 2016

C - Typy złożone - typedef, enum, union

Język C zawiera kilka rodzajów typów złożonych, które postaram się opisać w tym poście.

Typedef


Podane słowo kluczowe w nagłówku służy do definiowania typów pochodnych, Pozwala ono na skrócenie deklaracji zmiennej, zamiast używać długiej nazwy pełnej definicji można wykorzystać krótszą przy użyciu typedef. Czyli w skrócie zostanie zmieniona nazwa deklaracji wypisanego typu. Dodatkowo ta definicja może być widoczna tylko w lokalnym programie.

niedziela, 6 marca 2016

C - Funkcje do identyfikacji znaku

W tym poście chciałbym opisać szereg funkcji, które sprawdzają czy dany znak jest konkretnym elementem. Zostały one zdefiniowane w bibliotece ctype.h. Aby z nich korzystać należy ją oczywiście uwzględnić w nagłówku programu.

Poniżej przedstawiam ich wykaz wraz z opisem zastosowania. Definicja ich jest podobna różnica występuje tylko w nazwie ( int nazwafunkcji(int c) ) np. int isalnum(int c)

wtorek, 1 marca 2016

[1] ATXmega - 128A3U - Porty GPIO

W tym poście chciałbym przedstawić podstawowy program na mikrokontrolery ATmega, którego zadaniem będzie, jak łatwo można się domyślić, mruganie diodami.

Wgranie programu

sobota, 27 lutego 2016

Układy SMD - obudowy cz. 1.

Ten post będzie zawierał prezentację niektórych obudów układów wraz z przykładowymi modelami tych układów. Elementy zwane SMD Surface Mount Devices, przeznaczone są do montażu powierzchniowego zwanego Surface Mount Technology. 

W tej części przedstawię obudowy diod, kondensatorów, rezystorów oraz tranzystorów jakie występują w opisywanej technologii. 

ESD - podłączenie stanowiska, pomiary

W tym poście chciałbym poruszyć dwa tematy, jeden z nich będzie dotyczył poprawnego uziemienia pracownika na stanowisku, drugi natomiast będzie dotyczył sposobu dokonywania pomiarów.

Aby mieć pewność co do zabezpieczeń, oraz możliwości uszkodzenia układów należy przestrzegać czterech podstawowych zasad:
  1. Należy z góry przyjąć iż wszystkie komponenty elektroniczne są wrażliwe na wyładowania elektrostatyczne.
  2. Komponenty należy dotykać tylko w odpowiednim zabezpieczeniu, a najlepiej w strefie EPA.
  3. Transport oraz przechowywanie elementów powinno się odbywać tylko w przystosowanych do tego pojemnikach i z odpowiednim ich zabezpieczeniem.
  4. Zastosowane środki ochronne należy regularnie sprawdzać np. opaska nadgarstkowa powinna być codziennie sprawdzana.

czwartek, 25 lutego 2016

ESD - Wyładowania elektrostatyczne. jak się przed nimi chronić

Ten post będzie zawierał czym są wyładowania elektrostatyczne, co mogą powodować oraz jak się przed nimi chronić.


Rys. 1. Symbol elementów bezpiecznych przeciw ESD

poniedziałek, 22 lutego 2016

[0] Altium Designer - Tworzenie biblioteki, element DIP

W tym poście chciałbym przedstawić sposób tworzenia biblioteki z modelami elementów do schematu oraz PCB w programie Altium Designer. Jako przykład zostanie wykonana ATmega328P w obudowie DIP 28.

Nowy element powinien składać się z dwóch lub trzech elementów, pierwszym z nich jest model PCB, gdzie należy pilnować wszystkich wymiarów, zgodnych z dokumentacją producenta. Drugim elementem jest model schematu, w tym przypadku obowiązkowo trzeba mieć na uwadze odpowiednie podpisanie pinów, sam wygląd jest dowolny. Trzecim, opcjonalnym elementem jest model 3D. Taki model można wykonać np. w programie Solid Works.

sobota, 20 lutego 2016

[22] Arduino - Czujnik opadów

Ten post będzie zawierał opis programu pozwalającego na zastosowanie czujnika opadów YL-83. Czujnik składa się z dwóch elementów próbówki oraz samego czujnika.


Rys. 1. Czujnik opadów YL-83

czwartek, 18 lutego 2016

Zasady pisania zrozumiałego i czytelnego kodu

Ten post będzie zawierał wskazówki oraz zasady jakimi należy się kierować, aby przygotować maksymalnie czytelny i zrozumiały kod, nie tylko dla innego użytkownika, ale też dla autora gdy przyjdzie mu po dłuższym czasie do niego zaglądnąć.

Podstawowe zasady


Przy pisaniu kodu programu należy pamiętać o kilku bardzo istotnych elementach:

Zmienne stosowane w programie powinny być o możliwie jak najmniejszym zasięgu. Oznacza to, że jeżeli jest ona potrzebna tylko w jednej funkcji, to zostaje zdeklarowana tylko w niej. Nie należy jej deklarować tak aby była dostępna dla całego programu. Dzięki takiemu zabiegowi kod jest mniejszy przez co wykonuje się szybciej ponieważ nie wykorzystuje pamięci ram tylko bezpośrednio rejestry układu.

środa, 17 lutego 2016

[0] STM32F4 - Discovery - Ustawienie maksymalnej częstotliwości taktowania

W pierwszej części opisałem sposoby taktowania mikrokontrolera zamontowanego na płytce Discovery czyli STM32F407VG.

Keil uVision - zewnętrzne źródło taktujące


W celu odpalenia maksymalnej częstotliwości z zewnętrznego oscylatora należy dokonać następujących zmian w plikach programów.

poniedziałek, 15 lutego 2016

[2] STM32F4 - Discovery - Biblioteka - Niezależny układ czuwający Watchdog

W tym poście zaprezentuję sposób wykonania biblioteki dla niezależnego układu czuwającego, który został opisany w poście [8]. Całość będzie się składała z dwóch plików.

Elementy biblioteki:

[8] STM32F4 - Discovery - Watchdog - Niezależny układ czuwający

Ten post będzie zawierał przerobiony program z mikrokontrolera STM32F103RB, który został opublikowany w jednym z poprzednich postów.

Watchdog w STM32F4


Podobnie jak poprzednio w tym mikrokontrolerze występują dwa rodzaje układów czuwających, niezależny i okienkowy.

Pierwszy z nich taktowany jest z LSI, którego częstotliwość oscyluje w okolicach 32 kHz. Co jest jego niewątpliwą zaletą, ponieważ może działać właściwie w każdym przypadku poprawnie. Dodatkowo ten sygnał może zostać podzielony przez wartości będące potęgą dwójki, maksymalnie dzielnik może wynosić 256 minimalnie 4. Wobec tego najmniejsza wartość częstotliwości może wynosić 128Hz. 

sobota, 13 lutego 2016

[14] STM32 M3 - Nucleo - F103RB - Watchdog

W tym poście opiszę sposób w jaki obsłużyć układ Watchdoga w mikrokontrolerze F103RB.

Watchdog


Watchdog inaczej układ czuwający jest odpowiedzialny za automatyczne zresetowanie mikrokontrolera gdy zostanie wykryte zawieszenie programu. Cały proces odbywa się bez udziału użytkownika. Stosowany jest on jako środek zaradczy w przypadku wystąpienia nieprzewidzianego problemu. 

Jego działanie jest dosyć proste, opiera się na zasadzie działania licznika, który jest wywoływany w programie co określony interwał czasowy. Jeśli licznik z jakiegoś powodu nie zliczy do zera, będzie to oznaczało zawieszenie mikrokontrolera, co spowoduje jego zresetowanie przez układ watchdoga.

środa, 10 lutego 2016

[13] STM32 M3 - Nucleo - F103RB - EEPROM, I2C

Niedawno przedstawiłem opis programowanej EEPROM poprzez układ Arduino. Tym razem przyszła kolej na STM32. Może to być w niektórych projektach wyjątkowo przydatny element do zastosowania, ponieważ STM32F103 jak i również STM32F4 nie posiada wbudowanej pamięci EEPROM. Do komunikacji z pamiecią zostanie wykorzystany interfejs I2C. 

I2C


Inter-Integrated Circuit został opracowany przez firmę Philips. Jest wykorzystywany do transmisji szeregowej, synchronicznej w trybie naprzemiennego odbierania i nadawania danych (half-duplex). 

Dostępne są trzy wersje tego interfejsu różniące się między sobą szybkością transmisji:
  • Standardowy (Standard) - 100kb/s
  • Szybki (Fast Mode) - 400kb/s
  • Wysoka prędkość (High Speed Mode) - 3,4 Mb/s

poniedziałek, 8 lutego 2016

C - Pętla Do...While

W tym poście chciałbym przedstawić opis pętli Do..While.

Wygląda ona następująco:

do
{
  //Wykonywalne
  //Instrukcje
}while(warunek)

niedziela, 7 lutego 2016

Wymiana pasty termoprzewodzącej na procesorze

W tym poście przedstawię w jaki sposób wymienić pastę na procesorze zamontowanym w laptopie firmy Asus.

Odkręcenie mocowania:


W pierwszym kroku należy odkręcić tylną klapę zasłaniającą dojście do układu chłodzenia. Całość należy oczywiście poprzedzić odłączeniem źródła zasilania oraz wyciągnięciem baterii.


Rys. 1. Tylna klapa w laptopie

piątek, 5 lutego 2016

C - Pętla While

Tym razem opiszę zasadę działania oraz sposoby wykorzystywania pętli while.

Wygląd pętli while:

while(warunek)
{
   //Dalsza część
}

Pętla ta będzie się wykonywać dopóki warunek wpisany w nawiasie będzie prawdziwy. Nie zostanie wykonana nawet raz, w przeciwieństwie do pętli for, jeżeli warunek nie zostanie spełniony.

poniedziałek, 1 lutego 2016

C - zamiana liczby całkowitej na binarną

W tym poście przedstawię krótki program, którego zadaniem będzie zamiana wartości liczbowej całkowitej na binarną.

C - Pętla For

Ten post będzie zawierał opis działania i wykorzystania pętli for. Prezentuje się ona w następujący sposób.

for(start; stop; krok)
{
  //...
}

niedziela, 31 stycznia 2016

Dokładność kwarcu oraz wewnętrznego oscylatora

W tym poście chciałbym opisać w jaki sposób należy dobrać odpowiedni kwarc, kondensatory oraz jak daleko można je umieścić od układu, który jest nimi taktowany. Jest on jednym z najlepszych rozwiązań jeśli chodzi o stabilizację drgań oscylatora, ponieważ jest to stosunkowo tani i bardzo dokładny element.

Na samym początku należy zwrócić uwagę na jego parametry oraz dokładność.

Dokładność kwarcu


Ten parametr wyrażany jest w jednostkach PPM (ang. Parts Per Million). Jednostka ta pozwala na określenie odchylenia wartości częstotliwości od zakładanej. Przeważnie przyjmuje ona następujące wartości: +/- 5, 10, 15, 20, 30, 50, 100 ppm. 

czwartek, 28 stycznia 2016

C - Instrukcja warunkowa If else

Ten post będzie zawierał informacje dotyczące instrukcji warunkowej If else.

[Źródło: https://icons8.com/icon/40670/c-programming]

środa, 27 stycznia 2016

Eliminacja zakłóceń, filtracja zasilania

Tematem tego postu będzie eliminacja zakłóceń jakie mogą dostać się do mikrokontrolera.

W pierwszej kolejności należy uświadomić sobie dlaczego filtracja jest taka ważna i jakie objawy mogą towarzyszyć w przypadku jej braku. Mogą wystąpić następujące objawy:


  • układ nie działa
  • zła praca mikrokontrolera lub pozostałych układach
  • błędne pomiary z czujników
  • zła praca części analogowej mikrokontrolera
  • w najgorszym przypadku spalenie całego układu

wtorek, 26 stycznia 2016

C - Instrukcja warunkowa switch case

W tym poście chciałbym opisać sposób zastosowania instrukcji warunkowej switch...case.

[1] STM32F4 - Discovery - Włączenie pinów I/O - biblioteka

W tym przedstawię przygotowaną bibliotekę do STM32F4 zawierającą deklarację pinów GPIO. Dodatkowo dołączę do niej odpowiednie funkcje, które będą odpowiadać za prawidłowe zdeklarowanie podanych wartości. 

sobota, 23 stycznia 2016

[21] Arduino - Regulator PID

Tym razem przedstawię sposób wykonania regulatora PID w oparciu o płytkę Arduino Uno. Całość została opracowana z pomocą biblioteki PID.

[Źródło: https://store.arduino.cc/usa/arduino-uno-rev3]

środa, 20 stycznia 2016

Zasada działania regulatora PID

W tym poście opiszę teorię dotycząca działania regulatora PID. W oddzielnych postach przedstawię sposób jego wykonania na mikrokontrolerze STM32 oraz na ATmega w oparciu o środowisko programistyczne Arduino IDE.

poniedziałek, 18 stycznia 2016

[|||] Projekt Arduino - Termometr cyfrowy z alarmem

Tym razem chciałbym przedstawić szybki projekt cyfrowego termometru z alarmem opartego na Arduino Uno.

Wstęp


Do wykonani opisanego układu wykorzystałem.

  • Arduino Uno;
  • Buzzer FY248 32mm;
  • Wyświetlacz 2x16 ze sterownikiem HD44780 oraz konwerterem I2C,
  • Cyfrowy termometr DS18B20;
  • Dwa potencjometry