- Co to jest ADC?
- ADC w ARM7-LPC2148
- Piny ADC w ARM7-LPC2148
- Rejestry ADC w ARM7-LPC2148
- Zarejestruj się ADxCR w LPC2148
- ADxGDR: globalny rejestr danych ADC
- Wymagane składniki
- Schemat obwodu
- Programowanie ARM7-LPC2148 dla ADC
W świecie elektroniki na rynku istnieje wiele odmian czujników analogowych, które są używane do pomiaru temperatury, prędkości, przemieszczenia, ciśnienia itp. Czujniki analogowe są używane do generowania danych wyjściowych, które stale się zmieniają w czasie. Sygnały z czujników analogowych mają zwykle bardzo małą wartość, od kilku mikowoltów (uV) do kilku mili woltów (mV), więc wymagana jest pewna forma wzmocnienia. Aby wykorzystać te sygnały analogowe w mikrokontrolerze, musimy przekształcić sygnał analogowy na sygnał cyfrowy, ponieważ mikrokontroler rozumie i przetwarza tylko sygnały cyfrowe. Dlatego większość mikrokontrolerów ma wbudowaną ważną funkcję zwaną ADC (konwerter analogowo-cyfrowy). Nasz mikrokontroler ARM7-LPC2148 posiada również funkcję ADC.
W tym samouczku zobaczymy, jak używać ADC w ARM7-LPC2148, dostarczając zmienne napięcie do pinu analogowego i wyświetlając je na ekranie LCD 16x2 po konwersji sygnału analogowego na cyfrowy. Zacznijmy więc od krótkiego wprowadzenia na temat ADC.
Co to jest ADC?
Jak wspomniano wcześniej, ADC oznacza konwersję analogowo-cyfrową i służy do konwersji wartości analogowych ze świata rzeczywistego na wartości cyfrowe, takie jak 1 i 0. Więc jakie są te wartości analogowe? Są to te, które widzimy w naszym codziennym życiu, takie jak temperatura, prędkość, jasność itp. Parametry te są mierzone jako napięcia analogowe przez odpowiednie czujniki, a następnie te wartości analogowe są konwertowane na wartości cyfrowe dla mikrokontrolerów.
Załóżmy, że nasz zakres ADC wynosi od 0 V do 3,3 V i mamy 10-bitowy przetwornik ADC, co oznacza, że nasze napięcie wejściowe 0-3,3 V zostanie podzielone na 1024 poziomy dyskretnych wartości analogowych (2 10 = 1024). Oznacza to, że 1024 to rozdzielczość dla 10-bitowego ADC, podobnie dla 8-bitowego ADC będzie to 512 (28), a dla 16-bitowego ADC będzie 65,536 (216). LPC2148 ma 10-bitowy przetwornik ADC.
W tym przypadku, jeśli rzeczywiste napięcie wejściowe wynosi 0 V, wówczas ADC MCU odczyta je jako 0, a jeśli wynosi 3,3 V, MCU odczyta 1024, a jeśli jest gdzieś pomiędzy 1,65 V, wówczas MCU odczyta 512. Możemy użyć poniższego wzory do obliczania wartości cyfrowej, która zostanie odczytana przez MCU w oparciu o rozdzielczość ADC i napięcie robocze.
(Rozdzielczość ADC / Napięcie robocze) = (Wartość cyfrowa ADC / Rzeczywista wartość napięcia)
Jak na przykład, jeśli napięcie odniesienia wynosi 3 V:
Szczegółowo wyjaśniliśmy ADC w poprzednim artykule.
ADC w ARM7-LPC2148
- LPC2148 zawiera dwa przetworniki analogowo-cyfrowe.
- Przetworniki te są pojedynczy 10-bitowy kolejne przybliżenie przetwornik analogowo-cyfrowy.
- Podczas gdy ADC0 ma sześć kanałów, ADC1 ma osiem kanałów.
- Dlatego całkowita liczba dostępnych wejść ADC dla LPC2148 wynosi 14.
- Konwertuje napięcie wejściowe tylko w zakresie (0 do 3,3 V). Nie może przekraczać 3,3 V napięcia odniesienia. Ponieważ spowoduje to uszkodzenie układu scalonego, a także zapewni niepewne wartości.
Kilka ważnych cech ADC w LPC2148
- Każdy konwerter może wykonać ponad 400 000 10-bitowych próbek na sekundę.
- Każde wejście analogowe ma dedykowany rejestr wyników, aby zmniejszyć narzut przerwań.
- Tryb konwersji seryjnej dla jednego lub wielu wejść.
- Opcjonalna konwersja przy przejściu na pin wejściowy lub sygnał dopasowania timera.
- Polecenie Global Start dla obu konwerterów.
Sprawdź również, jak używać ADC w innych mikrokontrolerach:
- 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
Piny ADC w ARM7-LPC2148
Jak powiedział Earliar, w ARM7-LPC2148 są dwa kanały ADC0 z 6 analogowymi pinami wejściowymi i ADC1 z 8 analogowymi pinami wejściowymi. Łącznie jest więc 14 pinów na wejścia analogowe. Poniższy schemat przedstawia piny dostępne dla wejścia analogowego.
Ponieważ piny wejściowe ADC są multipleksowane z innymi pinami GPIO. Musimy je włączyć, konfigurując rejestr PINSEL, aby wybrać funkcję ADC.
Poniższa tabela pokazuje piny ADC i respektowany numer kanału ADC w LPC2148. AD0 to kanał 0, a AD1 to kanał 1
Styk LPC2148 |
Kanał ADC nr |
P0.28 |
AD0.1 |
P0.29 |
AD0.2 |
P0.30 |
AD0.3 |
P0.25 |
AD0.4 |
P0.4 |
AD0.6 |
P0.5 |
AD0.7 |
P0.6 |
AD1.0 |
P0.8 |
AD1.1 |
P0.10 |
AD1.2 |
P0.12 |
AD1.3 |
P0.13 |
AD1.4 |
P0.15 |
AD1.5 |
P0.21 |
AD1.6 |
P0.22 |
AD1.7 |
Rejestry ADC w ARM7-LPC2148
Rejestry są używane w programowaniu do korzystania z funkcji konwersji A / D w LPC2148.
Poniżej znajduje się lista rejestrów używanych w LPC2148 do konwersji A / D
1. ADCR: analogowo-cyfrowy rejestr sterujący
Zastosowanie: ten rejestr jest używany do konfiguracji przetwornika A / D w LPC2148
2. ADGDR: analogowo-cyfrowy globalny rejestr danych
Zastosowanie: Ten rejestr ma bit DONE dla przetwornika A / D i tutaj jest przechowywany WYNIK konwersji.
3. ADINTERN: Rejestr włączania przerwań analogowo-cyfrowych
Zastosowanie: jest to rejestr umożliwiający przerwanie.
4. ADDR0 - ADDR7: Rejestr danych kanału analogowo-cyfrowego
Zastosowanie: ten rejestr zawiera wartości A / D dla odpowiednich kanałów.
5. ADSTAT: analogowo-cyfrowy rejestr stanu.
Użycie: Ten rejestr zawiera flagę DONE dla odpowiedniego kanału ADC, a także flagę OVERRUN dla odpowiedniego kanału ADC.
W tym samouczku będziemy używać tylko rejestrów ADCR i ADGDR. Przyjrzyjmy się im szczegółowo
Zarejestruj się ADxCR w LPC2148
AD0CR i AD1CR odpowiednio dla kanału 0 i kanału 1. Jest to rejestr 32-bitowy. Poniższa tabela wskazuje pola bitowe dla rejestru ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
ZAREZERWOWANY |
BRZEG |
POCZĄTEK |
ZAREZERWOWANY |
PDN |
ZAREZERWOWANY |
CLKS |
ROZERWANIE |
CLCKDIV |
SEL |
Zobaczmy, jak skonfigurować poszczególne rejestry
1. SEL: Bity od (0 do 7) są używane do wyboru kanału do konwersji ADC. Na każdy kanał przydzielany jest jeden bit. Na przykład ustawienie Bit-0 spowoduje, że ADC będzie próbkować AD0.1 do konwersji. Ustawienie bitu -1 spowoduje, że AD0.1; podobnie ustawienie bit-7 dokona konwersji dla AD0.7. Ważnym krokiem jest to, że mamy PINSEL zgodnie z portem, którego używamy, na przykład PINSEL0 dla PORT0 w PLC2148.
2. CLCKDIV: Bity od (8 do 15) dotyczą dzielnika zegara. Tutaj zegar APB (zegar magistrali peryferyjnej ARM) jest dzielony przez tę wartość plus jeden, aby wytworzyć zegar wymagany dla przetwornika A / D, który powinien być mniejszy lub równy 4,5 MHz, ponieważ używamy metody sukcesywnego przybliżania w LPC2148.
3. BURST: Bit 16 jest używany w trybie konwersji BURST.
Ustawienie 1: ADC dokona konwersji dla wszystkich kanałów wybranych w bitach SEL.
Ustawienie 0: Wyłączy tryb konwersji BURST.
4. CLCKS: Bity od (17 do 19) trzech bitów są używane do wyboru rozdzielczości i liczby zegarów konwersji A / C w trybie impulsowym, ponieważ jest to ciągła konwersja A / C.
Wartość dla bitów (od 17 do 19) |
Bity (dokładność) |
Nie zegara |
000 |
10 |
11 |
001 |
9 |
10 |
010 |
8 |
9 |
011 |
7 |
8 |
100 |
6 |
7 |
101 |
5 |
6 |
110 |
4 |
5 |
111 |
3 |
4 |
5. PDN: Bit 21 służy do wybierania trybu wyłączenia ADC w LPC2148.
- A / D jest w trybie PDN.
- A / D jest w trybie operacyjnym
6. START: Bity od (24 do 26) dotyczą START. Gdy tryb konwersji BURST jest WYŁĄCZONY przez ustawienie 0, te bity START są przydatne, gdy należy rozpocząć konwersję A / D. START służy również do konwersji sterowanej zboczem. To wtedy, gdy pojawi się wejście na pin CAP lub MAT LPC2148, A / D zaczyna się konwertować. Sprawdźmy poniższą tabelę
Wartość dla bitów (24 do 26) |
Piny LPC2148 |
Funkcja ADC |
000 |
Służy do ustawiania ADC w trybie PDN No Start |
|
001 |
Rozpocznij konwersję A / D |
|
010 |
CAP0,2 / MAT0,2 |
Rozpocznij konwersję A / D na EDGE wybranym na pinie 27 (wznoszenie lub opadanie) na pinach CAP / MAT LPC2148 |
011 |
WPR0,0 / MAT0,0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27- ty bit jest używany dla EDGE tylko wtedy, gdy bit START zawiera 010-111. Rozpoczyna konwersję, gdy jest wejście CAP lub MAT, które możesz zobaczyć w powyższej tabeli.
Ustawienie : 0 - na opadającej krawędzi
1 - Na rosnącej krawędzi
ADxGDR: globalny rejestr danych ADC
AD0GDR i AD1GDR odpowiednio dla kanału 0 ADC i kanału 1 ADC.
Jest to rejestr 32-bitowy, który zawiera WYNIK konwersji A / D, a także bit DONE, który wskazuje, że konwersja A / C jest zakończona. Poniższa tabela wskazuje pola bitowe dla rejestru ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
GOTOWE |
NAJECHAĆ |
ZAREZERWOWANY |
CHN |
ZAREZERWOWANY |
WYNIK |
ZAREZERWOWANY |
1. WYNIK: Te bity (od 6 do 15) zawierają wynik konwersji A / D dla wybranego kanału w rejestrze ADCR SEL. Wartość jest odczytywana dopiero po zakończeniu konwersji A / D i jest to sygnalizowane przez bit DONE.
PRZYKŁAD: W przypadku 10-bitowego wyniku ADC przechowywana wartość waha się od (0 do 1023).
2. CHANNEL: Te bity od 24 do 26 zawierają numer kanału, dla którego wykonywana jest konwersja A / D. Przekonwertowana wartość cyfrowa jest obecna w bicie RESULT.
PRZYKŁAD: 000 jest dla kanału ADC 0, a 001 dla kanału 1 ADC, itd
3. OVERRUN: 30- ty bit OVERRUN jest używany w trybie BURST. W przypadku ustawienia 1 poprzednia przekonwertowana wartość ADC jest nadpisywana przez nowo przekonwertowaną wartość ADC. Kiedy rejestr jest odczytywany, kasuje bit OVERRUN.
4. DONE: 31-ty bit jest dla bitu DONE.
Zestaw 1: Po zakończeniu konwersji A / D.
Ustaw 0: Kiedy rejestr jest odczytywany i zapisywany ADCR.
Widzieliśmy już o ważnych rejestrach, które są używane w ADC w LPC2148. Teraz zacznijmy używać ADC w ARM7.
Wymagane składniki
Sprzęt komputerowy
- Mikrokontroler ARM7-LPC2148
- Układ scalony regulatora napięcia 3,3 V.
- 5V regulator napięcia IC
- Potencjometr 10K - 2 numery
- LED (dowolny kolor)
- Wyświetlacz LCD (16X2)
- Bateria 9V
- Płytka prototypowa
- Podłączanie przewodów
Oprogramowanie
- Keil uVision5
- Narzędzie Magic Flash
Schemat obwodu
Poniższa tabela przedstawia połączenia obwodów między wyświetlaczem LCD a ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (wybór rejestru) |
P0.6 |
E (Włącz) |
P0.12 |
D4 (styk danych 4) |
P0.13 |
D5 (styk danych 5) |
P0.14 |
D6 (styk danych 6) |
P0.15 |
D7 (styk danych 7) |
Dowiedz się więcej o używaniu wyświetlacza LCD z ARM 7 - LPC2148.
WAŻNE: tutaj używamy dwóch układów scalonych regulatora napięcia, jednego dla wyświetlacza LCD 5 V i drugiego 3,3 V dla wejścia analogowego, które można zmieniać za pomocą potencjometru.
Połączenia między regulatorem napięcia 5 V z wyświetlaczem LCD i drążkiem ARM7
Regulator napięcia 5 V IC |
Funkcja pinów |
Wyświetlacz LCD i ARM-7 LPC2148 |
1. lewy kołek |
+ Ve z akumulatora 9V Wejście |
NC |
2. kołek środkowy |
- Ve z akumulatora |
VSS, R / W, K z LCD GND ARM7 |
3. prawy pin |
Regulowane wyjście + 5 V. |
VDD, wyświetlacz LCD + 5V z ARM7 |
Potencjometr z wyświetlaczem LCD
Potencjometr służy do zmiany kontrastu wyświetlacza LCD. Potencjometr ma trzy piny, lewy pin (1) jest podłączony do + 5V, a środkowy (2) do VEE lub V0 modułu LCD, a prawy pin (3) jest podłączony do GND. Kontrast możemy regulować kręcąc gałką.
Połączenie między LPC2148 i potencjometrem z regulatorem napięcia 3,3 V.
3.3 V Regulator napięcia IC |
Funkcja pinów |
ARM-7 LPC2148 |
1. lewy kołek |
- Ve z akumulatora |
Pin GND |
2. kołek środkowy |
Regulowane wyjście + 3,3 V. |
Do wejścia potencjometru i wyjścia potencjometru do P0.28 |
3. prawy pin |
+ Ve z akumulatora 9V Wejście |
NC |
Programowanie ARM7-LPC2148 dla ADC
Aby zaprogramować ARM7-LPC2148 potrzebujemy narzędzia keil uVision & Flash Magic. Używamy kabla USB do programowania ARM7 Stick przez port micro USB. Piszemy kod za pomocą Keila i tworzymy plik hex, a następnie plik HEX jest sflashowany do pendrive'a ARM7 przy użyciu Flash Magic. Aby dowiedzieć się więcej o instalacji keil uVision i Flash Magic oraz o tym, jak z nich korzystać, kliknij łącze Pierwsze kroki z mikrokontrolerem ARM7 LPC2148 i zaprogramuj go za pomocą Keil uVision.
W tym samouczku konwertujemy analogowe napięcie wejściowe (od 0 do 3,3 V) na wartość cyfrową za pomocą ADC w LPC2148 i wyświetlamy napięcie analogowe na wyświetlaczu LCD (16x2). Potencjometr będzie używany do zmiany wejściowego napięcia analogowego.
Aby dowiedzieć się więcej na temat łączenia wyświetlacza LCD z 4-bitowym trybem ARM7-LPC2148, kliknij ten link.
Kompletny kod do korzystania ADC z ramienia 7 jest podana na końcu tego poradnika, tutaj jesteśmy wyjaśniając kilka części.
Kroki związane z programowaniem LPC2148-ADC
1. Rejestr PINSEL służy do wyboru styku portu LPC2148 i funkcji ADC jako wejścia analogowego.
PINSEL1 = 0x01000000; // Wybierz P0.28 jako AD0.1
2. Wybierz dokładność zegara i bitów do konwersji, zapisując wartość do ADxCR (rejestr sterujący ADC).
AD0CR = 0x00200402; // Ustawia operację ADC na 10-bitowe / 11 CLK do konwersji (000)
3. Rozpocznij konwersję, zapisując wartość do bitów START w ADxCR.
Tutaj Pisałem do 24 th trochę AD0CR rejestru.
AD0CR = AD0CR - (1 << 24);
4. Teraz możemy mieć sprawdzić Sporządzono bit (31th) odpowiadających ADxDRy (dane ADC zarejestrować), ponieważ zmienia się od 0 do 1. Więc używamy natomiast pętla do ciągłego sprawdzania, czy konwersja odbywa się na kawałku 31th danych zarejestrować.
podczas gdy (! (AD0DR1 & 0x80000000));
5. Po ustawieniu bitu zakończonego na 1, konwersja przebiega pomyślnie, następnie odczytujemy wynik z tego samego rejestru danych ADC AD0DR1 i zapisujemy wartość w zmiennej.
adcvalue = AD0DR1;
Następnie używamy wzoru, aby zamienić wartość cyfrową na napięcie i zapisać w zmiennej o nazwie napięcie .
napięcie = ((adcvalue / 1023,0) * 3,3);
5. Kolejne wiersze służą do wyświetlania wartości cyfrowych (od 0 do 1023) po konwersji sygnału analogowego na cyfrowy.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Wyświetl wartość ADC (od 0 do 1023)
6. Kolejne wiersze służą do wyświetlenia wejściowego napięcia analogowego (od 0 do 3,3 V) po konwersji sygnału analogowego na cyfrowy i po kroku 5.
LCD_SEND (0xC0); sprintf (wartość napięcia, „Napięcie =%. 2f V”, napięcie); LCD_DISPLAY (wartość napięcia); // Wyświetlacz (napięcie wejściowe analogowe)
7. Teraz musimy wyświetlić napięcie wejściowe i wartości cyfrowe na wyświetlaczu LCD. Wcześniej musimy zainicjalizować wyświetlacz LCD i użyć odpowiednich poleceń do wysyłania wiadomości na wyświetlacz.
Poniższy kod służy do inicjalizacji LCD
void LCD_INITILIZE (void) // Funkcja przygotowania wyświetlacza LCD { IO0DIR = 0x0000FFF0; // Ustawia pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 jako OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicjalizacja lcd w 4-bitowym trybie pracy LCD_SEND (0x28); // 2 linie ( 16X2 ) LCD_SEND (0x0C); // Wyświetl kursor wyłączony LCD_SEND (0x06); // Kursor automatycznego inkrementacji LCD_SEND (0x01); // Wyświetl wyczyść LCD_SEND (0x80); // Pierwsza pozycja w pierwszej linii }
Poniższy kod służy do wyświetlania wartości na wyświetlaczu LCD
void LCD_DISPLAY (char * MSG) // Funkcja drukowania znaki wysyłane pojedynczo { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Wysyła górny półbajt IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH, aby wydrukować dane IO0CLR = 0x00000020; // RW LOW Tryb zapisu delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS i RW niezmienione (tj. RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Wysyła niższy półbajt IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); i ++; } }
Funkcja below służy do tworzenia opóźnienia
void delay_ms (uint16_t j) // Funkcja do tworzenia opóźnienia w milisekundach { uint16_t x, i; dla (i = 0; i
Pełny kod z filmem demonstracyjnym znajduje się poniżej.