wtorek, 29 grudnia 2015

C - Znajdowanie minimum i maksimum ciągu liczbowego

W tym poście przedstawię krótki program, który pozwala na znalezienie wartości minimalnej i maksymalnej podanego ciągu liczbowego. Wykorzystana została funkcja losująca liczbę, które zostały wpisywane do tablicy.

poniedziałek, 28 grudnia 2015

C - Wskaźniki

W tym poście chciałbym opisać sposób deklarowania wskaźników, oraz opisać po co i do czego się je stosuje.

Wskaźnik jest to specjalny rodzaj zmiennej, który przechowuje jej adres . Pozwala na wskazanie miejsca w jakim została ona zapisana. Dzięki nim możliwe jest współużytkowanie pamięci przez różne funkcje. Daje to możliwość ograniczenia ilość wykorzystywanej pamięci. Właśnie po to przekazywany jest jej adres, tak aby inna funkcja wiedziała gdzie znaleźć daną zmienną.

Wskaźniki można wykorzystać w następujący sposób:

  • Deklaracja wskaźnika do obiektu określonego typu (Typ *NazwaZmiennej) np. char *Znak;
  • Pobranie wartości z adresu zmiennej ( *NazwaZmiennej) np. *Znak;
  • Wyciągnięcie adresu podanej zmiennej ( &NazwaZmiennej) np. &Znak;
Poniżej przedstawię różne programy prezentujące możliwości pracy z wskaźnikami.

czwartek, 24 grudnia 2015

[12] STM32 M3 - Nucleo - F103RB - Wyświetlacz Nokia 5110 SPI

Ostatnio opisywałem sposób obsługi tego wyświetlacza przez mikrokontroler Atmega328 na arduino. Tym razem przyszła pora na odpalenie tego samego modułu na STM32. Sposób programowania i inicjalizacji jest bardzo podobny, właściwie jedyną różnicą są tutaj odpowiednie ustawienia i deklaracje poszczególnych portów oraz interfejsu SPI.

Wstęp


Poniżej przedstawiam schemat blokowy wyświetlacza, który został zaczerpnięty z dokumentacji:

Rys. 1. Schemat blokowy wyświetlacza [1]

C - Operacje na bitach

W tym poście chciałbym zapisać sposoby wykonywania operacji na bitach.

Rodzaje operacji:


Głównym wykorzystywanym znakiem jest << lub >>. Informuje on w którą stronę dane będą przesuwane czy w stronę wyższej potęgi (<<), czy może w stronę niższej (>>).

poniedziałek, 21 grudnia 2015

[0] PCB - O czym należy pamiętać tworząc płytkę PCB

W tym poście chciałbym przytoczyć kilka istotnych zasad jakimi należy się kierować w trakcie wykonywania własnego projektu płytki PCB.


Odpowiednio dobrane elementy


Pierwszą rzeczą jest odpowiednie dobieranie elementów elektronicznych. Należy się upewnić, że dany element jest w takiej obudowie jaką posiadamy, bądź jaka jest do kupienia. Trzeba zwracać uwagę czy elementy na siebie nie nachodzą oraz czy są odpowiednio rozmieszczone i będzie możliwość ich łatwego przylutowania np. nie należy prowadzić ścieżek dla golpinów przewlekanych po stronie ich odbudowy plastikowej. Ponieważ podczas lutowania można bardzo łatwo ją uszkodzić bądź samo przylutowanie nie będzie możliwe i będzie trzeba płytkę przerabiać i wytrawiać ponownie.

[0] PCB - Prowadzienie połączeń

Tym razem chciałbym opisać sposoby prowadzenia ścieżek w programach, oraz zasady jakimi należy się kierować podczas ich wykonywania.

Sposoby prowadzenia ścieżek


Można wyróżnić sposoby ręczny oraz automatyczny.

Sposób drugi jest nie do końca odpowiedni. Pozwoli on co prawda na poprowadzenie połączeń lecz często będą one chaotyczne i niedokładnie. Natomiast jest on wygodny do prowadzenia pary różnicowej, gdzie w programie definiuje się odpowiednie parametry, po czym są one robione automatycznie. Dodatkowa zaleta autorutera pojawia się w tworzeniu obwodów bardzo prostych albo bardzo skomplikowanych. W takim wypadku po zdefiniowaniu warunków można znacznie przyśpieszyć pracę. Funckje autorutera można także wkorzystać do prowadzenia pojedyńczych połączeń, co w gąszczu innych może być bardzo pomocne.

poniedziałek, 14 grudnia 2015

