Jak MCU wpływa na ekran LCD i kwestie projektowe

2023-07-17

Klasyfikacja i zastosowanie mikrokomputera jednoukładowego
W zależności od typu pamięci, MCU można podzielić na dwa typy bez wbudowanej pamięci ROM i z wbudowaną pamięcią ROM. W przypadku chipów bez wbudowanej pamięci ROM należy je połączyć z zewnętrzną pamięcią EPROM (zwykle 8031); chipy z wbudowaną pamięcią ROM są dalej podzielone na wbudowaną pamięć EPROM (zwykle 87C51), wbudowaną maskę ROM MASK (zwykle 87C51) Chip to 8051), wbudowaną pamięć Flash (typowy chip to 89C51) i inne typy.
Zgodnie z przeznaczeniem można go podzielić na ogólnego przeznaczenia i specjalnego przeznaczenia; w zależności od szerokości magistrali danych i długości bajtów danych, które można przetworzyć jednocześnie, można ją podzielić na 8, 16 i 32-bitowe MCU.
Obecnie krajowy rynek aplikacji MCU jest najczęściej stosowany w dziedzinie elektroniki użytkowej, a następnie w dziedzinie przemysłu i rynku elektroniki samochodowej. Elektronika użytkowa obejmuje między innymi sprzęt AGD, telewizory, konsole do gier oraz systemy audio i wideo. Dziedziny przemysłowe obejmują inteligentny dom, automatykę, zastosowania medyczne oraz wytwarzanie i dystrybucję nowej energii. Dziedzina motoryzacji obejmuje samochodowe układy napędowe i systemy kontroli bezpieczeństwa itp.
Shenzhen Hongjia Technology Co., Ltd. specjalizuje się w badaniach i rozwoju, produkcji i sprzedaży ekranów LCD i ekranów dotykowych o przekątnej 1,14–10,1 cala, które można dostosować i zapewnia obsługę wyświetlaczy MCU, w tym interfejs SPI, interfejs MCU, interfejs RGB, Interfejs MIPI itp. Istnieje wiele rozmiarów i modeli. Można również zapewnić pasujący rezystancyjny ekran dotykowy i pojemnościowy ekran dotykowy.
Podstawowa funkcja mikrokomputera jednoukładowego

W przypadku większości MCU poniższe funkcje są najbardziej powszechne i podstawowe. W przypadku różnych MCU opis może być inny, ale w zasadzie są one takie same:

