poniedziałek, 30 listopada 2015

[8] STM32 M3 - Nucleo - F103RB - Oszczędzanie energii

W tym poście chciałbym opisać możliwe tryby oszczędzania energii w mikrokontrolerach z rdzeniem Cortex M3.

Wstęp


Obecnie od nowych urządzeń wymaga się jak najniższego poboru prądu dotyczy to nie tylko korzyści środowiskowych ale i dłuższego czasu działania takich układów na baterii.

Pierwsza z dostępnych opcji dotyczy całkowitego wyłączenia nie wykorzystywanych układów peryferyjnych, lub ich chwilowego wyłączenia, jeśli nie są one w danej chwili wykorzystywane. Kolejnym sposobem jest obniżenie taktowania układów. Pozwoli to zmniejszyć pobór prądu tych układów. 

piątek, 27 listopada 2015

[5] PCB - Konwerter UART - USB układ MCP 2200

W tym poście chciałbym przedstawić projekt płytki PCB z konwerterem UART na USB.

Wstęp


Konwersja sygnału z UART na USB będzie wykonywana za pomocą układu MCP2200 firmy Microchip. Układ produkowany jest w trzech rodzajach obudowy QFN, SOIC, SSOP.


Rys. 1.1. MCP2200 opis pinów [1] 

[7a] STM32 M3 - Nucleo - F103RB - DMA z ADC

W tym poście chciałbym opisać w jaki sposób odczytać dane z ADC przez DMA.

Wstęp


Programowanie ADC przez DMA pozwala na dość duże ułatwienie pracy, zwłaszcza gdy wykorzystuje się pomiar więcej niż jednego kanału. Wynik otrzymywane z przetwarzania danych zostają umieszczone w rejestrze DR. Aby umożliwić poprawne rozpoznawanie z jakiego kanału pochodzą otrzymane dane należy wykorzystać tablicę, której zadaniem będzie przechowywanie danych odczytanych z poszczególnego kanału.
Dodatkowo należy pamiętać o odpowiedniej konfiguracji ADC, mianowicie ustawienia włączenia skanowania kanałów. Dzięki takiemu ustawieniu po pierwszym pomiarze z kanału nastąpi automatyczne rozpoczęcie pomiaru na kolejnych kanałach.

czwartek, 26 listopada 2015

Programowa oraz sprzętowa likwidacja drgań od przycisków

W tym poście opiszę sposób pozbycia się drgań jakie występują w trakcie wciśnięcia przycisku. 

Wstep


Przyciski nie zabezpieczone w żaden sposób powodują znaczne drgania, które mogą np. zliczyć za dużą liczbę wciśnięć. Spowodowane jest to drganiami styków w trakcie przełączania. Należy je w miarę możliwości eliminować czy to bezpośrednio w programie, czy poprzez dodanie dodatkowych elementów do schematu.

środa, 25 listopada 2015

[7] STM32 M3 - Nucleo - F103RB - DMA, Timer

W tym poście opiszę w jaki sposób odczytać dane z ADC poprzez DMA.

Wstęp


DMA (ang. Direct Memory Access) jest to bezpośrednio dostęp do pamięci. Pozwala to zminimalizowanie zadań wykonywanych przez mikrokontroler. Jeśli nie potrzebuje on dostępu do magistrali danych, wtedy przesyłanie może odbywać sie w tle, w tym czasie możliwe jest wykonywanie przez niego innych czynności.

Normalny transfer danych bez użycia DMA polega na wyznaczeniu przez mikrokontroler adresu komórki źródłowej oraz docelowej. W następnym kroku dokonywane jest przesłanie danych.

wtorek, 24 listopada 2015

Przeróbka zasilacza komputerowego na zewnętrzny

W tym poście opiszę w jaki sposób dokonać przeróbki zasilacza komputerowego na zasilacz zewnętrzny. Sposób przeróbki przedstawię na przykładzie zasilacza firmy Dell ps-5141-2d1 145W. Przeróbka sama w sobie jest bardzo prosta, nie ma tutaj nic skomplikowanego.

Wstęp


Przeróbkę należy rozpocząć od przetestowania samego zasilacza. Można go przeprowadzić na dwa sposoby. Pierwszy z nich polega podłączeniu go do komponentów komputera stacjonarnego. Drugi natomiast można przeprowadzić poprzez podłączenie pomiędzy pin PS ON a GND kawałka drutu. Wcześniej należy obciążyć zasilacz jakimś elementem może to być np. żarówka bądź wiatrak komputerowy. Po obciążeniu i zwarciu przewodów wiatrak, który znajduje się w zasilaczu, powinien zacząć się obracać. Oznacz to, że wstępny test zasilacza przeszedł pomyślnie. Wobec tego można przejść do kolejnych elementów sprawdzania.



Rys. 1.1. Zasilacz Dell PS-5141-2d1 [2]

czwartek, 19 listopada 2015

[1a] STM32 M3 - Nucleo - F103RB - Przemapowanie pinów

