- Vereiste componenten en hardware-installatie
- Nuvoton N76E003 schakelschema om analoge spanning te lezen
- Informatie over GPIO en analoge pinnen in N76E003
- Informatie over ADC-randapparatuur in N76E003
- Programmering N76E003 voor ADC
- Knipperende code en uitvoer
Analoog naar digitaal converter (ADC) is de meest gebruikte hardwarefunctie op een microcontroller. Het neemt analoge spanning op en converteert deze naar een digitale waarde. Omdat microcontrollers digitale apparaten zijn en werken met het binaire cijfer 1 en 0, kan het de analoge gegevens niet rechtstreeks verwerken. Een ADC wordt dus gebruikt om analoge spanning op te nemen en deze om te zetten in de equivalente digitale waarde die een microcontroller kan begrijpen. Als u meer wilt over Analog to Digital Converter (ADC), kunt u het gekoppelde artikel raadplegen.
Er zijn verschillende sensoren beschikbaar in de elektronica die analoge output leveren, zoals de MQ-gassensoren, ADXL335 Accelerometer-sensor, enz. Dus, met behulp van een analoog-naar-digitaal-omvormer, kunnen die sensoren worden gekoppeld aan een microcontrollereenheid. U kunt ook andere onderstaande tutorials bekijken voor het gebruik van ADC met andere microcontrollers.
- Hoe ADC te gebruiken in Arduino Uno?
- Koppeling tussen ADC0808 met 8051 Microcontroller
- Met behulp van ADC-module van PIC Microcontroller
- Raspberry Pi ADC-zelfstudie
- Hoe ADC te gebruiken in MSP430G2 - Analoge spanning meten
- Hoe ADC te gebruiken in STM32F103C8
In deze tutorial zullen we het ingebouwde ADC-randapparaat van de N76E003-microcontrollereenheid gebruiken, dus laten we eens kijken wat voor soort hardware-instellingen we nodig hebben voor deze toepassing.
Vereiste componenten en hardware-installatie
Om ADC op N76E003 te gebruiken, gebruiken we een spanningsdeler met behulp van een potentiometer en lezen we de spanning tussen 0V en 5.0V. De spanning wordt weergegeven op het LCD-scherm van 16x2 tekens. Als u nieuw bent met LCD en N76E003, kunt u controleren hoe u het LCD-scherm met Nuvoton N76E003 verbindt. Het belangrijkste onderdeel dat voor dit project nodig is, is dus een 16x2 Character LCD. Voor dit project zullen we de onderstaande componenten gebruiken:
- Karakter LCD 16x2
- 1k weerstand
- 50k potentiometer of sierpot
- Weinig Berg-draden
- Weinig aansluitkabels
- Breadboard
Om nog maar te zwijgen over de bovenstaande componenten: we hebben het N76E003-microcontroller- gebaseerde ontwikkelbord nodig, evenals de Nu-Link Programmer. Een extra 5V-voedingseenheid is ook vereist, aangezien het LCD-scherm voldoende stroom trekt die de programmeur niet kon leveren.
Nuvoton N76E003 schakelschema om analoge spanning te lezen
Zoals we in het schema kunnen zien, wordt de poort P0 gebruikt voor de LCD-gerelateerde verbinding. Helemaal links wordt de aansluiting van de programmeerinterface weergegeven. De potentiometer fungeert als spanningsdeler en wordt gedetecteerd door de analoge ingang 0 (AN0).
Informatie over GPIO en analoge pinnen in N76E003
De onderstaande afbeelding illustreert de GPIO-pinnen die beschikbaar zijn op de N76E003AT20-microcontrollereenheid. Echter, van de 20 pinnen, voor de LCD-gerelateerde verbinding, wordt poort P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 en P0.7) gebruikt. De analoge pinnen zijn gemarkeerd in RODE kleuren.
Zoals we kunnen zien, heeft poort P0 maximale analoge pinnen, maar deze worden gebruikt voor LCD-gerelateerde communicatie. P3.0 en P1.7 zijn dus beschikbaar als analoge ingangspennen AIN1 en AIN0. Omdat voor dit project slechts één analoge pin nodig is, wordt P1.7, dat analoog ingangskanaal 0 is, voor dit project gebruikt.
Informatie over ADC-randapparatuur in N76E003
N76E003 biedt een 12-bits SAR ADC. Het is een zeer goede eigenschap van de N76E003 dat deze een zeer goede resolutie van ADC heeft. De ADC heeft 8-kanaals ingangen in single-end-modus. Het koppelen van de ADC is vrij eenvoudig en duidelijk.
De eerste stap is het selecteren van de ADC-kanaalingang. Er zijn 8-kanaals ingangen beschikbaar in N76E003-microcontrollers. Na het selecteren van de ADC-ingangen of de I / O-pinnen, moeten alle pinnen worden ingesteld voor de richting in de code. Alle pinnen die worden gebruikt voor de analoge ingang zijn ingangspennen van de microcontroller, dus alle pinnen moeten worden ingesteld als alleen-ingang (hoge impedantie) modus. Deze kunnen worden ingesteld met behulp van het PxM1- en PxM2-register. Deze twee registers stellen de I / O-modi in waarbij de x staat voor het poortnummer (bijvoorbeeld poort P1.0 is het register P1M1 en P1M2, voor P3.0 is het P3M1 en P3M2, enz.) De configuratie kan te zien in de onderstaande afbeelding-
De configuratie van de ADC wordt gedaan door twee registers ADCCON0 en ADCCON1. De ADCCON0-registerbeschrijving wordt hieronder weergegeven.
De eerste 4 bits van het register van bit 0 tot bit 3 worden gebruikt om de ADC-kanaalselectie in te stellen. Omdat we het kanaal AIN0 gebruiken, is de selectie 0000 voor deze vier bits.
De 6e en 7e bits zijn de belangrijkste. ADCS is vereist om 1 in te stellen voor het starten van de ADC-conversie en de ADCF geeft informatie over de succesvolle ADC-conversie. Het moet door de firmware op 0 worden ingesteld om de ADC-conversie te starten. Het volgende register is de ADCCON1-
Het ADCCON1-register wordt voornamelijk gebruikt voor de ADC-conversie die wordt geactiveerd door externe bronnen. Voor normale polling-gerelateerde bewerkingen is de eerste bit ADCEN echter vereist om 1 in te stellen voor het inschakelen van de ADC-schakelingen.
Vervolgens moet de ingang van het ADC-kanaal worden aangestuurd in het AINDIDS- register waar de digitale ingangen kunnen worden losgekoppeld.
De n staat voor de kanaalbit (het AIN0-kanaal moet bijvoorbeeld worden bestuurd met behulp van de eerste bit P17DIDS van het AINDIDS- register). De digitale ingang moet zijn ingeschakeld, anders wordt deze weergegeven als 0. Dit zijn allemaal de basisinstellingen van de ADC. Nu, de ADCF wissen en de ADCS instellen, kan de ADC-conversie worden gestart. De geconverteerde waarde is beschikbaar in de onderstaande registers-
En
Beide registers zijn 8-bits. Omdat de ADC 12-bits gegevens levert, wordt de ADCRH gebruikt als volledig (8-bits) en wordt de ADCRL als half (4-bits) gebruikt.
Programmering N76E003 voor ADC
Elke keer coderen voor een specifieke module is een hectische klus, dus wordt er voorzien in een eenvoudige maar krachtige LCD-bibliotheek die erg handig zal zijn voor LCD-interfaces van 16x2 tekens met de N76E003. De 16x2 LCD-bibliotheek is beschikbaar in onze Github-repository, die kan worden gedownload via de onderstaande link.
Download 16x2 LCD-bibliotheek voor Nuvoton N76E003
Zorg dat u de bibliotheek hebt (door te klonen of te downloaden) en voeg de lcd.c- en LCD.h- bestanden toe aan uw Keil N76E003-project voor eenvoudige integratie van het 16x2 LCD-scherm in de gewenste toepassing of project. De bibliotheek biedt de volgende nuttige displaygerelateerde functies:
- Initialiseer de LCD.
- Stuur het commando naar het LCD-scherm.
- Schrijf naar het LCD-scherm.
- Zet een string in de LCD (16 karakters).
- Teken af door hexadecimale waarde te verzenden.
- Blader door lange berichten met meer dan 16 tekens.
- Print gehele getallen rechtstreeks op het LCD-scherm.
De codering voor ADC is eenvoudig. In de setup-functie Enable_ADC_AIN0; wordt gebruikt voor het instellen van de ADC voor AIN0- invoer. Dit wordt gedefinieerd in het bestand.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Dus de bovenstaande regel stelt de pin in als een invoer en configureert ook het ADCCON0-, ADCCON1- register en het AINDIDS- register. De onderstaande functie leest de ADC uit het ADCRH- en ADCRL- register maar met een resolutie van 12 bits.
unsigned int ADC_read (void) { register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; while (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; retourneer adc_value; }
De bit wordt 4 keer naar links verschoven en vervolgens toegevoegd aan de gegevensvariabele. In de hoofdfunctie leest de ADC de gegevens en wordt deze rechtstreeks op het display afgedrukt. De spanning wordt echter ook omgezet met behulp van een verhouding of de relatie tussen spanning gedeeld door de bitwaarde.
Een 12-bit ADC levert 4095 bit op 5.0V-ingang. Dus de 5.0V / 4095 = 0.0012210012210012V delen
Dus 1 cijfer van bitwijzigingen is gelijk aan de veranderingen in 0,001V (ongeveer). Dit wordt gedaan in de hoofdfunctie die hieronder wordt weergegeven.
void main (void) { int adc_data; opstelling(); lcd_com (0x01); while (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC-gegevens:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltage = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", spanning); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
De gegevens worden omgezet van bitwaarde naar spanning en met behulp van een sprintf- functie wordt de uitvoer geconverteerd naar een string en naar het LCD-scherm gestuurd.
Knipperende code en uitvoer
De code retourneerde 0 waarschuwing en 0 fouten en werd geflitst met behulp van de standaard knipperende methode door de Keil, u kunt het knipperende bericht hieronder zien. Als u nieuw bent bij Keil of Nuvoton, bekijk dan de handleiding Aan de slag met Nuvoton-microcontroller om de basisprincipes te begrijpen en om de code te uploaden.
Het opnieuw opbouwen begon: Project: timer Herbouw doel 'Target 1' assembleren STARTUP.A51… compileren main.c… compileren lcd.c… compileren Delay.c… koppelen… Programmagrootte: data = 101.3 xdata = 0 code = 4162 maakt hex-bestand van ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Fout (en), 0 Waarschuwing (en). Verstreken bouwtijd: 00:00:02 Laad "G: \\ n76E003 \\ Display \\ Objects \\ timer" Flash Erase Done. Flash schrijven voltooid: 4162 bytes geprogrammeerd. Flash Verify Done: 4162 bytes geverifieerd. Flash Load eindigde om 11:56:04
De onderstaande afbeelding toont de hardware die is aangesloten op de stroombron met behulp van een DC-adapter en het display toont de spanningsuitgang die is ingesteld door de potentiometer aan de rechterkant.
Als we aan de potentiometer draaien, verandert de spanning die aan de ADC-pin wordt gegeven ook en kunnen we de ADC-waarde en analoge spanning op het LCD-scherm zien. Je kunt de onderstaande video bekijken voor de volledige werkdemonstratie van deze tutorial.
Ik hoop dat je het artikel leuk vond en iets nuttigs hebt geleerd. Als je vragen hebt, laat ze dan achter in de commentaarsectie hieronder, of je kunt onze forums gebruiken om andere technische vragen te stellen.