1. TIMER (timer): Chociaż istnieje wiele typów TIMERÓW, można je podzielić na dwie kategorie: pierwsza to TIMER ze stałym odstępem czasu, to znaczy czas jest ustawiany przez system i program użytkownika nie może być kontrolowany. Programom użytkownika dostępnych jest tylko kilka stałych przedziałów czasowych, takich jak 32 Hz, 16 Hz, 8 Hz itd. Ten rodzaj licznika czasu jest bardziej powszechny w 4-bitowych mikrokontrolerach, więc można go używać do implementowania powiązanych funkcji, takich jak zegar i synchronizacja .
Drugi typ to programowalny timer (programowalny timer). Jak sama nazwa wskazuje, czas taktowania tego typu Timera może być kontrolowany przez program użytkownika. Metody kontroli obejmują: wybór źródła zegara, wybór podziału częstotliwości (wstępne skalowanie), ustawienie prefabrykowanej liczby itp. Niektóre MCU mają wszystkie trzy jednocześnie, podczas gdy inne mogą mieć jeden lub dwa z nich. Ten rodzaj aplikacji Timera jest bardzo elastyczny, a faktyczne zastosowanie również stale się zmienia. Jednym z najczęstszych zastosowań jest wykorzystanie go do realizacji sygnału wyjściowego PWM.
Ponieważ źródło zegara można dowolnie wybierać, takie liczniki czasu są zwykle łączone z licznikami zdarzeń.
2. Porty IO: Każdy MCU ma określoną liczbę portów IO. Bez portów IO MCU utraci kanał komunikacji ze światem zewnętrznym. W zależności od konfiguracji portu IO można go podzielić na następujące typy:
Czysty port wejściowy lub czysty port wyjściowy: ten typ portu IO jest określony przez konstrukcję sprzętową MCU. Może być jedynie wejściem lub wyjściem i nie może być ustawiany przez oprogramowanie w czasie rzeczywistym.
Bezpośredni odczyt i zapis portów IO: Na przykład porty IO MCS-51 należą do tego typu portów IO. Podczas wykonywania instrukcji odczytu portu IO jest to port wejściowy; podczas wykonywania instrukcji zapisu portu IO, jest to automatycznie port wyjściowy.
Programowanie programu w celu ustawienia kierunku wejścia i wyjścia: wejście lub wyjście tego typu portu IO jest ustawiane przez program zgodnie z rzeczywistymi potrzebami, aplikacja jest stosunkowo elastyczna i można realizować niektóre aplikacje na poziomie magistrali, takie jak I2C magistrala, różne wyświetlacze LCD, magistrala sterująca sterownikami LED itp.
Podczas korzystania z portu IO należy pamiętać o ważnej kwestii: w przypadku portu wejściowego musi istnieć wyraźny sygnał poziomu, aby zapewnić, że nie będzie on pływał (można to osiągnąć poprzez dodanie modułu podciągającego lub podciągającego rezystor dolny); dla portu wyjściowego, jego wyjścia. Poziom stanu musi uwzględniać jego połączenie zewnętrzne i należy upewnić się, że w stanie gotowości lub statycznym nie ma źródła prądu ani ujścia.
3. Przerwanie zewnętrzne: Przerwanie zewnętrzne jest również podstawową funkcją większości MCU. Jest powszechnie używany do wyzwalania sygnałów w czasie rzeczywistym, próbkowania danych i wykrywania stanu. Istnieje kilka rodzajów przerwań: wyzwalanie zboczem narastającym, wyzwalanie zboczem opadającym i wyzwalanie poziomem. Przerwania zewnętrzne są zazwyczaj realizowane poprzez porty wejściowe. Jeśli jest to port IO, funkcja przerwania zostanie włączona tylko wtedy, gdy jest ustawiona na wejście; jeśli jest to port wyjściowy, funkcja przerwania zewnętrznego zostanie automatycznie wyłączona (istnieją pewne wyjątki w serii ATiny firmy ATMEL, port wyjściowy może również wyzwalać funkcję przerwania). Zastosowanie przerwania zewnętrznego jest następujące:
Wykrywanie zewnętrznych sygnałów wyzwalających: jeden opiera się na wymaganiach czasu rzeczywistego, takich jak sterowanie prostownikami sterowanymi krzemem, wykrywanie sygnałów impulsowych itp., a drugi opiera się na potrzebie oszczędzania energii.
Pomiar częstotliwości sygnału: Aby mieć pewność, że sygnał nie zostanie pominięty, idealnym wyborem jest przerwanie zewnętrzne.
Dekodowanie danych: W zastosowaniach do zdalnego sterowania, aby obniżyć koszty projektowania, często konieczne jest użycie oprogramowania do dekodowania różnych zakodowanych danych, takich jak dekodowanie Manchesteru i kodowanie PWM.
Wykrywanie klucza i wznawianie systemu: W przypadku mikrokontrolera, który przechodzi w stan uśpienia, zazwyczaj należy go obudzić za pomocą przerwania zewnętrznego. Najbardziej podstawową formą jest klucz, a zmiana poziomu jest generowana poprzez działanie klawisza.
4. Interfejs komunikacyjny: Interfejs komunikacyjny zapewniany przez MCU zazwyczaj obejmuje interfejs SPI, UART, interfejs I2C itp., które opisano w następujący sposób:
Interfejs SPI: Ten typ interfejsu jest najbardziej podstawową metodą komunikacji zapewnianą przez większość MCU. Transmisją danych steruje zegar synchroniczny. Sygnały obejmują: SDI (szeregowe wejście danych), SDO (szeregowe wyjście danych), SCLK (zegar szeregowy) i sygnał gotowości; w niektórych przypadkach może nie być sygnału gotowości; ten typ interfejsu może pracować w trybie Master lub Slave, popularne powiedzenie mówi, kto dostarcza sygnał zegara, strona dostarczająca zegar to Master, a strona przeciwna to Slaver.
UART (Universal Asynchronous Answer Transmit): Jest to najbardziej podstawowy interfejs asynchronicznej transmisji. Jego linie sygnałowe to tylko Rx i Tx. Podstawowy format danych to: bit startu + bit danych (7 bitów/8 bitów) + bit parzystości (parzysty, nieparzysty lub żaden) + bit stopu (1 ~ 2 bity). Czas potrzebny na przesłanie jednego bitu danych nazywany jest szybkością transmisji (szybkość transmisji).
W przypadku większości mikrokontrolerów długość bitów danych, metodę sprawdzania danych (sprawdzanie nieparzyste, parzyste lub brak sprawdzania), długość bitu stopu (bit stopu) i szybkość transmisji można elastycznie ustawić poprzez programowanie. Z pewnością. Najczęściej stosowanym sposobem tego typu interfejsu jest komunikacja z portem szeregowym komputera.
Interfejs I2C: I2C to protokół transmisji danych opracowany przez firmę Philips, który jest również realizowany za pomocą dwóch sygnałów: SDAT (szeregowe wejście i wyjście danych) oraz SCLK (zegar szeregowy). Największą zaletą jest to, że do tej magistrali można podłączyć wiele urządzeń, które można zidentyfikować i uzyskać do nich dostęp za pomocą adresów; jedną z największych zalet magistrali I2C jest to, że bardzo wygodnie jest używać oprogramowania do realizacji jej poprzez port IO, a szybkość transmisji danych jest całkowicie kontrolowana przez SCLK. Sterowanie może być szybkie lub wolne, w przeciwieństwie do interfejsu UART , który ma rygorystyczne wymagania dotyczące prędkości.
5. Watchdog (zegar watchdog): Watchdog jest także podstawową konfiguracją większości MCU (niektóre 4-bitowe MCU mogą nie mieć tej funkcji), a większość Watchdogów MCU może jedynie zezwalać programom na ich resetowanie i nie może ich resetować. Jest zamknięty (niektóre są ustawiane po wypaleniu programu, np. MCU serii Microchip PIC), a niektóre MCU określają, czy otworzyć je w określony sposób, np. seria KS57 firmy Samsung, o ile program uzyskuje dostęp do rejestru Watchdog , jest automatycznie włączany i nie można go ponownie wyłączyć. Ogólnie rzecz biorąc, czas resetowania watchdoga można ustawić programowo. Najbardziej podstawowym zastosowaniem Watchdoga jest zapewnienie możliwości samodzielnego odzyskiwania MCU po awarii z powodu nieoczekiwanych awarii.