Tym razem dosyć krótki wpis w którym chciałbym zaprezentować w jaki sposób dokonać przemapowania pinów oraz dla jakich układów istnieje możliwość wykonania takiej zmiany.

Przeniesienie funkcji polega na zmianie wyprowadzeń danej funkcji na inne piny mikrokontrolera. Może to zostać dokonane tylko dla określonych wyprowadzeń dla danej funkcji. Możliwe jest przeniesienie takich elementów jak: 
  • osclator zewnętrzny;
  • timer 1, 2, 3, 4;
  • USART 1, 2, 3;
  • CAN;
  • I2C;
  • SPI 1;

[6a] STM32 M3 - Nucleo - F103RB - PWM

Ten post jest kontynuacją Timerów. Opiszę w nim sposób generacji sygnału PWM.

Wstęp


Sygnał PWM jest najczęściej wykorzystywany do sterowania silnikami elektrycznymi prądu stałego jak i zmiennego oprócz tego wykorzystuje się je do sterowania temperaturą czy natężeniem światła.

Ogólnie największe zastosowanie jest w układach które potrzebują dużej wartości prądu do zasilania bądź wymagana jest duża moc. 

środa, 18 listopada 2015

[6] STM32 M3 - Nucleo - F103RB - Konfiguracja timerów

Ten post będzie dotyczył konfiguracji timerów dla STM32.

Wstęp


Mikrokontroler F103RB pozwala na obsługę czterech wbudowanych timerów. Poniżej przedstawiam dokładne informacje zaczerpnięte z dokumentacji:

Timer
Rozdzielczość
Zliczanie
Dzielnik
Kanały
Tim1
16 bit
Góra, dół, góra/dół
1 do 65536
4
Tim2..4
16 bit
Góra, dół, góra/dół
1 do 65536
4

Oprócz informacji wymienionych w tabeli timery oferują także:

wtorek, 17 listopada 2015

[5] STM32 M3 - Nucleo - F103RB - Przerwania NVIC i EXTI

W tym poście chciałbym opisać sposób obsługi przerwań NVIC i EXTI przez mikrokontrolery STM32.

Wstęp


Przerwanie jest to pewien sygnał, który zostaje zgłoszony do mikrokontrolera w momencie wyłapania przerwania. Na czas obsługi przerwania układ zawiesza wykonywanie pozostałych operacji, po czym przechodzi do wykonania operacji w przerwaniu. Po jej wykonaniu mikrokontroler wraca do normalnej pracy. W momencie wywołania sygnału układ zapisuje swój aktualny stan, po to by po powrocie do normalnej pracy zacząć działanie od przerwanej czynności.

niedziela, 15 listopada 2015

[19] Arduino - Przerwania

Tym razem opiszę sposób obsługi przerwań sprzętowych w Arduino.

Wstęp


Z przerwań sprzętowych można wybrać takie, które są generowane zewnętrzne (np. od przycisku) oraz takie które działają na zmiany stanu pinu. Oprócz tego przerwania mogą być jeszcze generowane poprzez timery.

W Arduino Uno przerwania z zewnętrznych urządzeń można ustawić na pinach 2 (Int 0) i 3 (Int 1). 

Przerwania mogą być wywoływane w następujących sytuacjach:
  • Gdy na pinie wystąpi stan niski (LOW);
  • Jak nastąpi zmiana stanu na pinie (CHANGE);
  • Gdy wystąpi narastające zbocze sygnału (RISING);
  • Przy opadającym zboczu sygnału (FALLING);

[18] Arduino - Pamięć EEPROM

W tym poście chciałbym opisać sposób obsługi pamięci EEPROM.

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

czwartek, 12 listopada 2015

[4a] STM32 M3 - Nucleo - F103RB - USART Przerwania

Tym razem chciałbym trochę rozwinąć zagadnienia związane z wykorzystywaniem interfejsu USART, poprzez dodanie przerwań NVIC.

Wstęp


Ustawienie przerwania pozwoli mikrokontrolerowi na przerwanie wykonywanej czynności i wykonanie procedury znajdującej się w funkcji obsługi tego przerwania. Dzięki temu możliwe będzie wyświetlenie przesłanych znaków w trakcie wykonywania innych operacji w układzie.

[4] STM32 M3 - Nucleo - F103RB - USART

Tym razem opisze sposób obsługi USART. Niewiele się będzie to różnić od przykładu opisanego prze zemnie dla mikrokontrolera F411RE.

Wstęp


Mikrokontroler znajdujący się na płytce Nucleo wyposażono w 3 interfejsy USART. Na płytce także znajduje się konwerter USART na USB. Dzięki temu nie trzeba wykorzystywać dodatkowego zewnętrznego urządzenia.

środa, 11 listopada 2015

[3] STM32 M3 - Nucleo - F103RB - Przetwornik ADC

W tym poście chciałbym opisać sposób obsługi przetwornika analogowo cyfrowego.

Wstęp