[0] PCB - Płaszczyzna masy, zasilanie w płytkach drukowanych

W tym poście chciałbym opisać sposoby prowadzenia płaszczyzny masy i zasilania na płytkach drukowanych.

Wstęp


Dobrze zaprojektowany obwód masy pozwala na zapewnienie odpowiednich parametrów impedancyjnych oraz możliwość pracy urządzeń z wysoką rozdzielczością. Ma to duże znaczenie zwłaszcza dla układów analogowych.

Ważne znaczenie mogą mieć takie parametry jak grubość i szerokość warstwy ścieżek, grubość warstwy miedzi, długość kształt ścieżek, liczba przelotek bądź podłoże na którym ścieżki zostały wyłożone.

C - Zmiana wartości całkowitej na znakową

W tym poście opiszę w jaki sposób dokonać zmiany z postaci liczbowej całkowitej do postaci znakowej.

Aby dokonać takiej konwersji najlepiej wykorzystać funckję itoa.

[11] STM32 M3 - Nucleo - F103RB - Wyświetlacz ze sterownikiem HD44780

Ostatnio zaprezentowałem w jaki sposób obsłużyć wyświetlacz ze sterownikiem HD44780 dla STM32F4. Tym razem chciałem przedstawić przerobiony program, który pozwoli bez najmniejszych problemów obsłużyć taki wyświetlacz na płytce z rdzeniem M3. 

Główne funkcje programu oraz dostępy do rejestrów nie uległy zmianie. Główne zmiany znajdują się w obrębie funkcji opóźniających oraz deklaracji pinów. 

Wyświetlacz należy podłączyć w następujący sposób:
  • VSS - GND
  • VDD - 5V
  • V0 - Kontrast do potencjometru
  • RS - GPIOA_5
  • RW - GND
  • E - GPIOA_6
  • D0-D3 - linie danych nie podłączone
  • D4 - linia danych - GPIOB12
  • D5 - linia danych - GPIOB13
  • D6 - linia danych - GPIOB14
  • D7 - linia danych - GPIOB15
  • A - na drugi potencjometr
  • K - GND podświetlenia

niedziela, 13 grudnia 2015

[4] STM32 M4F - Discovery - Wyświetlacz ze sterownikiem HD44780

W tym poście opiszę sposób obsługi wyświetlacza ze sterownikiem HD44780. Program został wykonany i przetestowany na płytce STM32 Discovery. 

Wstęp


Wyświetlacz alfanumeryczny LCD ze sterownikiem Hitachi HD44780 pozwala na obsługę dwóch wielkości ekrany 2x16 albo 4x20. Każdy ze znaków jest w rozmiarze 5x8 pikseli. 

Komunikacja może odbywać się w trybie 4 bądź 8 bitowym. Przeważnie wykorzystuje się komunikację 4 bitową, ponieważ oszczędza ona linie wejścia/wyjścia a pozwala na zrealizowanie tych samych funkcji.

Wyświetlacz posiada zapamiętane wartości znaków w kodzie ASCII w pamięci ROM. Dzięki temu w celu wyświetlenia konkretnego znaku wystarczy przesłać jego kod, a nie sam znak. Jeśli potrzebny jest znak z poza znaków ASCII, istnieje możliwość zdefiniowana własnego ciągu, maksymalnie ośmiu wzorców.

Rys. 1. Wygląd zewnętrzny wyświetlacza

sobota, 12 grudnia 2015

[10b] STM32 M3 - Nucleo - F103RB - Ekspander portów GPIO cz. 2 - obsługa przycisku

Ten post będzie kontynuacją poprzedniego, który dotyczył obsługi ekspandera portów GPIO. Tym razem przedstawię jak obsługiwać za jego pomocą przyciski.

Wszystkie istotne informacje zostały umieszczone bezpośrednio w programie w formie komentarzy.

Działanie polega na tym, że w momencie przyciśnięcia przycisku następuje zapalenie kolejnej diody. Zostały one podłączone poprzez rezystor 1kOhm do wyprowadzeń od GP0 do GP3. Do portu GP4 został podłączony przycisk.

W celu odczytania stanu panującego na linii należy wystawić stan niski na linię CS, po czym wysłać dane do rejestru, informując układ, że nastąpi odczytywanie danych. Dana z rejestu zostaje odczytana i przesłana i wysłana do mikrokontrolera.  Jeżeli przycisk został wciśnięty, czyli linia została zwarta do masy nastąpi wykonywanie zadania w pętli.

piątek, 11 grudnia 2015