Programowanie mikrokontrolerów
Istnieje duża różnica pomiędzy programowaniem programów MCU a programowaniem programów na PC. Chociaż narzędzia programistyczne MCU oparte na C stają się coraz bardziej popularne, dla wydajnego kodu programu i projektanta, który lubi używać asemblera, język asemblera jest nadal najbardziej zwięzłym i wydajnym językiem programowania.

W przypadku programowania MCU można powiedzieć, że jego podstawowe ramy są mniej więcej takie same, ogólnie podzielone na trzy części: część inicjującą (jest to największa różnica między programowaniem MCU a programowaniem na PC), treść głównej pętli programu i program przetwarzania przerwań, które są odpowiednio wyjaśniono w następujący sposób:
1. Inicjalizacja: W przypadku projektowania wszystkich programów MCU inicjalizacja jest najbardziej podstawowym i najważniejszym krokiem, obejmującym ogólnie następujące elementy:
Maskuj wszystkie przerwania i inicjuj wskaźnik stosu: Część inicjująca generalnie nie chce, aby wystąpiły jakiekolwiek przerwania.
Wyczyść obszar RAM systemu i wyświetl pamięć: Chociaż czasami może to nie być całkowicie konieczne, z punktu widzenia niezawodności i spójności, zwłaszcza w celu zapobiegania przypadkowym błędom, zaleca się wyrobienie dobrych nawyków programistycznych.
Inicjalizacja portu IO: Zgodnie z wymaganiami aplikacji projektu, ustaw tryb wejścia i wyjścia odpowiedniego portu IO. Dla portu wejściowego należy ustawić jego rezystancję podciągania lub ściągania; dla portu wyjściowego należy ustawić jego początkowy poziom wyjściowy, aby zapobiec niepotrzebnym błędom.
Ustawienia przerwań: Dla wszystkich źródeł przerwań, które mają zostać wykorzystane w projekcie, należy je włączyć i ustawić warunki wyzwalania przerwań, natomiast w przypadku przerwań redundantnych, które nie są używane, należy je wyłączyć.
Inicjalizacja innych modułów funkcjonalnych: Dla wszystkich peryferyjnych modułów funkcjonalnych MCU, które muszą zostać użyte, należy dokonać odpowiednich ustawień zgodnie z wymaganiami aplikacji projektu, takimi jak komunikacja UART, szybkość transmisji, długość danych, metoda weryfikacji i zatrzymanie Należy ustawić bit, długość itp., a w przypadku programatora czasowego należy ustawić jego źródło zegara, podział częstotliwości i przeładowanie danych itp.
Inicjalizacja parametrów: Po zakończeniu inicjalizacji sprzętu i zasobów MCU kolejnym krokiem jest inicjalizacja niektórych zmiennych i danych używanych w programie. Inicjalizacja tej części musi zostać zaprojektowana zgodnie z konkretnym projektem i ogólnym układem programu. W przypadku niektórych aplikacji korzystających z EEPROM do zapisywania prefabrykowanych danych projektu, zaleca się skopiowanie odpowiednich danych do pamięci RAM MCU podczas inicjalizacji, aby poprawić szybkość dostępu programu do danych i zmniejszyć zużycie energii przez system (w zasadzie , dostęp do zewnętrznej pamięci EEPROM zwiększy pobór mocy zasilacza).
2. Treść pętli programu głównego: Większość mikrokontrolerów działa nieprzerwanie przez długi czas, więc główna część programu jest w zasadzie zaprojektowana w sposób cykliczny. W przypadku aplikacji z wieloma trybami pracy może istnieć wiele treści pętli. Ciało pętli jest konwertowane między sobą za pomocą flagi stanu. W przypadku głównej treści programu ogólnie rozmieszczone są następujące moduły:
Program obliczeniowy: Program obliczeniowy jest generalnie czasochłonny, dlatego zdecydowanie sprzeciwia się przetwarzaniu przerwań, zwłaszcza operacjom mnożenia i dzielenia.
Programy przetwarzające z niskimi wymaganiami czasu rzeczywistego lub bez wymagań czasu rzeczywistego;

