- Wymagane składniki i konfiguracja sprzętu
- Schemat obwodu Nuvoton N76E003 do odczytu napięcia analogowego
- Informacje o GPIO i pinach analogowych w N76E003
- Informacje o urządzeniu peryferyjnym ADC w N76E003
- Programowanie N76E003 dla ADC
- Miga kod i wyjście
Przetwornik analogowo-cyfrowy (ADC) jest najczęściej używaną funkcją sprzętową mikrokontrolera. Pobiera napięcie analogowe i przetwarza je na wartość cyfrową. Ponieważ mikrokontrolery są urządzeniami cyfrowymi i pracują z cyfrą binarną 1 i 0, nie mogą bezpośrednio przetwarzać danych analogowych. W związku z tym ADC jest używany do pobierania napięcia analogowego i przekształcania go na jego równoważną wartość cyfrową, którą może zrozumieć mikrokontroler. Jeśli chcesz dowiedzieć się więcej o konwerterze analogowo-cyfrowym (ADC), możesz sprawdzić powiązany artykuł.
Istnieją różne czujniki dostępne w elektronice, które zapewniają wyjście analogowe, takie jak czujniki gazu MQ, czujnik akcelerometru ADXL335 itp. Tak więc, używając przetwornika analogowo-cyfrowego, czujniki te mogą być połączone z jednostką mikrokontrolera. Możesz również zapoznać się z innymi samouczkami wymienionymi poniżej, dotyczącymi używania ADC z innymi mikrokontrolerami.
- Jak korzystać z ADC w Arduino Uno?
- Połączenie ADC0808 z mikrokontrolerem 8051
- Korzystanie z modułu ADC mikrokontrolera PIC
- Samouczek Raspberry Pi ADC
- Jak korzystać z ADC w MSP430G2 - Pomiar napięcia analogowego
- Jak korzystać z ADC w STM32F103C8
W tym samouczku użyjemy wbudowanego urządzenia peryferyjnego ADC jednostki mikrokontrolera N76E003, więc oceńmy, jakiego rodzaju konfiguracji sprzętowej wymagamy dla tej aplikacji.
Wymagane składniki i konfiguracja sprzętu
Aby użyć ADC na N76E003, użyjemy dzielnika napięcia za pomocą potencjometru i odczytujemy napięcie z zakresu 0V-5,0V. Napięcie będzie wyświetlane na wyświetlaczu LCD 16x2 znaków, jeśli jesteś nowy z wyświetlaczem LCD i N76E003, możesz sprawdzić, jak połączyć wyświetlacz LCD z Nuvoton N76E003. Dlatego głównym elementem wymaganym w tym projekcie jest wyświetlacz LCD 16x2 znaków. W tym projekcie użyjemy poniższych komponentów:
- Wyświetlacz znaków LCD 16x2
- Rezystor 1k
- Potencjometr 50k lub potencjometr
- Kilka przewodów Berga
- Kilka przewodów połączeniowych
- Płytka prototypowa
Nie wspominając o tym, że poza powyższymi komponentami potrzebujemy płytki rozwojowej opartej na mikrokontrolerze N76E003, a także programatora Nu-Link. Wymagany jest również dodatkowy zasilacz 5 V, ponieważ wyświetlacz LCD pobiera wystarczający prąd, którego programator nie mógł zapewnić.
Schemat obwodu Nuvoton N76E003 do odczytu napięcia analogowego
Jak widać na schemacie, port P0 jest używany do połączenia związanego z wyświetlaczem LCD. Po lewej stronie pokazane jest połączenie interfejsu programowania. Potencjometr działa jako dzielnik napięcia i jest wykrywany przez wejście analogowe 0 (AN0).
Informacje o GPIO i pinach analogowych w N76E003
Poniższy obraz przedstawia piny GPIO dostępne w module mikrokontrolera N76E003AT20. Jednak z 20 pinów, dla połączenia związanego z wyświetlaczem LCD, używany jest port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 i P0.7). Piny analogowe są podświetlone na czerwono.
Jak widać, Port P0 ma maksymalną liczbę pinów analogowych, ale są one używane do komunikacji związanej z wyświetlaczem LCD. Zatem P3.0 i P1.7 są dostępne jako piny wejścia analogowego AIN1 i AIN0. Ponieważ ten projekt wymaga tylko jednego styku analogowego, P1.7, który jest kanałem wejścia analogowego 0, jest używany w tym projekcie.
Informacje o urządzeniu peryferyjnym ADC w N76E003
N76E003 zapewnia 12-bitowy przetwornik SAR ADC. Bardzo dobrą cechą N76E003 jest to, że ma bardzo dobrą rozdzielczość ADC. ADC ma 8-kanałowe wejścia w trybie single-end. Łączenie ADC jest dość proste i nieskomplikowane.
Pierwszym krokiem jest wybranie wejścia kanału ADC. W mikrokontrolerach N76E003 dostępnych jest 8-kanałowych wejść. Po wybraniu wejść ADC lub pinów I / O, wszystkie piny muszą być ustawione dla kierunku w kodzie. Wszystkie piny używane do wejścia analogowego są pinami wejściowymi mikrokontrolera, dlatego wszystkie piny muszą być ustawione w trybie tylko wejściowym (wysoka impedancja). Można je ustawić za pomocą rejestru PxM1 i PxM2. Te dwa rejestry ustawiają tryby I / O, gdzie x oznacza numer portu (na przykład Port P1.0 rejestr będzie miał P1M1 i P1M2, dla P3.0 będzie to P3M1 i P3M2 itd.). widać na poniższym obrazku-
Konfiguracja ADC jest wykonywana przez dwa rejestry ADCCON0 i ADCCON1. Opis rejestru ADCCON0 pokazano poniżej.
Pierwsze 4 bity rejestru od bitu 0 do bitu 3 są używane do ustawiania wyboru kanału ADC. Ponieważ używamy kanału AIN0, wybór będzie wynosić 0000 dla tych czterech bitów.
Bity szósty i siódmy są ważnymi. ADCS jest wymagane do ustawienia 1 do rozpoczęcia konwersji ADC, a ADCF dostarczy informacje o pomyślnej konwersji ADC. Musi być ustawione na 0 przez oprogramowanie układowe, aby rozpocząć konwersję ADC. Następny rejestr to ADCCON1-
Rejestr ADCCON1 jest używany głównie do konwersji ADC wyzwalanej przez zewnętrzne źródła. Jednak w przypadku normalnych operacji związanych z odpytywaniem, pierwszy bit ADCEN musi ustawić 1 w celu włączenia obwodu ADC.
Następnie wejście kanału ADC musi być kontrolowane w rejestrze AINDIDS, w którym można rozłączyć wejścia cyfrowe.
N oznacza bitu w kanale (na przykład, kanał AIN0 musi być kontrolowany za pomocą pierwszego bitu P17DIDS z AINDIDS rejestru). Wejście cyfrowe musi być włączone, w przeciwnym razie będzie odczytywane jako 0. To wszystko jest podstawowym ustawieniem ADC. Teraz, po wyczyszczeniu ADCF i ustawieniu ADCS, można rozpocząć konwersję ADC. Przekonwertowana wartość będzie dostępna w poniższych rejestrach
I
Oba rejestry są 8-bitowe. Ponieważ ADC dostarcza 12-bitowe dane, ADCRH jest używany jako pełny (8-bitowy), a ADCRL jest używany jako połowa (4-bity).
Programowanie N76E003 dla ADC
Kodowanie określonego modułu za każdym razem jest gorączkowym zajęciem, dlatego zapewniono prostą, ale wydajną bibliotekę LCD, która będzie bardzo przydatna w przypadku interfejsu LCD 16x2 znaków z N76E003. Biblioteka LCD 16x2 jest dostępna w naszym repozytorium Github, które można pobrać z poniższego linku.
Pobierz bibliotekę LCD 16x2 dla Nuvoton N76E003
Prosimy o posiadanie biblioteki (poprzez sklonowanie lub pobranie) i po prostu dołączenie plików lcd.c i LCD.h do projektu Keil N76E003 w celu łatwej integracji wyświetlacza LCD 16x2 z żądaną aplikacją lub projektem. Biblioteka zapewni następujące przydatne funkcje związane z wyświetlaniem:
- Zainicjuj wyświetlacz LCD.
- Wyślij polecenie do wyświetlacza LCD.
- Napisz na wyświetlaczu LCD.
- Umieść ciąg na wyświetlaczu LCD (16 znaków).
- Wydrukuj znak, wysyłając wartość szesnastkową.
- Przewijaj długie wiadomości zawierające więcej niż 16 znaków.
- Drukuj liczby całkowite bezpośrednio na wyświetlaczu LCD.
Kodowanie ADC jest proste. W funkcji konfiguracji Enable_ADC_AIN0; służy do ustawiania ADC dla wejścia AIN0 . Jest to zdefiniowane w pliku.
# zdefiniować Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Tak więc powyższa linia ustawia pin jako wejście i konfiguruje również rejestr ADCCON0, ADCCON1, a także rejestr AINDIDS . Poniższa funkcja odczyta ADC z rejestru ADCRH i ADCRL, ale z 12-bitową rozdzielczością.
unsigned int ADC_read (void) { register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; podczas gdy (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; return adc_value; }
Bit jest przesuwany w lewo 4 razy, a następnie dodawany do zmiennej danych. W głównej funkcji ADC odczytuje dane i drukuje je bezpośrednio na wyświetlaczu. Jednak napięcie jest również konwertowane przy użyciu stosunku lub relacji między napięciem podzielonej przez wartość bitową.
12-bitowy przetwornik ADC zapewni 4095 bitów na wejściu 5,0 V. Dzieląc 5,0 V / 4095 = 0,0012210012210012 V.
Tak więc 1 cyfra zmian bitów będzie równa zmianom w 0,001 V (w przybliżeniu). Odbywa się to w głównej funkcji pokazanej poniżej.
void main (void) { int adc_data; Ustawiać(); lcd_com (0x01); while (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Dane ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); napięcie = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", napięcie); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Dane są konwertowane z wartości bitowej na napięcie i za pomocą funkcji sprintf , wyjście jest konwertowane na łańcuch i wysyłane do wyświetlacza LCD.
Miga kod i wyjście
Kod zwrócił 0 ostrzeżeń i 0 błędów i został sflashowany przy użyciu domyślnej metody flashowania przez Keil, możesz zobaczyć migający komunikat poniżej. Jeśli jesteś nowy w Keil lub Nuvoton, zapoznaj się z wprowadzeniem do mikrokontrolera Nuvoton, aby zrozumieć podstawy i sposób przesyłania kodu.
Rozpoczęto przebudowę: Projekt: licznik czasu Przebuduj cel „Cel 1” składanie STARTUP.A51… kompilowanie pliku main.c… kompilowanie lcd.c… kompilowanie Delay.c… łączenie… Rozmiar programu: dane = 101.3 xdata = 0 kod = 4162 tworzenie pliku szesnastkowego z ". \ Objects \ timer"… ". \ Objects \ timer" - 0 błędów, 0 ostrzeżeń. Upłynął czas kompilacji: 00:00:02 Załaduj „G: \\ n76E003 \\ Display \\ Objects \\ timer” Kasowanie pamięci flash zakończone . Wykonano zapis flashowy: zaprogramowano 4162 bajty. Flash Verify Gotowe: zweryfikowano 4162 bajty. Ładowanie Flash zakończyło się o 11:56:04
Poniższy rysunek przedstawia sprzęt podłączony do źródła zasilania za pomocą adaptera DC, a wyświetlacz pokazuje napięcie wyjściowe ustawione potencjometrem po prawej stronie.
Jeśli obrócimy potencjometr, napięcie podane na pin ADC również się zmieni i zobaczymy wartość ADC i napięcie analogowe wyświetlane na LCD. Możesz obejrzeć poniższy film, aby uzyskać pełną demonstrację działania tego samouczka.
Mam nadzieję, że podobał Ci się artykuł i nauczyłeś się czegoś przydatnego. Jeśli masz pytania, zostaw je w sekcji komentarzy poniżej lub możesz użyć naszych forów, aby opublikować inne pytania techniczne.