[6] Płytki z elementami SMD do płytek stykowych

W tym poście chciałbym przedstawić sposób wykonania dosyć prostych przejściówek na różnego typu elementy SMD.

Wstęp


Może się tak zdarzyć, że będzie się chciało wykorzystać pewien element SMD do testów różnego rodzaju układów. A jak wiadomo testy najlepiej wykonywać na płytkach stykowych, bądź uniwersalnych. W takim przypadku zamiast lutować kabli do elementów służących do montażu powierzchniowego lepiej wykonać płytkę, zawierającą pady oraz wyprowadzenia na goldpiny. Dzięki temu w bardzo łatwy sposób można lutować bądź odlutowywać różnego typu układy. 

Poniżej przedstawiam wersję paru płytek PCB przystosowanych do łączenia elementów SMD do płytek stykowych. Wyprowadzenia układów są podłączone bezpośrednio do golpinów. W związku z tym wszystkie dodatkowe elementy należałoby umieścić bezpośrednio na płytce stykowej.

[10a] STM32 M3 - Nucleo - F103RB - SPI - Ekspander portów wejścia/wyjścia

W tym poście chciałbym opisać sposób podłączenia oraz obsługi ekspandera portów MCP23S08

Wstęp


Ekspander portów wejścia/wyjścia pozwala na zwiększenie liczby dostępnych pinów. Komunikacja przebiega poprzez interfejs SPI. W przypadku zakupy układu MCP23008 zamiast interfejsu SPI będzie dostępny I2C.

Rys. 1. Ekspander [microchip.com]

czwartek, 10 grudnia 2015

Sprawdzanie elementów elektronicznych - Kondensatory

W tym poście chciałbym opisać sposób sprawdzania kondensatorów.

Pomiary:


Przed przystąpieniem do pomiarów kondensator należy wcześniej rozładować. Dobrym sposobem jest przyłączenie do kondensatora rezystora o bardzo dużej wartości rezystancji.

Jeśli ktoś posiada tani miernik, który nie jest wyposażony w funkcję pomiaru pojemności, wtedy jedyną opcją jest sprawdzenie go omomierzem. Jeśli wartość rezystancji będzie rosnąć do wartości nieskończonej, wtedy na kondensatorze nie ma przebicia. Można przyjąć, że jest on sprawny, jednak nie ma się pewności co do wartości jego pojemności.

wtorek, 8 grudnia 2015

[20] Arduino - Wyświetlacz graficzny Nokia 5110

Tym razem chciałbym opisać sposób programowania wyświetlacza graficznego pochodzącego z telefonu Nokia 5110.

Wstęp


Wyświetlacz graficzny pochodzący z telefonu Nokia 5110 posiada rozdzielczość 84x48px. Do obsługi wykorzystuje on sterownik PCD8544. Cała komunikacja odbywa się poprzez interfejs SPI.
Wyświetlacz można zasilać wykorzystując napięcie z zakresu od 3,3V do 5V. 

Rys. 1. Wyświetlacz graficzny Nokia 5110.

poniedziałek, 7 grudnia 2015

Sprawdzanie elementów elektronicznych - Tranzystory

W tym poście zaprezentuję sposób sprawdzania miernikiem czy tranzystor jest sprawny.

Bipolarny NPN


Na początek idzie tranzystor bipolarny npn. Ja posłużę się elementem CTBC547B. 

Rys. 1. Tranzystor bipolarny

[I] STM32F4 - Discovery - Projekt - Wiatrak sterowany za pomocą PWM

Witam, tym razem chciałbym przedstawić projekt wykonany na STM32F4 - Discovery. Działanie programu polegało na sterowaniu współczynnikiem wypełnienia w celu regulacji prędkości obrotowej wiatraka. Współczynnik wypełnienia został przedstawiony na wyświetlaczu.

Wstęp


W skład tego projektu wchodzą:
  • Wiatrak 12V czteropinowy.
  • STM32F4 Discovery
  • Przyciski funkcyjne 3x
  • Wyświetlacz HD44780
  • Dioda LED

Sprawdzanie elementów elektronicznych - rezystor

Tym razem pierwszy post z serii w której chciałbym przedstawić w jaki sposób można sprawdzać elementy elektroniczne za pomocą miernika uniwersalnego. Pierwszym elementem będzie rezystor.

Rys. 1. Rezystory

piątek, 4 grudnia 2015

[10] STM32 M3 - Nucleo - F103RB - SPI opis oraz sposób programowania

Tym razem chciałbym zaprezentować sposób obsługi urządzeń za pomocą interfejsu SPI.

