- Componenti necessari e configurazione hardware
- Schema del circuito Nuvoton N76E003 per leggere la tensione analogica
- Informazioni su GPIO e pin analogici in N76E003
- Informazioni sulla periferica ADC in N76E003
- Programmazione N76E003 per ADC
- Lampeggiante il codice e l'output
Il convertitore analogico / digitale (ADC) è la caratteristica hardware più utilizzata su un microcontrollore. Prende la tensione analogica e la converte in un valore digitale. Poiché i microcontrollori sono dispositivi digitali e funzionano con le cifre binarie 1 e 0, non è possibile elaborare direttamente i dati analogici. Pertanto, un ADC viene utilizzato per rilevare la tensione analogica e convertirla nel suo valore digitale equivalente che un microcontrollore può comprendere. Se vuoi saperne di più sul convertitore analogico-digitale (ADC), puoi controllare l'articolo collegato.
Esistono diversi sensori disponibili nell'elettronica che forniscono un'uscita analogica, come i sensori di gas MQ, il sensore dell'accelerometro ADXL335, ecc. Pertanto, utilizzando il convertitore da analogico a digitale, questi sensori possono essere interfacciati con un'unità microcontrollore. Puoi anche controllare altri tutorial elencati di seguito, per l'utilizzo di ADC con altri microcontrollori.
- Come utilizzare ADC in Arduino Uno?
- Interfacciamento ADC0808 con Microcontrollore 8051
- Utilizzo del modulo ADC del microcontrollore PIC
- Tutorial ADC Raspberry Pi
- Come utilizzare l'ADC in MSP430G2 - Misurazione della tensione analogica
- Come utilizzare ADC in STM32F103C8
In questo tutorial, utilizzeremo la periferica ADC integrata dell'unità microcontrollore N76E003, quindi valutiamo il tipo di configurazione hardware necessaria per questa applicazione.
Componenti necessari e configurazione hardware
Per utilizzare l' ADC su N76E003, utilizzeremo un partitore di tensione utilizzando un potenziometro e leggeremo la tensione compresa tra 0 V e 5,0 V. La tensione verrà visualizzata nell'LCD 16x2 caratteri, se sei nuovo con LCD e N76E003, puoi controllare come interfacciare LCD con Nuvoton N76E003. Pertanto, il componente principale richiesto per questo progetto è l'LCD 16x2 caratteri. Per questo progetto, utilizzeremo i componenti seguenti:
- LCD a caratteri 16x2
- Resistenza da 1k
- Potenziometro 50k o potenziometro trim
- Pochi fili Berg
- Pochi cavi di collegamento
- Breadboard
Per non parlare, oltre ai componenti di cui sopra, abbiamo bisogno della scheda di sviluppo basata sul microcontrollore N76E003 e del programmatore Nu-Link. È inoltre necessario un alimentatore aggiuntivo da 5 V poiché il display LCD assorbe una corrente sufficiente che il programmatore non potrebbe fornire.
Schema del circuito Nuvoton N76E003 per leggere la tensione analogica
Come possiamo vedere nello schema, la porta P0 viene utilizzata per la connessione relativa all'LCD. All'estrema sinistra viene mostrato il collegamento dell'interfaccia di programmazione. Il potenziometro funge da partitore di tensione e viene rilevato dall'ingresso analogico 0 (AN0).
Informazioni su GPIO e pin analogici in N76E003
L'immagine sotto mostra i pin GPIO disponibili sull'unità microcontrollore N76E003AT20. Tuttavia, su 20 pin, per la connessione relativa al display LCD, viene utilizzata la porta P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 e P0.7). I pin analogici sono evidenziati in ROSSO.
Come possiamo vedere, la porta P0 ha il massimo di pin analogici, ma questi sono usati per la comunicazione relativa all'LCD. Pertanto, P3.0 e P1.7 sono disponibili come pin di ingresso analogico AIN1 e AIN0. Poiché questo progetto richiede un solo pin analogico, P1.7 che è il canale di ingresso analogico 0, viene utilizzato per questo progetto.
Informazioni sulla periferica ADC in N76E003
N76E003 fornisce un ADC SAR a 12 bit. È un'ottima caratteristica dell'N76E003 che ha un'ottima risoluzione dell'ADC. L'ADC dispone di ingressi a 8 canali in modalità single-end. L'interfacciamento con l'ADC è piuttosto semplice e diretto.
Il primo passo è selezionare l' ingresso del canale ADC. Sono disponibili ingressi a 8 canali nei microcontrollori N76E003. Dopo aver selezionato gli ingressi ADC o i pin I / O, tutti i pin devono essere impostati per la direzione nel codice. Tutti i pin utilizzati per l'ingresso analogico sono pin di ingresso del microcontrollore, quindi tutti i pin devono essere impostati come modalità di solo ingresso (alta impedenza). Questi possono essere impostati utilizzando il registro PxM1 e PxM2. Questi due registri impostano le modalità I / O dove la x sta per il numero della porta (Ad esempio, Porta P1.0 il registro sarà P1M1 e P1M2, per P3.0 sarà P3M1 e P3M2, ecc.) La configurazione può essere visto nell'immagine qui sotto-
La configurazione dell'ADC viene eseguita da due registri ADCCON0 e ADCCON1. La descrizione del registro ADCCON0 è mostrata di seguito.
I primi 4 bit del registro dal bit 0 al bit 3 vengono utilizzati per impostare la selezione del canale ADC. Poiché stiamo utilizzando il canale AIN0, la selezione sarà 0000 per questi quattro bit.
Il 6 ° e il 7 ° bit sono quelli importanti. ADCS deve impostare 1 per avviare la conversione ADC e l' ADCF fornirà informazioni sulla corretta conversione ADC. Deve essere impostato a 0 dal firmware per avviare la conversione dell'ADC. Il registro successivo è ADCCON1-
Il registro ADCCON1 viene utilizzato principalmente per la conversione ADC attivata da sorgenti esterne. Tuttavia, per le normali operazioni relative al polling, è necessario che il primo bit ADCEN imposti 1 per l'accensione del circuito ADC.
Successivamente, l'ingresso del canale ADC deve essere controllato nel registro AINDIDS dove gli ingressi digitali possono essere scollegati.
La n sta per il bit del canale (Ad esempio, il canale AIN0 dovrà essere controllato utilizzando il primo bit P17DIDS del registro AINDIDS). L'ingresso digitale deve essere abilitato, altrimenti verrà letto come 0. Queste sono tutte le impostazioni di base dell'ADC. Ora, cancellando l'ADCF e impostando l'ADC, è possibile avviare la conversione dell'ADC. Il valore convertito sarà disponibile nei registri seguenti-
E
Entrambi i registri sono a 8 bit. Poiché l'ADC fornisce dati a 12 bit, l'ADCRH viene utilizzato come pieno (8 bit) e l'ADCRL come metà (4 bit).
Programmazione N76E003 per ADC
La codifica per un modulo specifico ogni volta è un lavoro frenetico, quindi viene fornita una libreria LCD semplice ma potente che sarà molto utile per l'interfacciamento di LCD 16x2 caratteri con N76E003. La libreria LCD 16x2 è disponibile nel nostro repository Github, che può essere scaricato dal link sottostante.
Scarica la libreria LCD 16x2 per Nuvoton N76E003
Si prega di avere la libreria (clonando o scaricando) e includere semplicemente i file lcd.c e LCD.h nel progetto Keil N76E003 per una facile integrazione dell'LCD 16x2 nell'applicazione o nel progetto desiderato. La libreria fornirà le seguenti utili funzioni relative al display:
- Inizializza il display LCD.
- Invia il comando al display LCD.
- Scrivi sul display LCD.
- Metti una stringa nell'LCD (16 caratteri).
- Stampa il carattere inviando un valore esadecimale.
- Scorri messaggi lunghi con più di 16 caratteri.
- Stampa i numeri interi direttamente sul display LCD.
La codifica per ADC è semplice. Nella funzione di configurazione Enable_ADC_AIN0; viene utilizzato per impostare l' ADC per l' ingresso AIN0 . Questo è definito nel file.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Quindi, la riga sopra imposta il pin come input e configura il registro ADCCON0, ADCCON1 e anche il registro AINDIDS . La funzione seguente leggerà l'ADC dal registro ADCRH e ADCRL ma con una risoluzione a 12 bit.
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; return adc_value; }
Il bit viene spostato a sinistra 4 volte e quindi aggiunto alla variabile di dati. Nella funzione principale, l'ADC legge i dati e viene stampato direttamente sul display. Tuttavia, la tensione viene anche convertita utilizzando un rapporto o la relazione tra la tensione divisa per il valore del bit.
Un ADC a 12 bit fornirà 4095 bit sull'ingresso 5.0V. Dividendo così il 5,0 V / 4095 = 0,0012210012210012V
Quindi, 1 cifra di modifiche di bit sarà uguale alle modifiche di 0,001 V (circa). Questo viene fatto nella funzione principale mostrata di seguito.
void main (void) { int adc_data; impostare(); lcd_com (0x01); while (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Dati ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltaggio = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltaggio); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
I dati vengono convertiti dal valore del bit alla tensione e utilizzando una funzione sprintf , l'uscita viene convertita in una stringa e inviata al display LCD.
Lampeggiante il codice e l'output
Il codice ha restituito 0 avvisi e 0 errori ed è stato lampeggiato utilizzando il metodo di lampeggiamento predefinito dal Keil, puoi vedere il messaggio lampeggiante qui sotto. Se non conosci Keil o Nuvoton, dai un'occhiata alla guida introduttiva al microcontrollore Nuvoton per comprendere le basi e come caricare il codice.
La ricostruzione è iniziata: Progetto: timer Ricostruisci target 'Target 1' assemblando STARTUP.A51… compilazione main.c… compilazione lcd.c… compilazione Ritardo.c… collegamento… Dimensione programma: data = 101.3 xdata = 0 code = 4162 creazione di un file esadecimale da ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Errore (i), 0 Avviso (i). Tempo di costruzione trascorso: 00:00:02 Carica "G: \\ n76E003 \\ Display \\ Oggetti \\ timer" Cancellazione flash completata. Scrittura flash eseguita: 4162 byte programmati. Verifica flash eseguita: 4162 byte verificati. Il caricamento flash è terminato alle 11:56:04
L'immagine sotto mostra l'hardware collegato alla fonte di alimentazione utilizzando un adattatore CC e il display mostra l'uscita di tensione impostata dal potenziometro a destra.
Se giriamo il potenziometro, cambierà anche la tensione data al pin ADC e possiamo notare il valore ADC e la tensione analogica visualizzati sul display LCD. Puoi guardare il video qui sotto per la dimostrazione di lavoro completa di questo tutorial.
Spero che l'articolo ti sia piaciuto e hai imparato qualcosa di utile, se hai domande, lasciale nella sezione commenti qui sotto, oppure puoi usare i nostri forum per pubblicare altre domande tecniche.