Inhaltsverzeichnis:
- Schritt 1: Was ist ein ADC?
- Schritt 2: Wie ADC im AVR-Mikrocontroller funktioniert
- Schritt 3: ADC-Umwandlungsformel
- Schritt 4: Wie konfiguriere ich ADC in ATmega8?
- Schritt 5: ADLAR-Auswahl
- Schritt 6: ADCSRA-Auswahl
- Schritt 7: Wenn Sie den ADC-Wert nutzen möchten, müssen Sie einige der unten aufgeführten Arbeiten ausführen
- Schritt 8: ADC-Wert einstellen
- Schritt 9: Ausgangs-LED-Pin konfigurieren
- Schritt 10: ADC-Hardware konfigurieren
- Schritt 11: ADC aktivieren
- Schritt 12: Analog-zu-Digital-Wandlungen starten
- Schritt 13: WÄHREND für immer
- Schritt 14: Am Ende ist der vollständige Code
Video: Einführung in ADC im AVR-Mikrocontroller - für Anfänger: 14 Schritte
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
In diesem Tutorial erfahren Sie alles über ADC im avr-Mikrocontroller
Schritt 1: Was ist ein ADC?
Ein ADC oder Analog-Digital-Wandler ermöglicht es, eine analoge Spannung in einen digitalen Wert umzuwandeln, der von einem Mikrocontroller verwendet werden kann. Es gibt viele Quellen für analoge Signale, die man messen möchte. Es stehen analoge Sensoren zur Verfügung, die Temperatur, Lichtintensität, Abstand, Position und Kraft messen, um nur einige zu nennen.
Schritt 2: Wie ADC im AVR-Mikrocontroller funktioniert
Der AVR-ADC ermöglicht es dem AVR-Mikrocontroller, analoge Spannungen mit wenigen bis gar keinen externen Teilen in digitale Werte umzuwandeln. Der ATmega8 verfügt über einen 10-Bit-ADC mit sukzessiver Approximation. ATmega8 verfügt über einen 7-Kanal-ADC an PortC. Der ADC hat einen separaten analogen Versorgungsspannungs-Pin, AVCC. AVCC darf nicht mehr als ± 0,3V von VCC abweichen. Die Spannungsreferenz darf am Pin AREF extern entkoppelt werden. Als Spannungsreferenz wird AVCC verwendet. Der ADC kann auch so eingestellt werden, dass er kontinuierlich läuft (Freilaufmodus) oder nur eine Konvertierung durchführt.
Schritt 3: ADC-Umwandlungsformel
Dabei ist Vin die Spannung am ausgewählten Eingangspin und Vref die ausgewählte Spannungsreferenz
Schritt 4: Wie konfiguriere ich ADC in ATmega8?
Die folgenden Register werden für die Implementierung von ADC in ATmega8 verwendet
Auswahl des ADC-Multiplexers
Schritt 5: ADLAR-Auswahl
Ergebnis der ADC-Linksanpassung Das ADLAR-Bit beeinflusst die Darstellung des ADC-Umwandlungsergebnisses im ADC-Datenregister. Schreiben Sie eins in ADLAR, um das Ergebnis nach links anzupassen. Ansonsten ist das Ergebnis richtig eingestellt
Wenn eine ADC-Umwandlung abgeschlossen ist, wird das Ergebnis in ADCH und ADCL gefunden. Wenn ADCL gelesen wird, wird das ADC-Datenregister nicht aktualisiert, bis ADCH gelesen wird. Folglich reicht es aus, ADCH zu lesen, wenn das Ergebnis linksabgeglichen wird und nicht mehr als 8-Bit-Präzision erforderlich ist. Andernfalls muss zuerst ADCL gelesen werden, dann ADCH. Auswahlbits für analoge Kanäle Der Wert dieser Bits wählt aus, welche analogen Eingänge mit dem ADC verbunden sind.
Schritt 6: ADCSRA-Auswahl
• Bit 7 – ADEN: ADC Enable Das Schreiben dieses Bits auf eins aktiviert den ADC. Durch Schreiben auf Null wird der ADC ausgeschaltet
• Bit 6 – ADSC: ADC Start Conversion Im Single Conversion-Modus schreiben Sie dieses Bit auf eins, um jede Konvertierung zu starten. Schreiben Sie dieses Bit im Free Running-Modus auf eins, um die erste Konvertierung zu starten.
• Bit 5 – ADFR: ADC-Freilaufauswahl Wenn dieses Bit gesetzt (eins) ist, arbeitet der ADC im Freilaufmodus. In diesem Modus tastet der ADC die Datenregister kontinuierlich ab und aktualisiert sie. Das Löschen dieses Bits (Null) beendet den Freilaufmodus.
• Bit 4 – ADIF: ADC-Interrupt-Flag Dieses Bit wird gesetzt, wenn eine ADC-Wandlung abgeschlossen ist und die Datenregister aktualisiert werden. Der ADC-Umwandlungs-Abschluss-Interrupt wird ausgeführt, wenn das ADIE-Bit und das I-Bit im SREG gesetzt sind. ADIF wird von der Hardware gelöscht, wenn der entsprechende Interrupt-Handling-Vektor ausgeführt wird. Alternativ wird ADIF gelöscht, indem eine logische Eins in das Flag geschrieben wird.
• Bit 3 – ADIE: ADC Interrupt Enable Wenn dieses Bit auf eins geschrieben und das I-Bit im SREG gesetzt ist, wird der ADC Conversion Complete Interrupt aktiviert.
• Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits Laut Datenblatt muss dieser Preskalar so eingestellt werden, dass die ADC-Eingangsfrequenz zwischen 50 KHz und 200 KHz liegt. Der ADC-Takt wird mit Hilfe von ADPS2:0 aus dem Systemtakt abgeleitet. Diese Bits bestimmen den Teilungsfaktor zwischen der XTAL-Frequenz und dem Eingangstakt des ADC.
Schritt 7: Wenn Sie den ADC-Wert nutzen möchten, müssen Sie einige der unten aufgeführten Arbeiten ausführen
- ADC-Wert einstellen
- Ausgangs-LED-Pin konfigurieren
- ADC-Hardware konfigurieren
- ADC aktivieren
- Analog-Digital-Wandlungen starten
- WÄHREND für immer
WENN ADC-Wert höher als eingestellter Wert, LED einschalten ELSE LED ausschalten
Schritt 8: ADC-Wert einstellen
Code: uint8_t ADCValue =128;
Schritt 9: Ausgangs-LED-Pin konfigurieren
Code: DDRB|= (1 << PB1);
Schritt 10: ADC-Hardware konfigurieren
ADC-Hardware konfigurieren
Dies erfolgt durch Setzen von Bits in den Steuerregistern für den ADC. Legen wir zunächst den Preskalar für den ADC fest. Laut Datenblatt muss dieser Preskalar so eingestellt werden, dass die ADC-Eingangsfrequenz zwischen 50 KHz und 200 KHz liegt. Der ADC-Takt wird vom Systemtakt abgeleitet. Bei einer Systemfrequenz von 1MHz ergibt ein Prescaler von 8 eine ADC-Frequenz von 125 Khz. Die Vorskalierung wird durch die ADPS-Bits im ADCSRA-Register eingestellt. Laut Datenblatt müssen alle drei ADPS2:0 Bits auf 011 gesetzt werden um den 8 Prescaler zu erhalten.
Code: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Als nächstes stellen wir die ADC-Referenzspannung ein. Dies wird durch die REFS-Bits im ADMUX-Register gesteuert. Im Folgenden wird die Referenzspannung auf AVCC eingestellt.
Code: ADMUX |= (1 << REFS0);
Um den durch den Multiplexer zum ADC geleiteten Kanal einzustellen, müssen die MUX-Bits im ADMUX-Register entsprechend gesetzt werden. Da wir hier ADC5 verwenden
Code: ADMUX&=0xF0; ADMUX|=5;
Um den ADC in den Freilaufmodus zu versetzen, setzen Sie das passend benannte ADFR-Bit im ADCSRA-Register:
Code: ADCSRA |= (1 << ADFR);
Eine letzte Änderung der Einstellungen wird vorgenommen, um das Lesen des ADC-Werts zu vereinfachen. Obwohl der ADC eine Auflösung von 10 Bit hat, sind so viele Informationen oft nicht notwendig. Dieser 10-Bit-Wert wird auf zwei 8-Bit-Register, ADCH und ADCL, aufgeteilt. Standardmäßig werden die niedrigsten 8 Bits des ADC-Werts in ADCL gefunden, wobei die oberen beiden die niedrigsten beiden Bits von ADCH sind. Durch Setzen des ADLAR-Bits im ADMUX-Register können wir den ADC-Wert nach links ausrichten. Dadurch werden die höchsten 8 Bits der Messung im ADCH-Register abgelegt, der Rest im ADCL-Register. Wenn wir dann das ADCH-Register lesen, erhalten wir einen 8-Bit-Wert, der unsere 0 bis 5 Volt-Messung als Zahl von 0 bis 255 darstellt. Wir verwandeln unsere 10-Bit-ADC-Messung im Grunde in eine 8-Bit-Messung. Hier ist der Code zum Setzen des ADLAR-Bits:
Code:
ADMUX |= (1 << ADLAR); Damit ist die Einrichtung der ADC-Hardware für dieses Beispiel abgeschlossen. Zwei weitere Bits müssen gesetzt werden, bevor der ADC mit der Messung beginnt.
Schritt 11: ADC aktivieren
Um den ADC zu aktivieren, setzen Sie das ADEN-Bit in ADCSRA:
Code: ADCSRA |= (1 << ADEN);
Schritt 12: Analog-zu-Digital-Wandlungen starten
Um die ADC-Messungen zu starten, muss das ADSC-Bit in ADCSRA gesetzt werden:
Code: ADCSRA |= (1 << ADSC);
An diesem Punkt würde der ADC beginnen, die an ADC5 präsentierte Spannung kontinuierlich abzutasten. Der Code bis zu diesem Punkt würde so aussehen:
Schritt 13: WÄHREND für immer
Sie müssen nur noch den ADC-Wert testen und die LEDs so einstellen, dass sie eine High / Low-Anzeige anzeigen. Da der ADC-Messwert in ADCH einen Maximalwert von 255 hat, wurde ein Testwert von th gewählt, um zu bestimmen, ob die Spannung hoch oder niedrig war. Eine einfache IF/ELSE-Anweisung in den FOR-Schleifen ermöglicht es uns, die richtige LED einzuschalten:
Code
if(ADCH >ADCWert)
{
PORTB |= (1 << PB0); // LED einschalten
}
anders
{
PORTB&= ~(1 << PB0); // LED ausschalten
}
Schritt 14: Am Ende ist der vollständige Code
Code:
#enthalten
int main (void)
{
uint8_t ADCValue = 128;
DDRB |= (1 << PB0); // Setze LED1 als Ausgang
ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC Prescalar auf 8 setzen - // 125KHz Abtastrate 1MHz
ADMUX |= (1 << REFS0); // ADC-Referenz auf AVCC setzen
ADMUX |= (1 << ADLAR); // ADC-Ergebnis links anpassen, um einfaches 8-Bit-Lesen zu ermöglichen
ADMUX&=0xF0;
ADMUX|=5; // MUX-Werte mussten geändert werden, um ADC0 zu verwenden
ADCSRA |= (1 << ADFR); // ADC in den Freilaufmodus setzen
ADCSRA |= (1 << ADEN); // ADC aktivieren
ADCSRA |= (1 << ADSC); // A2D-Konvertierungen starten while(1) // Endlosschleife
{
if(ADCH > ADCWert)
{
PORTB |= (1 << PB0); // LED1 einschalten
}
anders
{
PORTE &= ~(1 << PB1); // LED1 ausschalten
}
}
0 zurückgeben;
}
Zuerst dieses Tutorial veröffentlichen Klicken Sie hier
Empfohlen:
Spiele!!! - Einführung: 5 Schritte
Spiele!!! - Einführung: Hallo! Ich werde Ihnen beibringen, wie Sie drei verschiedene Spiele auf code.org erstellen. Unter jedem Spiel-Tutorial werde ich eine Vorlage veröffentlichen, die Sie remixen und verwenden können, während Sie mein Video ansehen. Ich wünsche dir viel Spaß!! Wenn ihr nur meine Spiele in o sehen wollt
Einführung in Arduino: 18 Schritte
Einführung in Arduino: Haben Sie sich jemals gefragt, ob Sie Ihre eigenen Geräte wie eine Wetterstation, ein Auto-Dashboard für die Überwachung von Kraftstoff, Geschwindigkeit und Standort oder die Steuerung Ihrer Haushaltsgeräte über Smartphones herstellen möchten, oder haben Sie sich jemals gefragt, ob Sie anspruchsvolle r
So installieren Sie Linux (Anfänger beginnen hier!): 6 Schritte
So installieren Sie Linux (Anfänger beginnen hier!): Was genau ist Linux? Nun, lieber Leser, Linux ist ein Tor zu einer Welt ganz neuer Möglichkeiten. Vorbei sind die Zeiten, in denen OSX den Spaß am Besitz eines Computers nahm. Vorbei sind die törichten Notationen von Sicherheit durch Windows 10. Jetzt sind Sie an der Reihe
Micro:bit Zauberstab! (Anfänger): 8 Schritte (mit Bildern)
Micro:bit Zauberstab! (Anfänger): Während es für uns nicht-magische Menschen etwas schwierig ist, Objekte mit unseren Gedanken, Worten oder Zauberstäben schweben zu lassen, können wir Technologie verwenden, um (im Grunde) die gleichen Dinge zu tun! Dieses Projekt verwendet zwei micro:bits, a ein paar kleine elektronische Teile und einige Alltagsgegenstände
Wie verwende ich die Delta WPL Soft Simulator-Software? (Anfänger): 15 Schritte
Wie verwende ich die Delta WPL Soft Simulator-Software? (Anfänger): Smart Thinkers bietet Tutorials für diejenigen, die die SPS-Programmierung mit Delta-SPS-Simulation von WPLSoft 2.41 Software erlernen möchten