- Erforderliche Komponenten und Hardware-Setup
- Nuvoton N76E003 Schaltplan zum Lesen der analogen Spannung
- Informationen zu GPIO und analogen Pins in N76E003
- Informationen zu ADC-Peripheriegeräten in N76E003
- Programmierung N76E003 für ADC
- Flashen des Codes und der Ausgabe
Der Analog-Digital-Wandler (ADC) ist die am häufigsten verwendete Hardwarefunktion eines Mikrocontrollers. Es nimmt analoge Spannung auf und wandelt sie in einen digitalen Wert um. Da Mikrocontroller digitale Geräte sind und mit den Binärziffern 1 und 0 arbeiten, konnten die analogen Daten nicht direkt verarbeitet werden. Somit wird ein ADC verwendet, um analoge Spannung aufzunehmen und in ihren äquivalenten digitalen Wert umzuwandeln, den ein Mikrocontroller verstehen kann. Wenn Sie mehr über Analog-Digital-Wandler (ADC) erfahren möchten, lesen Sie den verlinkten Artikel.
In der Elektronik sind verschiedene Sensoren verfügbar, die einen analogen Ausgang bieten, wie z. B. die MQ-Gassensoren, der ADXL335-Beschleunigungssensor usw. Mit dem Analog-Digital-Wandler können diese Sensoren daher mit einer Mikrocontrollereinheit verbunden werden. Sie können auch andere unten aufgeführte Tutorials lesen, um ADC mit anderen Mikrocontrollern zu verwenden.
- Wie verwende ich ADC in Arduino Uno?
- Schnittstelle zwischen ADC0808 und 8051-Mikrocontroller
- Verwenden des ADC-Moduls des PIC-Mikrocontrollers
- Raspberry Pi ADC Tutorial
- Verwendung des ADC in MSP430G2 - Messung der analogen Spannung
- Verwendung von ADC in STM32F103C8
In diesem Tutorial verwenden wir das eingebaute ADC-Peripheriegerät der N76E003-Mikrocontrollereinheit. Lassen Sie uns also bewerten, welche Art von Hardware-Setup wir für diese Anwendung benötigen.
Erforderliche Komponenten und Hardware-Setup
Um ADC am N76E003 zu verwenden, verwenden wir einen Spannungsteiler mit einem Potentiometer und lesen die Spannung im Bereich von 0 V bis 5,0 V ab. Die Spannung wird im 16x2-Zeichen-LCD angezeigt. Wenn Sie mit LCD und N76E003 neu sind, können Sie überprüfen, wie das LCD mit Nuvoton N76E003 verbunden wird. Daher ist die Hauptkomponente, die für dieses Projekt benötigt wird, ein 16x2-Zeichen-LCD. Für dieses Projekt werden wir die folgenden Komponenten verwenden:
- Zeichen LCD 16x2
- 1k Widerstand
- 50k Potentiometer oder Trimmtopf
- Nur wenige Bergdrähte
- Nur wenige Anschlussdrähte
- Steckbrett
Abgesehen von den oben genannten Komponenten benötigen wir das auf einem Mikrocontroller basierende Entwicklungsboard N76E003 sowie den Nu-Link-Programmierer. Ein zusätzliches 5-V-Netzteil ist ebenfalls erforderlich, da das LCD genügend Strom zieht, den der Programmierer nicht liefern kann.
Nuvoton N76E003 Schaltplan zum Lesen der analogen Spannung
Wie wir im Schema sehen können, wird der Port P0 für die LCD-bezogene Verbindung verwendet. Ganz links ist der Anschluss der Programmierschnittstelle dargestellt. Das Potentiometer wirkt als Spannungsteiler und wird vom Analogeingang 0 (AN0) erfasst.
Informationen zu GPIO und analogen Pins in N76E003
Das folgende Bild zeigt die GPIO-Pins, die an der Mikrocontrollereinheit N76E003AT20 verfügbar sind. Von den 20 Pins wird jedoch für die LCD-bezogene Verbindung der Port P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 und P0.7) verwendet. Die Analogstifte sind in ROTEN Farben hervorgehoben.
Wie wir sehen können, verfügt der Port P0 über maximale analoge Pins, die jedoch für die LCD-Kommunikation verwendet werden. Somit sind P3.0 und P1.7 als Analogeingangspins AIN1 und AIN0 verfügbar. Da für dieses Projekt nur ein analoger Pin erforderlich ist, wird für dieses Projekt P1.7 verwendet, bei dem es sich um den analogen Eingangskanal 0 handelt.
Informationen zu ADC-Peripheriegeräten in N76E003
N76E003 bietet einen 12-Bit-SAR-ADC. Es ist eine sehr gute Eigenschaft des N76E003, dass es eine sehr gute Auflösung von ADC hat. Der ADC verfügt über 8-Kanal-Eingänge im Single-End-Modus. Die Schnittstelle zum ADC ist ziemlich einfach und unkompliziert.
Der erste Schritt ist die Auswahl des ADC-Kanaleingangs. In N76E003-Mikrocontrollern stehen 8-Kanal-Eingänge zur Verfügung. Nach Auswahl der ADC-Eingänge oder der E / A-Pins müssen alle Pins für die Richtung im Code eingestellt werden. Alle für den Analogeingang verwendeten Pins sind Eingangspins des Mikrocontrollers, daher müssen alle Pins als Nur-Eingangsmodus (hochohmig) eingestellt werden. Diese können mit den Registern PxM1 und PxM2 eingestellt werden. Diese beiden Register legen die E / A-Modi fest, in denen x für die Portnummer steht (Beispiel: Port P1.0, das Register ist P1M1 und P1M2, für P3.0 ist es P3M1 und P3M2 usw.). Die Konfiguration kann im folgenden Bild zu sehen-
Die Konfiguration des ADC erfolgt über zwei Register ADCCON0 und ADCCON1. Die Beschreibung des ADCCON0-Registers ist unten dargestellt.
Die ersten 4 Bits des Registers von Bit 0 bis Bit 3 werden zum Einstellen der ADC-Kanalauswahl verwendet. Da wir den Kanal AIN0 verwenden, ist die Auswahl für diese vier Bits 0000.
Das 6. und 7. Bit sind die wichtigen. ADCS muss 1 setzen, um die ADC-Konvertierung zu starten, und der ADCF liefert Informationen über die erfolgreiche ADC-Konvertierung. Es muss von der Firmware auf 0 gesetzt werden, um die ADC-Konvertierung zu starten. Das nächste Register ist das ADCCON1-
Das ADCCON1-Register wird hauptsächlich für die ADC-Konvertierung verwendet, die von externen Quellen ausgelöst wird. Für normale Abfragevorgänge muss der ADCEN mit dem ersten Bit jedoch 1 setzen, um die ADC-Schaltung einzuschalten.
Als nächstes muss der Eingang des ADC-Kanals im AINDIDS- Register gesteuert werden, wo die digitalen Eingänge getrennt werden können.
Das n steht für das Kanalbit (zum Beispiel muss der AIN0-Kanal mit dem ersten Bit P17DIDS des AINDIDS- Registers gesteuert werden). Der digitale Eingang muss aktiviert sein, andernfalls wird er als 0 angezeigt. Dies sind alles die Grundeinstellungen des ADC. Wenn Sie nun den ADCF löschen und den ADCS einstellen, kann die ADC-Konvertierung gestartet werden. Der konvertierte Wert wird in den folgenden Registern verfügbar sein.
Und
Beide Register sind 8-Bit. Da der ADC 12-Bit-Daten bereitstellt, wird der ADCRH als voll (8 Bit) und der ADCRL als halb (4 Bit) verwendet.
Programmierung N76E003 für ADC
Das Codieren für ein bestimmtes Modul ist jedes Mal eine hektische Aufgabe. Daher wird eine einfache, aber leistungsstarke LCD-Bibliothek bereitgestellt, die für die 16x2-Zeichen-LCD-Schnittstelle mit N76E003 sehr nützlich ist. Die 16x2-LCD-Bibliothek ist in unserem Github-Repository verfügbar, das Sie über den folgenden Link herunterladen können.
Laden Sie die 16x2 LCD-Bibliothek für Nuvoton N76E003 herunter
Bitte haben Sie die Bibliothek (durch Klonen oder Herunterladen) und fügen Sie einfach die Dateien lcd.c und LCD.h in Ihr Keil N76E003-Projekt ein, um das 16x2-LCD einfach in die gewünschte Anwendung oder das gewünschte Projekt zu integrieren. Die Bibliothek bietet die folgenden nützlichen Funktionen für die Anzeige:
- Initialisieren Sie das LCD.
- Befehl an das LCD senden.
- Schreiben Sie auf das LCD.
- Legen Sie eine Zeichenfolge in das LCD (16 Zeichen).
- Drucken Sie das Zeichen, indem Sie einen Hex-Wert senden.
- Scrollen Sie durch lange Nachrichten mit mehr als 16 Zeichen.
- Drucken Sie Ganzzahlen direkt auf das LCD.
Die Codierung für ADC ist einfach. In der Setup-Funktion Enable_ADC_AIN0; wird zum Einrichten des ADC für den AIN0- Eingang verwendet. Dies ist in der Datei definiert.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Die obige Zeile setzt also den Pin als Eingang und konfiguriert auch das Register ADCCON0, ADCCON1 sowie das Register AINDIDS . Die folgende Funktion liest den ADC aus dem ADCRH- und ADCRL- Register, jedoch mit einer Auflösung von 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; }}
Das Bit wird viermal nach links verschoben und dann zur Datenvariablen hinzugefügt. In der Hauptfunktion liest der ADC die Daten und wird direkt auf dem Display gedruckt. Die Spannung wird jedoch auch unter Verwendung eines Verhältnisses oder der Beziehung zwischen der Spannung geteilt durch den Bitwert umgewandelt.
Ein 12-Bit-ADC liefert 4095 Bit am 5,0-V-Eingang. Somit wird die 5,0 V / 4095 = 0,0012210012210012 V geteilt
Eine Ziffer der Bitänderungen entspricht also den Änderungen in 0,001 V (ungefähr). Dies erfolgt in der unten gezeigten Hauptfunktion.
void main (void) { int adc_data; Konfiguration(); lcd_com (0x01); während (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC Data:"); adc_data = ADC_read (); lcd_print_number (adc_data); Spannung = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0,2fV", Spannung); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Die Daten werden vom Bitwert in die Spannung konvertiert und unter Verwendung einer Sprintf- Funktion wird die Ausgabe in eine Zeichenfolge konvertiert und an das LCD gesendet.
Flashen des Codes und der Ausgabe
Der Code gab 0 Warnungen und 0 Fehler zurück und wurde mit der Standard-Blinkmethode von Keil geflasht. Sie können die blinkende Meldung unten sehen. Wenn Sie Keil oder Nuvoton noch nicht kennen, lesen Sie die ersten Schritte mit dem Nuvoton-Mikrocontroller, um die Grundlagen und das Hochladen des Codes zu verstehen.
Die Neuerstellung wurde gestartet: Projekt: Timer Ziel 'Ziel 1' neu erstellen , STARTUP.A51 zusammenstellen… main.c kompilieren… lcd.c kompilieren… Delay.c kompilieren… verknüpfen… Programmgröße: data = 101.3 xdata = 0 code = 4162 Erstellen einer Hex-Datei aus ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Fehler, 0 Warnung (en). Verstrichene Erstellungszeit: 00:00:02 Laden Sie "G: \\ n76E003 \\ Anzeige \\ Objekte \\ Timer". Flash Erase Done. Flash Write Done: 4162 Bytes programmiert. Flash Verify Done: 4162 Bytes verifiziert. Das Laden des Flashs wurde um 11:56:04 Uhr beendet
Das Bild unten zeigt die Hardware, die mit einem Gleichstromadapter an die Stromquelle angeschlossen ist, und auf dem Display wird der vom Potentiometer rechts eingestellte Spannungsausgang angezeigt.
Wenn wir das Potentiometer drehen, ändert sich auch die an den ADC-Pin angelegte Spannung, und wir können den ADC-Wert und die analoge Spannung auf dem LCD sehen. Im folgenden Video finden Sie die vollständige Funktionsdemonstration dieses Tutorials.
Ich hoffe, Ihnen hat der Artikel gefallen und Sie haben etwas Nützliches gelernt. Wenn Sie Fragen haben, lassen Sie diese im Kommentarbereich unten oder nutzen Sie unsere Foren, um andere technische Fragen zu stellen.