Program transmisji wyświetlacza: głównie do zastosowań z zewnętrznym sterownikiem LED i LCD.
3. Interrupt processing program: The interrupt program is mainly used to process tasks and events with high real-time requirements, such as detection of external sudden signals, detection and processing of keys, timing counting, LED display scanning, etc.
Ogólnie rzecz biorąc, program przerwania powinien utrzymywać kod tak zwięzły i krótki, jak to możliwe. W przypadku funkcji, które nie muszą być przetwarzane w czasie rzeczywistym, można ustawić flagę wyzwalającą w przerwaniu, a wtedy program główny wykona konkretną transakcję – jest to bardzo ważne. Zwłaszcza w przypadku mikrokontrolerów o małej mocy i niskiej prędkości konieczne jest zapewnienie terminowej reakcji na wszystkie przerwania.
4. W przypadku rozmieszczenia różnych organów zadaniowych różne MCU mają różne metody przetwarzania:
Na przykład w przypadku aplikacji MCU o niskiej prędkości i małej mocy (Fosc=32768 Hz), biorąc pod uwagę, że wszystkie tego typu projekty są urządzeniami przenośnymi i wykorzystują zwykłe wyświetlacze LCD, reakcja na przyciski i wyświetlacze wymaga dużej wydajności w czasie rzeczywistym, dlatego zazwyczaj przerwania czasowe służą do przetwarzania akcji przycisków i wyświetlania danych; oraz w przypadku szybkich MCU, takich jak aplikacje Fosc>1 MHz, ponieważ MCU ma wystarczająco dużo czasu na wykonanie w tym momencie głównej pętli programu, można je przerwać tylko w odpowiednich ustawieniach Ustaw różne flagi wyzwalające i umieść wszystkie zadania w głównej treści programu do wykonania.
5. Podczas projektowania oprogramowania MCU należy zwrócić szczególną uwagę na jeszcze jedną kwestię:

Aby zapobiec jednoczesnemu dostępowi lub ustawieniu tej samej zmiennej lub danych w przerwaniu i głównej treści programu. Skuteczną metodą zapobiegawczą jest zorganizowanie przetwarzania takich danych w module i określenie, czy wykonać odpowiednią operację na danych, poprzez ocenę flagi wyzwalającej; podczas gdy w innych treściach programu (głównie przerwaniach) dane, które należy przetworzyć. Miejsce przetwarzania ustawia jedynie flagę wyzwalania. - Dzięki temu wykonanie danych jest przewidywalne i niepowtarzalne.

Umiejętności rozwoju mikrokontrolera

1. Jak ograniczyć błędy w programie
Aby zmniejszyć liczbę błędów programu, należy najpierw rozważyć następujące parametry zarządzania przekroczeniami zakresu, które należy wziąć pod uwagę podczas działania systemu.
Parametry fizyczne: Parametry te to głównie parametry wejściowe systemu, w tym parametry wzbudzenia, parametry operacyjne podczas akwizycji i przetwarzania oraz parametry wynikowe na końcu przetwarzania.

Parametry zasobów: Te parametry to głównie zasoby obwodów, urządzeń i jednostek funkcjonalnych w systemie, takie jak pojemność pamięci, długość jednostki pamięci i głębokość układania.
Parametry aplikacji: Te parametry aplikacji często reprezentują warunki aplikacji niektórych jednoukładowych mikrokomputerów i jednostek funkcjonalnych. Parametry procesu: odnosi się do parametrów, które zmieniają się w uporządkowany sposób podczas działania systemu.


2. Jak poprawić efektywność kodu programowania w języku C
Nieuniknionym trendem w rozwoju i zastosowaniu mikrokomputera jednoukładowego jest używanie języka C do projektowania programu mikrokomputera jednoukładowego. Jeśli chcesz osiągnąć najwyższą wydajność podczas programowania w C, najlepiej jest zapoznać się z kompilatorem C, którego używasz. Najpierw przetestuj liczbę linii instrukcji w języku asemblera odpowiadających każdemu skompilowanemu językowi C, abyś mógł jasno poznać wydajność. Programując w przyszłości, używaj instrukcji o najwyższej wydajności kompilacji. Każdy kompilator C będzie miał pewne różnice, więc wydajność kompilacji również będzie inna. Długość kodu i czas wykonania doskonałego kompilatora C systemu wbudowanego są tylko o 5-20% dłuższe niż ten sam poziom funkcji napisany w języku asemblera.

W przypadku złożonych projektów o krótkim czasie programowania można użyć języka C, ale założenie jest takie, że dobrze znasz język C i kompilator C systemu MCU oraz zwracasz szczególną uwagę na typy danych i algorytmy używane przez system kompilatora C może wspierać. Chociaż język C jest najpopularniejszym językiem wysokiego poziomu, systemy kompilacji języka C różnych producentów MCU różnią się, szczególnie pod względem działania niektórych specjalnych modułów funkcyjnych. Jeśli więc nie rozumiesz tych funkcji, będzie wiele problemów z debugowaniem, co doprowadzi do niższej wydajności wykonania niż w języku asemblera.

3. Jak rozwiązać problem przeciwzakłóceniowy mikrokomputera jednoukładowego Najskuteczniejszym sposobem zapobiegania zakłóceniom jest usunięcie źródła zakłóceń i odcięcie ścieżki zakłóceń, jednak często jest to trudne, więc zależy tylko od czy zdolność przeciwzakłóceniowa mikrokomputera jednoukładowego jest wystarczająco silna. Poprawiając zdolność przeciwzakłóceniową systemu sprzętowego, oprogramowanie przeciwzakłóceniowe charakteryzuje się elastyczną konstrukcją,
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. By using this site, you agree to our use of cookies. Privacy Policy