Wstęp


SPI (ang. Serial Peripheral Interface) jest to interfejs szeregowy stosowany do komunikacji pomiędzy różnymi układami. Obecnie jest jednym z częściej wykorzystywanych metod komunikacji pomiędzy urządzeniami.

Komunikacja odbywa się za pomocą trzech głównych linii:

  • MOSI (ang. Master Output Slave Input) - dane wysyłane z urządzenia sterującego (przeważnie mikrokontroler) do urządzenia peryferyjnego pod układ główny (np. czujnik wyświetlacz).
  • MISO (ang. Master Input Slave Output) - odwrotne działanie niż MOSI, z układu peryferyjnego do głównego,
  • SCKL, CLK, SPC (ang. Serial Clock) - jest to sygnał taktujący.
Dodatkowo często wykorzystywana jest linia SS, pozwala ona na wybranie układu podrzędnego, lub na wykonanie adresacji układów.

W czasie przesyłania danych jeden układ jest nadrzędny (master), drugi natomiast w tym czasie jest układem podrzędnym.

Rys. 1. Podłączenie modułów SPI [wikipedia]

środa, 2 grudnia 2015

Sprawdzenie akumulatora oraz alternatora

Tym razem chciałbym przedstawić krótki post, w którym opiszę jak sprawdzić czy akumulator oraz alternator są sprawne. Do tego celu jedynym potrzebnym urządzeniem będzie miernik uniwersalny.

Sprawdzenie akumulatora


Podstawowym pomiarem jaki należy wykonać jest sprawdzenie samego akumulatora. Należy to robić na zimnym silniku, najwcześniej około 2 godziny od zakończenia jazdy.

wtorek, 1 grudnia 2015

[9] STM32 M3 - Nucleo - F103RB - Wyświetlacz 7-seg

Tym razem przedstawię obsługę wyświetlacza 7-segmentowego za pomocą mikrokontrolera STM32.

Wstęp


Do obsługi wyświetlacza wykorzystuje gotowy moduł zaprezentowany razem z podpisanymi wyprowadzeniami na rysunku 1.1.

Rys. 1. Wyświetlacz 7 segmentowy

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.

sobota, 31 października 2015

[15] Arduino - Zapis na kartę SD

Tym razem przedstawię zapis danych na kartę SD.

