- Komponenter som krävs och hårdvaruinstallation
- Nuvoton N76E003 kretsschema för att läsa analog spänning
- Information om GPIO och analoga stift i N76E003
- Information om ADC Peripheral i N76E003
- Programmering N76E003 för ADC
- Blinkar koden och utdata
Analog till digital omvandlare (ADC) är den mest använda hårdvarufunktionen på en mikrokontroller. Den tar in analog spänning och omvandlar den till ett digitalt värde. Eftersom mikrokontroller är digitala enheter och arbetar med den binära siffran 1 och 0 kunde den inte behandla de analoga data direkt. Således används en ADC för att ta in analog spänning och konvertera den till dess motsvarande digitala värde som en mikrokontroller kan förstå. Om du vill ha mer information om Analog to Digital Converter (ADC) kan du kontrollera den länkade artikeln.
Det finns olika sensorer tillgängliga i elektronik som ger Analog utgång, som MQ-gassensorer, ADXL335 Accelerometer-sensor, etc. Således, med hjälp av Analog till Digital-omvandlare, kan dessa sensorer kopplas till en mikrokontroller. Du kan också kolla in andra självstudier som anges nedan för att använda ADC med andra mikrokontroller.
- Hur man använder ADC i Arduino Uno?
- Gränssnitt ADC0808 med 8051 mikrokontroller
- Använda ADC-modulen i PIC Microcontroller
- Raspberry Pi ADC-handledning
- Hur man använder ADC i MSP430G2 - Mätning av analog spänning
- Hur man använder ADC i STM32F103C8
I den här självstudien kommer vi att använda den inbyggda ADC-kringutrustningen för N76E003-mikrokontroller- enheten, så låt oss utvärdera vilken typ av hårdvaruinstallation vi behöver för den här applikationen.
Komponenter som krävs och hårdvaruinstallation
För att använda ADC på N76E003 kommer vi att använda en spänningsdelare med en potentiometer och läsa spänningen från 0V-5.0V. Spänningen kommer att visas på 16x2 LCD-tecken, om du är ny med LCD och N76E003 kan du kontrollera hur du gränssnitt LCD med Nuvoton N76E003. Således är den viktigaste komponenten som krävs för detta projekt 16x2 Character LCD. För detta projekt kommer vi att använda följande komponenter-
- Karaktär LCD 16x2
- 1k motstånd
- 50k potentiometer eller trimgryta
- Få Bergtrådar
- Få anslutningsledningar
- Bakbord
För att inte nämna, förutom ovanstående komponenter, behöver vi det N76E003 mikrokontroller- baserade utvecklingskortet samt Nu-Link-programmeraren. Ytterligare en 5V strömförsörjningsenhet krävs också eftersom LCD-skärmen drar tillräckligt med ström som programmeraren inte kunde tillhandahålla.
Nuvoton N76E003 kretsschema för att läsa analog spänning
Som vi kan se i schemat, används porten P0 för LCD-relaterad anslutning. Längst till vänster visas programmeringsgränssnittsanslutningen. Potentiometern fungerar som en spänningsdelare och det känns av den analoga ingången 0 (AN0).
Information om GPIO och analoga stift i N76E003
Bilden nedan illustrerar GPIO-stiften som finns tillgängliga på N76E003AT20 mikrokontroller. Av de 20 stiften används dock porten P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 och P0.7) för LCD-relaterad anslutning. De analoga stiften är markerade i RÖDA färger.
Som vi kan se har porten P0 maximalt analoga stift men de används för LCD-relaterad kommunikation. Således är P3.0 och P1.7 tillgängliga som analoga ingångsstift AIN1 och AIN0. Eftersom detta projekt endast kräver en analog stift, P1.7 som är Analog ingångskanal 0, används för detta projekt.
Information om ADC Peripheral i N76E003
N76E003 tillhandahåller en 12-bitars SAR ADC. Det är en mycket bra egenskap hos N76E003 att den har en mycket bra upplösning på ADC. ADC har 8-kanaliga ingångar i single-end-läge. Gränssnittet mellan ADC är ganska enkelt och enkelt.
Det första steget är att välja ADC-kanalingång. Det finns 8-kanaliga ingångar tillgängliga i N76E003 mikrokontroller. Efter att ha valt ADC-ingångarna eller I / O-stiften, måste alla stift ställas in för riktningen i koden. Alla stift som används för den analoga ingången är ingångsstiften för mikrokontrollern, så alla stift måste ställas in som endast ingångsläge (högimpedans). Dessa kan ställas in med hjälp av PxM1- och PxM2-registret. Dessa två register ställer in I / O-lägen där x står för portnumret (till exempel Port P1.0 blir registret P1M1 och P1M2, för P3.0 blir det P3M1 och P3M2, etc.) Konfigurationen kan ses i bilden nedan-
Konfigurationen av ADC görs av två register ADCCON0 och ADCCON1. ADCCON0-registerbeskrivningen visas nedan.
De första 4 bitarna i registret från bit 0 till bit 3 används för att ställa in ADC-kanalvalet. Eftersom vi använder kanalen AIN0 kommer valet att vara 0000 för dessa fyra bitar.
De 6: e och 7: e bitarna är de viktiga. ADCS krävs för att ställa in 1 för att starta ADC-konverteringen och ADCF kommer att ge information om den lyckade ADC-konverteringen. Det måste ställas in 0 av firmware för att starta ADC-konverteringen. Nästa register är ADCCON1-
ADCCON1-registret används huvudsakligen för ADC-konvertering som utlöses av externa källor. För normala avfrågningsrelaterade operationer krävs dock den första biten ADCEN för att ställa in 1 för att slå på ADC-kretsarna.
Därefter måste ingången till ADC-kanalen styras i AINDIDS- registret där de digitala ingångarna kan kopplas bort.
N står för kanalbiten (till exempel måste AIN0-kanalen styras med den första biten P17DIDS i AINDIDS- registret). Den digitala ingången måste aktiveras, annars läses den som 0. Dessa är alla grundinställningarna för ADC. Nu kan du rensa ADCF och ställa in ADCS ADC-konverteringen. Det omvandlade värdet kommer att finnas tillgängligt i nedanstående register -
Och
Båda registren är 8 bitar. Eftersom ADC tillhandahåller 12-bitars data används ADCRH som full (8 bitar) och ADCRL används som halv (4-bitar).
Programmering N76E003 för ADC
Kodning för en specifik modul varje gång är ett hektiskt jobb, så det tillhandahålls ett enkelt men ändå kraftfullt LCD-bibliotek som kommer att vara mycket användbart för 16x2 tecken LCD-gränssnitt med N76E003. 16x2 LCD-biblioteket finns i vårt Github-arkiv, som kan laddas ner från länken nedan.
Ladda ner 16x2 LCD-bibliotek för Nuvoton N76E003
Vänligen ha biblioteket (genom att klona eller ladda ner) och inkludera bara lcd.c- och LCD.h- filerna i ditt Keil N76E003-projekt för enkel integrering av 16x2 LCD i önskat program eller projekt. Biblioteket kommer att tillhandahålla följande användbara displayrelaterade funktioner-
- Initiera LCD-skärmen.
- Skicka kommando till LCD-skärmen.
- Skriv till LCD-skärmen.
- Lägg en sträng i LCD-skärmen (16 tecken).
- Skriv ut tecken genom att skicka hex-värde.
- Bläddra långa meddelanden med mer än 16 tecken.
- Skriv ut heltal direkt i LCD-skärmen.
Kodningen för ADC är enkel. I installationsfunktionen Enable_ADC_AIN0; används för att ställa in ADC för AIN0- ingång. Detta definieras i filen.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Så, ovanstående rad ställer in stiftet som en ingång och konfigurerar ADCCON0, ADCCON1- registret liksom AINDIDS- registret också. Funktionen nedan läser ADC från ADCRH- och ADCRL- registret men med 12-bitars upplösning.
osignerad int ADC_read (ogiltig) { registrera osignerad int adc_value = 0x0000; clr_ADCF; set_ADCS; medan (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; returnera adc_value; }
Biten vänsterskiftas fyra gånger och läggs sedan till i datavariabeln. I huvudfunktionen läser ADC data och skrivs ut direkt på skärmen. Emellertid omvandlas spänningen också med användning av ett förhållande eller förhållandet mellan spänning dividerat med bitvärdet.
En 12-bitars ADC ger 4095 bitar på 5.0V-ingång. Således delar du 5,0V / 4095 = 0,0012210012210012V
Så, en siffra bitändringar kommer att vara lika med förändringarna i 0,001V (ungefär). Detta görs i huvudfunktionen som visas nedan.
ogiltigt huvud (ogiltigt) { int adc_data; uppstart(); lcd_com (0x01); medan (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC Data:"); adc_data = ADC_read (); lcd_print_number (adc_data); spänning = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltage); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Data konverteras från bitvärde till spänning och med hjälp av en sprintf- funktion konverteras utgången till en sträng och skickas till LCD-skärmen.
Blinkar koden och utdata
Koden returnerade 0 varning och 0 fel och blinkade med hjälp av standardblinkningsmetoden av Keil, du kan se det blinkande meddelandet nedan. Om du är ny på Keil eller Nuvoton, kolla in att komma igång med Nuvoton mikrokontroller för att förstå grunderna och hur du laddar upp koden.
Ombyggnaden startade: Projekt: timer Ombyggnadsmål 'Target 1' som sätter ihop STARTUP.A51… sammanställer main.c… sammanställer lcd.c… sammanställer Delay.c… länkar… Programstorlek: data = 101.3 xdata = 0 kod = 4162 skapar hex-fil från ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Fel, 0 Varning (ar). Byggtid förfluten: 00:00:02 Ladda "G: \\ n76E003 \\ Display \\ Objekt \\ timer" Blixt Radera Klar. Flash Skriv Klar: 4162 byte programmerade. Flashverifiering klar: 4162 byte verifierade. Flash Load slutade klockan 11:56:04
Bilden nedan visar hårdvaran som är ansluten till strömkällan med en likströmsadapter och displayen visar den spänningsutgång som ställts in av potentiometern till höger.
Om vi vrider på potentiometern ändras också spänningen till ADC-stiftet och vi kan märka ADC-värdet och den analoga spänningen som visas på LCD-skärmen. Du kan kolla in videon nedan för en fullständig demonstration av denna handledning.
Hoppas att du gillade artikeln och lärde dig något användbart, om du har frågor, lämna dem i kommentarsektionen nedan, eller så kan du använda våra forum för att skicka andra tekniska frågor.