W opisywanym mikrokontrolerze zastosowano dwa 12 bitowe przetwoniki ADC. Każdy z tych przetworników wyposażono na wejściu w multiplekser. Pozwala on na odczytywanie danych z 16 linii wejściowych

Przetworniki są 12 bitowe oznacza to, że otrzymana wartość napięcia będzie przetwarzana na jej reprezentację cyfrową z zakresu od 0 do 4096. Obsługiwane są piny od 0 do 15. Do kanału 16 podłączony został wbudowany czujnik temperatury układu. Natomiast do kanału 17 podłączone zostało napięcie referencyjne.

poniedziałek, 9 listopada 2015

[2] STM32 M3 - Nucleo - F103RB - Taktowanie, licznik SysTick

Tym razem chciałem przedstawić sposób obsługi timerów w mikrokontrolerze z rdzeniem Cortex M3. Opiszę sposób inicjalizacji timerów oraz zastosowanie licznik SysTick jako pętli opóźniającej.

Wstęp


W tym układzie jest możliwość obsługi 7 wbudowanych timerów. Z czego do użytku typowego wykorzystuje się cztery z nich.

  • Cztery 16 bitowe timery;
  • Dwa układy czuwające (Watchdog);
  • Jeden Systick - jest to 24 bitowy licznik zliczający w dół od zadanej wartości.

Taktowanie


Układ taktowany jest z wewnętrznego oscylatora. Jego częstotliwość taktowania wynosi 8MHz. Przy korzystaniu z powielacza częstotliwości sygnał jest odpowiednio zwiększany do pożądanej wartości. Następnie ustawiamy wartość PLLMul, która przemnaża podawaną częstotliwość z HSI podzieloną przez 2. Wartość PLLMul można wybrać z przedziału od 2 do 16.

sobota, 7 listopada 2015

[1] STM32 M3 - Nucleo - F103RB - GPIO

Niedawno rozpocząłem przygodę z mikrokontrolerami z rdzeniem Cortex M3. W związku z tymn na początek, chciałbym przedstawić sposób obsługi portów wejścia wyjścia tego układu. 
Programy zamieszczone w tym poście zostały przetestowane na płytce Nucleo F103RB.

Inicjalizacja


Podstawową rzeczą od jakiej należy zacząć programowanie linii GPIO jest ich odpowiednia inicjalizacja. W tym mikrokontrolerze każdy pin może zostać zdeklarowany jako wyjście typu Push Pull lub jako Open Drain. W przypadku deklaracji pinu wejściowego możliwe jest ustawienie rezystora podciągającego (Pull Up lub Pull Down) lub całkowite jego wyłączenie. Kolejną możliwością jest deklaracja pinu jako wejście alternatywne (Alternate Function). Ta opcja stosowana jest w przypadku stosowania interfejsów komunikacyjnych takich jak np. SPI.

Ostatnim elementem jest częstotliwość działania GPIO. Od tego parametru zależy jak często będzie możliwa zmiana stanu na linii. Im częściej taki stan będzie zmieniany, tym większy będzie poziom emitowanych zakłóceń elektromagnetycznych (EMC).

środa, 4 listopada 2015

[4] Płytka z mikrokontrolerem Atmega328

W tym poście chciałbym przedstawić prosty, szybki projekt płytki drukowanej z mikrokontrolerem Atmega328.

Schemat


Schemat składa się z dwóch głównych elementów, jednym z nich jest układ zasilający. Ja wykorzystałem stabilizator 5V LM7805. Podłączony razem z diodami zabezpieczajączymi 1n4004 oraz kondensatorami filtrującymi.
Dioda D1 zabezpiecza układ przed wyższym napięciem, pozwala na szybsze odcięcie zasilania. Dioda D2 chroni przed odwrotnym wpięciem przewodów zasilających.

Rys. 1.1. Zasilanie układu

wtorek, 3 listopada 2015

[4] Excel VBA - zliczanie liczby otworzeń dokumentu

Tym razem chciałem przedstawić proste makro, którego zadaniem jest zliczanie liczby otworzeń dokumentu. 

Program


Makro tego typu musi być umieszczone w Microsoft Excel Object, ten skoroszyt (ang. ThisWorkbook). Nie tworzy się go poprzez dodanie nowego modułu w VBA, ponieważ w takim przypadku nie zadziała.

poniedziałek, 2 listopada 2015

[17] Arduino - SPI, cyfrowy potencjometr MCP4231

Tym razem przedstawię sposób komunikacji poprzez szeregowy interfejs SPI. W przykładzie wykorzystam cyfrowy potencjometr MCP4231.

Wstęp


SPI (ang. Serial Peripheral Interfejs) jest szeregowym interfejsem urządzeń peryferyjnych.

Komunikacja odbywa się z wykorzystaniem trzech linii:

SCLK (ang. Serial Clock) - sygnał zegarowy. Odpowiedzialny za taktowanie układu.
MISO (ang. Master Input Slave Output) - Przesyła dane z układu peryferyjnego.
MOSI (ang. Master Output Slave Input) - Wysyła dane do układu peryferyjnego.