[Źródło: https://botland.com.pl/akcesoria-do-kart-pamieci/1507-modul-czytnika-kart-sd-5903351241342.html]

czwartek, 29 października 2015

[3b] STM32 Nucelo F411RE - Obsługa wbudowanego USART-u, funckja printf

W tym poście pokaże jak obsłużyć układ USART z konwerterem wbudowanym w płytkę Nucleo

Wstęp


Wbudowany konwerter USART podłączony jest do USART2, który jest podłączony do pinów PA2 oraz PA3.
Układ wbudowany jest w płytkę, dzięki temu po podłączeniu do komputera i odpowiednim zaprogramowaniu można od razu z niego korzystać. Nie ma potrzeby stosowania dodatkowych elementów.

środa, 28 października 2015

[3] Excel VBA - Makro, mnożenie wartości w kolumnie

W tym poście chciałbym przedstawić makro przygotowane przeze mnie makro. Pozwala ona na zmianę wartości kolumny względem zdefiniowanego warunku. 

Makro


Ma ono za zadanie mnożenie liczb zaczynając od zaznaczonej kolumny, aż do napotkania pustego wiersza. Liczby podzielne przez dwa są mnożone razy 2, pozostałe natomiast są mnożone razy 3. Dodatkowo liczbą parzystym, przed pomnożeniem, zmieniona zostaje czcionka na kolor zielony.

[3a] Wysłanie danych z komputera - USART

Tym razem opiszę sposób przesłania danych z komputera poprzez port USART do mikrokontrolera.

Wstęp


Aby to wykonać taką transmisję należy odpowiednio zainicjalizować przerwania oraz jego obsługę dla wybranego USART-u. Należy ustawić wektor przerwać NVIC (ang. Nested Vector Interrupt Controller). Dzięki nim możliwe jest zatrzymanie działania programu, aby został wykonany inny fragment kodu zdefiniowany w procedurze obsługi przerwania.

Opisywany tutaj wektor przerwań pozwala na dynamiczną obsługę oraz wybranie ważniejszego przerwania. Możliwa jest obsługa do 256 różnych wywoływanych wektorów. Całość opisana jest w bibliotece misc.h. Nie będę się tutaj rozpisywał dokładnie nad jego zasadą działania, ponieważ zostanie to opisane w innym poście. 

wtorek, 27 października 2015

[2] STM32 Nucleo F411RE - ADC

W tym poście chciałbym omówić zasadę działania przetwornika analogo-cyfrowego ADC. Działanie będzie przedstawione w oparciu o płytkę Nucleo z mikrokontrolerem STM32F4. 

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

poniedziałek, 26 października 2015

[1] STM32F4 - Rejestry GPIO

Mikrokontroler posiada szereg portów, które składają się z 16 oddzielnych linii. Można wyróżnić następujące typy rejestrów:
  • Cztery rejestry konfiguracyjne;
  • Dwa rejestry danych;
  • Jeden rejestr ustawiania/resetowania;
  • Jeden rejestr zamykający;
  • Dwa rejestry posiadające różne funkcje;
Z rejestrów konfiguracyjnych można wyróżnić:
GPIOx_MODER - sposób wykorzystania portu (np. port wejścia/wyjścia),
GPIOx_OTYPER - typ konfiguracji portu (Open drain, Push/pull),
GPIOx_OSPEEDR - rejestr szybkości taktowania,
GPIOx_PUPDR - rejestr odpowiedzialny za rezystor podciągający (Pull-up/Pull-down).

W miejsce x wprowadza się nazwę portu np. A, B, D itp.

poniedziałek, 19 października 2015

[3] Attiny - Płytka z mikrokontrolerem

Tym razem chciałem przedstawić przygotowaną płytkę z mikrokontrolerem Attiny. Płykę wykonałem jakiś czas temu do jakiegoś kursu programu Eagle.

Schemat i PCB

niedziela, 18 października 2015

[2] Płytka testowa - wyświetlacz LCD 2x16

W tym poście przedstawię kolejną stosunkowo łatwą w przygotowaniu płytkę PCB zawierającą sześć przycisków oraz wyświetlacz LCD. 

Schemat


Na rysunku 1.1. przedstawiłem schemat elektryczny układu. Cały projekt został wykonany w programie Eagle.

[16] Arduino - I2C, obsługa czujnika temperatury TC74

Tym razem zaprezentuje sposób programowania czujnika temperatury TC74, działającego poprzez magistralę I2C.

Wstęp


I2C jest to magistrala dwukierunkowa, szeregowa, która służy do przesyłania danych. 

Do transmisji wykorzystywane są dwie linie: linia danych SDA (ang. Serial Data Line) oraz linie zegara SCL (ang. Serial Clock Line). Obie te linie muszą być podciągnięte do zasilania poprzez rezystory (ang. pull-up). Magistrala wykorzystuje tzw. logikę dodatnią. Oznacza to, że stan 0 odpowiada stanowi niskiemu, natomiast 1 to stan wysoki.

sobota, 17 października 2015

[13] Arduino - Tworzenie oddzielnego urządzenia

W tym poście pokaże w jaki sposób podłączyć mikrokontroler osobno, bez wykorzystywania płytki z programatorem Arduino.

Wstęp


Jeśli zaprojektowane urządzenie chcielibyśmy następnie odpiąć od płytki z Arduino i podłączyć pozostałe elementy bez wykorzystywania bazowej płytki Arduino należałoby dokonać odpowiedniego podłączenia dodatkowych elementów elektronicznych, które zapewnią poprawną pracę całego układu.

Głównie chodzi tutaj o wykonanie podstawowego połączenia mikrokontrolera i zapewnienie poprawnej filtracji zasilania. Dokładne elementy przedstawię w dalszej części.


piątek, 16 października 2015

[1] PCB - Płytka testowa - diody przewlekane, diody SMD

W tym poście przedstawię bardzo prosty projekt płytki zawierającej diody i wyprowadzenia do podłączenia dla mikrokontrolerów. Powstały one podczas nauki obsługi programu Eagle już jakiś czas temu.

Pierwszy projekt będzie zawierał 15 diod podłączonych do rezystorów oraz zestawu goldpinów. Na płytce znalazło się także miejsce trzy diody RGB. 

Płytki zostały w całości wykonane w programie Eagle.


[2] Excel VBA - Marko - Wpisywanie danych do pustej kolumny w tabeli

W tym poście przedstawię makro wyszukujące puste miejsce w tabeli i wprowadzające w nią podane przez użytkownika dane. Przy jego tworzeniu posłużę się makrem znalezionym przeze mnie jakiś czas temu w internecie, którego zadaniem było odnalezienie pustego miejsca w tabeli. I zaznaczenie tej kolumny.

[3] STM32 Nucleo F411RE - USART

W tym poście przedstawię podłączenie mikrokontrolera do komputera za pomocą UART-a.

Wstęp


UART (ang. Universal Asynchronous and Transmitter) jest to układ pozwalający na asynchroniczną transmisję informacji wykorzystującą port szeregowy. W tym układzie zawarte są dwa konwertery, jeden z nich służy do konwersji danych przesyłanych z komputera (równoległo-szeregowy - ang. parallel to serial), drugi natomiast działa odwrotnie (szeregowo-równoległy ang. serial to parallel). W skład UART-u wchodzi także bufor, który przechowuje dane tymczasowo w momencie wykorzystywania szybkiej transmisji. [1]

Pewną odmianą UART-u jest tzw. USART. Może on pracować w trybie synchronicznym jak i asynchronicznym.

środa, 14 października 2015

[1] Excel VBA - Makro podnoszące wartość do zadanej potęgi

Tym razem przedstawię pierwsze przygotowane prze zemnie makro. Jego zadaniem będzie podniesienie podanej wartości do potęgi, wypisanie jej na ekranie oraz w podanej komórce

wtorek, 13 października 2015

[0] Funkcja - Excel VBA - pierwsza prosta funkcja

W tym poście, w związku z tym, że rozpocząłem swoją przygodę z programowaniem w VBA chciałbym wrzucić przygotowaną przeze mnie bardzo prostą funkcję zmieniającą format daty.

niedziela, 4 października 2015

[1] STM32 Nuclo F411RE - Inicjalizacja GPIO I/O

Tym razem przedstawię sposób inicjalizacji portów GPIO, jakie są dostępne w wykorzystywanym prze zemnie mikrokontrolerze. Przedstawię też krótki program pozwalający na obsługę wbudowanego przycisku oraz diody.

Wstęp


W tej wersji Nucleo mamy do wyboru następujące wyprowadzenia kompatybilne z Arduino, oraz wyprowadzenia Morpho. W skład tych drugich wchodzą wszystkie dostępne funkcjonalne wyprowadzenia mikrokontrolera. Rozmieszczenie wszystkich pinów podano na rysunku 1.1. 


Rys. 1.1. Opis wyprowadzeń Nucleo F411RE

piątek, 2 października 2015

[12] Arduino - Wyświetlacz LCD 2x16, podłączenie, programowanie

W tym poście zaprezentuję obsługę wyświetlacza LCD 2x16.

Wstęp

Osobiście wolę ten sam wyświetlacz tylko wyposażony w konwerter I2C dzięki któremu ilość pinów jaka jest wymagana do podłączenia LCD do mikrokontrolera zostaje znacznie zmniejszona. 
Z drugiej strony wyświetlacz jest prawie 10 zł tańszy w porównaniu z odpowiednikiem z konwerterem. Wobec tego jeśli nie zamierzamy wykorzystywać wielu pinów do innych celów, ten wyświetlacz będzie lepszym rozwiązaniem.

Rys. 1.1. Wygląd zewnętrzny wyświetlacza

wtorek, 29 września 2015

[0] STM32 Nucleo - STM32F411RE Cortex M4 - Opis płyki

Tym razem chciałem zaprezentować mój nowy nabytek, którym jest płytka ewaluacyjna z mikrokontolerem STM32F411RET6. Zdecydowałem się na jej zakup ponieważ posiada bardzo duże możliwości w relatywnie niskiej cenie. Planuje poświęcić trochę czasu na naukę programowania tego rodzaju układów.

Wstęp


Głównym parametrem z jakiego zdecydowałem się na tą płytkę była jej cena (55zł), która jak na możliwości jakie zapewnia jest dosyć niska. Więc w związku z tym, że jestem osobą początkującą, takie rozwiązanie jak najbardziej mi wystarcza.


Rys. 1.1. STM32 NucleoF411RE - Wygląd zewnętrzny

czwartek, 24 września 2015

[11] Arduino - Obsługa serwomechanizmu

W tym poście chciałbym opisać sposób sterowania serwomechanizmem za pomocą Arduino Uno.

Wstęp


Serwomechanizm jest to zamknięty układ sterowania ze sprzężeniem zwrotnym. Sygnałem wyjściowym jest położenie, przyśpieszenie, prędkość lub najczęściej przesunięcie.
Gdy na linię danych podawany jest sygnał stały serwomechanizm się nie porusza, natomiast gdy sygnał się zmienia następuje ustawienie go w odpowiedniej pozycji.

wtorek, 22 września 2015

[II] Arduino - Projekt - Czterokanałowy termometr z prezentacją danych

Tym razem postanowiłem trochę polepszyć ostatnio prezentowany przeze mnie projekt na arduino. Do całości procesu dodałem dwa czujniki temperatury, jeden DS18B20 (w sumie będzie ich już trzy) oraz LM35 (analogowy czujnik temperatury).

Przygotowałem dwa programy jeden działający z na wyświetlaczu HD44780 2x16, natomiast drugi prezentuje dane poprzez port szeregowy.

wtorek, 15 września 2015

[I] Arduino - Projekt - Dwukanałowy czujnik temperatury z zapisem danych

W tym poście zamierzam opisać projekt trój kanałowego czujnika temperatury z zapisem danych na kartę SD oraz prezentacją danych na wyświetlaczu.

Wstęp

W moim projekcie posłużyłem się takimi modułami jak:

  • 1x Arduino Uno;
  • 3x Czujnik temperatury DS18B20;
  • 1x LCD 2x16 z konwerterem I2C LCM1602;
  • 1x Moduł czytnika kart SD, komunikacja przez SPI;
  • 1x Karta microSD. W moim przypadku była to karta micro SD 2Gb sformatowana w systemie plików FAT32. Do tego dołączony był adapter na kartę SD.
Rys. 1.1. Potrzebne elementy [1]

poniedziałek, 14 września 2015

[3] STM32F4 - ADC

W tym poście chciałbym przedstawić działanie ADC w STM32F4. Przykład zaprezentuje w oparciu o odczyt danych z potencjometru.

Podłączenie


W podłączeniu nie ma niczego skomplikowanego. Jeden pin podłączamy do PC0 (środkowy), pozostałe do masy i do zasilania 5V.

czwartek, 10 września 2015

[10] Arduino - Czujnik temperatury DS18B20

Tym razem zajmę się zaprogramowaniem czujnika temperatury DS18B20.

Opis.


DS18B20 jest to cyfrowy czujnik temperatury wyprodukowany przez firmę Dallas Semiconductor.

Rys. 1.1. Cyfrowy czujnik temperatury DS18B20 - wygląd zewnętrzny

czwartek, 3 września 2015

[8] Arduino - Sterowanie silnikiem DC

W tym poście opiszę sposób sterowania silnikiem prądu stałego przy pomocy Arduino.

Wstęp

Silniki prądu stałego zasilane są, jak sama nazwa wskazuje, prądem stałym. Pozwalają one na dokonanie zamiany energii elektrycznej na mechaniczną.

Potrzebują one większej wartości napięcia oraz prądu niż te, które może zapewnić Arduino. Często takie silniki wymagają napięcia rzędu 9-12V i prądu 1A. Oczywiście mowa tutaj o mniejszych silnikach, które możemy połączyć.

wtorek, 1 września 2015

[7] Arduino - Wyświetlacz LCD 2x16 HD44780 z konwerterem I2C

W tym poście chciałbym przedstawić sposób obsługi wyświetlacza LCD 2x16 ze sterownikiem HD44780 poprzez konwerter I2C LCM1602.

Wstęp


Opisywany wyświetlacz jest jednym z najbardziej rozpowszechnionych i wykorzystywanych alfanumerycznych wyświetlaczy. Posiada on sterownik HD44780.

Wykorzystywany konwerter pozwala na zmniejszenie linii danych z 8 (bądź częściej 4) na zaledwie 2. Oprócz tego nie trzeba dodatkowo podłączać podświetlenie oraz pozostałych pinów wyświetlacza.
Kontrast podświetlenia regulujemy za pomocą potencjometru zamontowanego obok układu konwertera.

poniedziałek, 31 sierpnia 2015

[2] STM32F4 - Discovery - Timery, PWM

Tym razem przedstawię sposób inicjalizacji timerów w mikrokontrolerze znajdującym się na płytce ewaluacyjnej STM32F4 - Discovery.

Wstęp


STM32F4 zawiera 14 wbudowany timerów. Każdy z zamontowanych mikrokontolerów w różnych płytkach ewaluacyjnych zawiera inną ilość timerów. Z tego powodu przed rozpoczęciem pracy z innym układem należy dokładnie sprawdzić instrukcję (ang. Manual).

wtorek, 25 sierpnia 2015

[0] STM32F4 - Discovery - Taktowanie

Tym razem chciałbym przedstawić możliwości taktowania mikrokontrolera zastosowanego w układzie STM32F4 - Discovery.

[1] STM32F4 - Discovery - Inicjalizacja GPIO

Podstawowym elementem w mikrokontrolerach jest poprawna inicjalizacja portów GPIO, W tym poście pokażę jakie są możliwości oraz co można ustawić.

Opis


W pierwszej kolejności należy wybrać odpowiednie opcje dla GPIO_InitTypeDef. Biblioteka oferuje użytkownikowi następujące parametry:
  • GPIO_Pin – Wybranie pinu bądź pinów dla którego zostaną ustawione wybrane parametry.
  • GPIO_Mode – Wybranie sposobu działania pinu.
  • GPIO_OType – Ustawienie trybu wyjściowego.
  • GPIO_PuPd – Wybranie rezystora podciągającego.
  • GPIO_Speed – Wybranie częstotliwości danego pinu.

piątek, 21 sierpnia 2015

[6] Arduino - Wyświetlacz 7 seg

Tym razem zajmę się połączeniem modułu wyświetlacza 7-segmentowego składającego się z czterech połączonych wyświetlaczy. Dzięki zastosowaniu takiego modułu mamy możliwość wyświetlania czterech odrębnych cyfr.

czwartek, 20 sierpnia 2015

[9] Arduino - LM35

W tym poście opisze sposób podłączenia oraz wykorzystania analogowego czujnika temperatury LM35. Odczytana wartość prezentowana będzie na monitorze portu szeregowego.

Część teoretyczna


LM35 jest to liniowy, półprzewodnikowy czujnik temperatury. Napięcie wyjściowe jest wprost proporcjonalne do odczytanej temperatury.

Rys. 1.1. Czujnik temperatury LM35 [1]

[5] Arduino - Generacja sygnału PWM

W tym wpisie chciałbym opisać PWM (ang. Pulse Width Generation). Przedstawię krótki opis teoretyczny wraz z praktycznymi przykładami.

PWM może zostać zastosowany np. do regulacji prędkości obrotowej wiatraka komputerowego. Przez co będzie możliwe podawanie napięcia zmiennego bardzo niskiego jak i wysokiego. 

niedziela, 9 sierpnia 2015

[4] Arduino - Ultradzwiękowy czujnik odległości HC-SR04

Opis teoretyczny.


Czujniki ultradźwiękowe emitują fale dźwiękowe o bardzo wysokiej częstotliwości. Są one wysyłane i odbijane od przeszkody. Przez co powstaje zjawisko nazywane powszechnie Echem.
Czujniki ultradźwiękowe charakteryzują się min. [1]:
  • Dużą rozdzielczością,
  • Szerokim zakresem pomiarowym,
  • Wysoką częstotliwością ultradźwięków,
  • Małą wartością dopuszczalnej odległości minimalnej,

niedziela, 26 lipca 2015

[3] Arduino - Diody led, ADC, fototranzysor

W tym poście przedstawię sposób podłączenia zestawu diod z [2] razem z fototranzystorem. Diody będą dynamicznie się zapalały w zależności od ilości światła jakie będzie pobierane przez fototranzystor.

WPROWADZENIE


Fotorezystor jest to element półprzewodnikowy, światłoczuły. Jego rezystancja ulega zmianie w zależności od ilości padającego światła.

sobota, 25 lipca 2015

[2] Arduino - Obsługa diod zewnętrznych


Dioda świecąca (LED)

Dioda elektroluminescencyjna (ang. Light-Emitted Diode) jest ona zaliczana do półprzewodnikowych przyrządów optoelektronicznych. 

Działanie oparte jest na zasadzie rekombinacji nośników ładunków. Występuje gdy elektrony przechodzą z poziomu elektrycznego wyższego na niższy. 

Dioda świecąca zawiera dwa wyprowadzenia anodę i katodę. Aby odpowiednio odróżnić jedno od drugiego należy zwrócić uwagę na wielkość płytki wewnętrznej (katoda będzie zawsze większa). Ta metoda daje 100% pewność na odróżnienie wyprowadzeń. Druga metoda opiera się o długości wyprowadzeń. Przeważnie nóżka krótsza jest katodą, natomiast dłuższa, jest to anoda.

czwartek, 23 lipca 2015

[1] Arduino - Mruganie diodą wbudowaną oraz zewnętrzną


PRZYKŁAD 1
Jako pierwszy program opisywane będzie sposób mrugania diodą wbudowaną oraz diodą zewnętrzną.
Pierwszy przykład pokazuje sposób mrugania diodą wbudowaną podłączoną do płytki Arduino Uno do pinu 13.