O ile pisanie kodu na MCU jest zwykłym zajęciem o tyle pisanie kodu nieblokującego jest już z pogranicza sztuki :). Taką stawiam tezę. Większość z nas hobbystów standardowo pisze kody blokujące bo tak jest najprościej. Jeśli chcemy jednak iść dalej i wzbić się ponad przeciętność :) ,stawiać kolejne kamienie milowe w swoim rozwoju w zakresie programowania MCU to prędzej czy później staniemy przed zagadnieniem kodu nieblokującego. Odróżnijmy jednak tutaj naukę pisania kodu nieblokującego od "wyklikania" takiego kodu za pomocą konfiguratorów kodu. Po co mamy sobie zawracać głowę nauką czegokolwiek jeśli kod do nieblokującej obsługi np. I2C możemy "wyklikać" w STM32 CUBE MX . Jeśli ktoś chce być znudzonym niewolnikiem biblioteki jednego producenta to poprzestanie na tym . Ja uważam , że takie biblioteki oczywiście są potrzebne ale zabijają w człowieku kreatywność. W przypadku kodu nieblokującego w zasadzie możemy śmiało mówić o projektowaniu takiego kodu a nie samym pisaniu. Często trzeba się posłużyć grafami np. w języku UML aby opisać zależności w kodzie . Jest to kawał sporej wiedzy po przyswojeniu której staniemy na wyższym "levelu" :) . Patrzmy w górę ku gwiazdom a nie pod nogi :).
Blog jest formą pamiętnika technicznego, upamiętniający moją przygodę z mikrokontrolerami PIC firmy Microchip. "Per aspera ad astra..."
wtorek, 11 stycznia 2022
sobota, 18 grudnia 2021
STM32G0 - Bare Metal i zabawy z zegarkiem Microchipa MCP79410
W procesie projektowania i budowania mojego super zegarka , który będzie poligonem doświadczalnym w zakresie programowania , chodzą mi po głowie różne pomysły. Jednym z takich pomysłów jest zastosowanie dwóch MCU z dwóch konkurencyjnych firm tj. STM i Microchip. Ponieważ docelowo mój zegarek będzie miał dwie płytki : front i tył, dlatego jedną płytkę obsadzę STM32G0 a drugą PIC32CM lub ATSAML. Tym samym podnoszę sobie poprzeczkę i nie pójdę na łatwiznę w postaci MCU 8 bit Microchipa. Płytka frontowa zegarka z STM32G0 jest już na ukończeniu. Zabieram się za uruchomienie zegarka MCP79410 przy pomocy MCU STM32G071. Programuję w stylu Bare Metal czyli za pomocą rejestrów bez użycia HAL .
środa, 6 października 2021
Zegar LED czyli od lamera do Super Bohatera :)
Poczyniłem kilka lat temu projekt zegarka LED. Mózgiem zegarka był AVR,
wtedy jeszcze nawet nie słyszałem o PIC-ach :). Była to moja pierwsza
"poważna" konstrukcja oparta o mikrokontroler, która po dzień dzisiejszy
napawa mnie satysfakcją i dumą. Wykonałem kilka takich zegarków dla rodziny i
chodzą bezawaryjnie od lat. Zegarek stał się przyjacielem domu.
Inaczej spogląda się na twór własnej pracy a inaczej na gotowy produkt
kupiony w sklepie. Postanowiłem stać się ponownie Super Bohaterem i
wykonać udoskonalony produkt tak, aby cieszył oko domowników przez kolejne lata. Tym razem zegarek będzie większy,
inteligentniejszy i ładniejszy :). Czyli zrobię sobie zegarek , który w
chwilach niepowodzeń pogada ze mną , wysłucha , udzieli rad i porad
w tym psychoterapeutycznych :). Czyli zegarek psychoterapeuta. No okay ale taki to dopiero zrobię w wersji nr 3. :).
wtorek, 18 maja 2021
Interfejsy jako jedna z technik tworzenia kodu w embedded - zajęcia praktyczne
Sztuką jest biegle opanować tworzenie modułów oprogramowania nadających się do wielokrotnego wykorzystania, które stanowią budulec dla dużych i niezawodnych aplikacji. W przeciwieństwie do nowoczesnych języków obiektowych, język C nie ma zbyt wielu mechanizmów pozwalających łatwo tworzyć interfejsy programisty (API), a tym bardziej mechanizmów zachęcających do opracowywania takich interfejsów. Większość programistów C korzysta na co dzień z różnego rodzaju gotowych API i bibliotek je implementujących, ale względnie niewielu tworzy i udostępnia nowe API ogólnego przeznaczenia.
sobota, 8 maja 2021
Maszyna stanów przyjaciel embedownika :)
Maszyna stanów skończonych to pojęcie abstrakcyjne , definiuje zachowanie systemów dynamicznych jako maszyny
o skończonej liczbie stanów i skończonej liczbie przejść pomiędzy
tymi stanami. Definicja ta wydaje się dość abstrakcyjna , ale lepszej chwilowo nie znalazłem :). Maszyny stanów
skończonych odgrywają bardzo ważną rolę w programowaniu
w szczególności w świecie mikrokontrolerów. Umożliwiają m.in panowanie nad rozbudowaną sekwencją zdarzeń w programie i zwiększają znacząco niezawodność kodu. W wielu przypadkach maszyna stanów w połączeniu z przerwaniami może okazać się lepszym wyborem niż np. RTOS ,choć z drugiej strony nie w każdym przypadku maszyna stanów znajdzie zastosowanie. Bardzo powszechnym obecnie nurtem jest stosowanie maszyny stanów do nieblokującej obsługi interfejsów np.I2C, SPI, UART. W szczególności ten nurt możemy zaobserwować w bibliotekach Microchipa gdzie np. taki framework jak HARMONY "wypluwa" standardowo kod oparty o maszynę stanów. Ale i w MCC widzę , że maszyna stanów zaczyna być częstym gościem . Skoro producenci MCU opierają swoje biblioteki o maszynę stanów to znaczy, że coś w tym musi być I dlatego warto temu zagadnieniu przyjrzeć się bliżej.
poniedziałek, 3 maja 2021
STM32G0 - EXTI , konfiguracja przerwania zewnętrznego.
Konfiguracja przerwania zewnętrznego w STM32G0 dla wybranego źródła może być nie lada wyzwaniem dla osoby , która po raz pierwszy zetknie się z tym zagadnieniem. STM pogmatwał tutaj trochę i przynajmniej na początku odczujemy dyskomfort konfigurując ten moduł. W artykule postaram się pokazać jak poprawnie skonfigurować wybrany pin do współpracy z przerwaniem zewnętrznym.
czwartek, 29 kwietnia 2021
STM32G0 - randka z MDK ARM
MDK Microcontroller Development Kit firmy Keil to najwyżej oceniane w branży zintegrowane środowisko do programowania i debugowania MCU z architekturą ARM. Jak pisze producent, MDK jest najbardziej wszechstronnym rozwiązaniem programistycznym dla mikrokontrolerów opartych na architekturze ARM i zawiera wszystkie komponenty potrzebne do tworzenia, budowania i debugowania aplikacji wbudowanych. Jeśli na rynku pojawi się jakiś nowy MCU zbudowany w oparciu o architekturę ARM wydany przez dowolnego producenta to pierwszym środowiskiem w którym on się pojawi będzie MDK Keila. W zasadzie MDK jest wzorem środowiska do którego reszta może tylko się próbować równać. W artykule zerknę na środowisko MDK przez pryzmat STM32G0.
wtorek, 13 kwietnia 2021
STM32G0 - Hello World w Segger Embedded Studio
Jestem już w posiadaniu mojej płytki dla STM32G0. Jest fajna, jest czarna i oczy cieszy. Uśmiech na gębie od ucha do ucha. Na płytce dałem niebieskiego LED-a do wykorzystania przez użytkownika, czerń z niebieskim w półmroku powala :). Lubię cieszyć się z rzeczy prostych. Czas sprawdzić czy wszystkie komponenty czyli IDE i programator będą współpracować z moją płytką. Ostatnio kolega śmiał się ze mnie, że programuję MCU nie posiadając go fizycznie na płytce :). No tak jest najzabawniej :). A śmiech służy zdrowiu :). W artykule, napiszemy pierwszy program w ultra szybkim i lekkim środowisku SEGGER-a i za pomocą miluśkiego programatorka J-Link Edu Mini, spróbujemy wgrać wsad do STM32G071KBT6 , który znajduje się na mojej płytce. Życzę sobie powodzenia :).
sobota, 3 kwietnia 2021
STM32G0 - I2C , uruchomienie sterownika dotyku CAP1296 firmy Microchip .
Zadanie jakie sobie wytyczyłem tym wpisem to zapoznanie się z interfejsem I2C w STM32G0 . Ale aby zapoznanie nie było nudne, spróbuję uruchomić przy okazji sterownik dotyku Microchipa, CAP1296. W STM32G0 w wersji 32 pin, której używam mamy do dyspozycji dwa interfejsy I2C. Przy czym ten drugi czyli I2C2 jest trochę wykastrowany z funkcjonalności w stosunku do pierwszego czyli I2C1. Ale nie będzie to przedmiotem moich dociekań. Oba interfejsy oprócz standardowych prędkości 100 i 400 kHz mają możliwość pracy z prędkością 1 Mbit/s.
niedziela, 28 marca 2021
STM32G0 - ustawienie zegara.
W STM32G0 mamy do dyspozycji cztery podstawowe źródła taktowania.
LSI RC - wewnętrzny zegar 32kHz
LSE OSC - zewnętrzny zegar 32.768 kHz
HSI16 RC - wewnętrzny zegar 16 MHz
HSE OSC - zewnętrzny zegar 4-48 MHz
Dla wersji z USB mamy dodatkowo dedykowany wewnętrzny zegar HSI48 RC .
czwartek, 25 marca 2021
STM32G0 - zapis do rejestrów, wybrane zagadnienia.
W MCU 8-bitowych wszystko było proste, rejestry były proste, zapisy do nich były proste , życie było proste. W rejestrach nie było praktycznie pól bitowych o rozmiarze większym niż jeden bit, zapis sprowadzał się do operowania na jednym bicie .Człowiekowi było mało , więc stworzył 32-bitowe monstra. Rozmowa z nimi drastycznie się skomplikowała, wydłużyły się rejestry pojawiły się pola bitowe . Skoro rozmowa z MCU się skomplikowała to zaczęto wprowadzać dodatkową abstrakcje w postaci opasłych bibliotek typu HAL. Biblioteki tego typu uprościły komunikację użytkownika z rejestrami i migrację ale wprowadziły jednocześnie niepożądane zjawiska takie jak błędy związane z rozwojem biblioteki , dodatkowy narzut zasobów MCU jakie trzeba poświecić do obsługi biblioteki oraz wyraźne spowolnienie wykonywania zadań przez MCU w tym spowalnianie działania interfejsów komunikacyjnych . Dlatego w krytycznych czasowo aplikacjach tam gdzie nie można sobie pozwolić na luksus związany z wygodą stosowania biblioteki HAL, tam pożądana jest umiejętność rozmowy z MCU w technice określanej jako "Bare Metal" czyli to co w MCU 8-btowych było chlebem powszednim.
czwartek, 18 marca 2021
Projekt płytki dla STM32G0 i instalacja lekkiego środowiska firmy SEGGER.
Tak to nie pomyłka :), na moim blogu poświęconym głównie wyrobom firmy Microchip postanowiłem zajrzeć do ogródka "konkurencji" czyli do wyrobu firmy STM32. A cóż mnie skłoniło do takiego szalonego pomysłu ?, ano zwykła ludzka ciekawość :) i chęć poszerzenia swoich horyzontów wiedzy. Na widelec biorę przedstawiciela relatywnie nowej serii STM32G0. Budżetowy MCU oparty o rdzeń Cortex M0+. Ciekawostką jest tutaj to, że w tej serii STM próbował poprawić odporność na zakłócenia EM. Generalnie z tego co wiem to STM-y słabo wyglądały na tym polu. Drugą cechą STM-ów jest relatywnie słaba stabilność zegarów RC, przez co np. użycie USB bez zewnętrznego kwarca nie jest tutaj zalecane. W serii STM32G0 producent deklaruje, że stabilność zegara RC została poprawiona.
poniedziałek, 15 marca 2021
USB w PIC32MM - uruchomienie przykładu z biblioteki Microchipa.
Tym razem krótki wpis w którym pokażę jak w ultraszybki sposób możemy uruchomić komunikację po USB pomiędzy komputerem a mikrokontrolerem PIC32MM. Dla przypomnienia seria PIC32MM firmy Microchip to segment tanich i sprytnych mikrokontrolerów. Jest to bardzo udana seria Microchipa, którą w sposób łatwy zaprogramujemy bez użycia "ciężkich" bibliotek HAL-o podobnych. Jest to jedyna seria 32-bitowa konfigurowalna w MPLABX-IDE za pomocą wtyczki MCC ,co powoduje, że kontakt z tym mikrokontrolerem to czysta przyjemność. Ponieważ PIC32MM w standardzie ma na pokładzie USB, postanowiłem zobaczyć czy to działa :). Poszedłem w tym przypadku maksymalnie na skróty i użyłem przykładu Microchipa do uruchomienia komunikacji. Przykład ten zawarty jest w standardowej bibliotece/stosie USB , który dołączamy we wtyczce MCC. Pokażę zatem jak to ugryźć.
czwartek, 11 marca 2021
PIC18F04Q41 z rozbudowanymi peryferiami analogowymi
Microchip konsekwentnie rozbudowuje portfolio MCU 8-bitowych. Tym razem mamy modele w małych obudowach 14 i 20 pin (w tym mini-obudowa typu SOIC). Nowymi przedstawicielami MCU są np. PIC18F06Q41 z rozbudowanymi peryferiami analogowymi i PIC18F06Q40 bez takiej rozbudowy ale dostępny w obudowie 3x3 mm !!!. Standardem już u Microchipa staje się wyposażenie MCU 8-bitowych w kontroler DMA co dotychczas było domeną tylko MCU 16-bit i 32-bit. Wyjątkowo dam przekierowanie do ciekawego artykułu na portalu mikrokontroler.pl . Świetny artykuł Pana Tomasza Jabłońskiego. Zachęcam do zapoznania się z nim i poszerzenia swoich horyzontów wiedzy :).
sobota, 30 stycznia 2021
CAP1296 - sterownik dotyku od Microchipa i pierwsze uruchomienie na najnowszym PIC18F47Q84.
Sterownik CAP1296 umożliwia w prosty sposób zrealizowanie dotykowego interfejsu sterującego w naszych projektach. Do dyspozycji mamy 6 kanałów. Sterownik umożliwia dostep do takich funkcjonalności jak Press and Hold , Power Button, Proximity, Multiple Button Pattern Detection .Rozmowa ze sterownikiem odbywa się za pomocą interfejsu I2C , dostępna jest prędkość 400 kHz. Sterownik pracuje w ekosystemie napięciowym 3.3V oraz 5V. Obudowa jaką ja wybrałem do testów tego sterownika to SOIC14.
Subskrybuj:
Posty (Atom)










