Armins AVR-Buch - Analog-Digital-Wandler

Zuletzt geändert am 09.12.2023, 17:23:37

Analog-Digital-Wandler


(armin77, 26.01.2013, 18:44:43)

In diesem Beitrag geht es um den Analog Digital Wandler des AVR.
Dieser hat eine Auflösung von 10Bit. Also Werte von 0 bis 1023.
Damit können Spannungen bis zur Höhe der Versorgungspannung gemessen werden.
Höhere Spannungen müssen mit Spannungsteilern unter die Versorgungs- oder Referenzspannung
gebracht werden.
Bevor man den ADC benutzen kann muß man ihn mit Config ADC konfigurieren.
Da der Befehl bei der Verwendung von GETADC() immer gleich aussieht ist nur die Auswahl der Referenzspannung wichtig.

Config Adc = Single , Prescaler = Auto , Reference =

AREF: Es wird eine entstörte Spannung an AREF angelegt.
Sie muß mindestens 2V betragen und darf die Versorgungsspannung nicht übersteigen.

AVCC: Es wird die Versorgungsspannung intern an AREF gelegt. Diese sollte mit einem 100nF Kondensator
nach GND entstört werden.

Internal: Es wird eine interne Referenzspannung von 2,56V an AREF gelegt. Diese sollte mit einem 100nF Kondensator
nach GND entstört werden. Hiermit kann bei kleinen zu messenden Spannungen die Auflösung verbessert werden.

Das Bild zeigt die Grundschaltung:

Bild Analog1.JPG

Hier ein Beispiel:
An ADC Kanal 5 (Portb.5) wird ein Poti angeschlossen.
Als Referenzspannung wählen wir die Versorgungsspannung.
Wir lesen den ADC5 mit GETADC() ein und schalten die LED1 (low current) ein, wenn der Meßwert größer ist als 500 (ca.2,44V) ist.

Hier der Schaltplan:

Bild Analog2.JPG

Und hier das Beispielprogramm dazu:

$regfile = "m8adef.dat"
$Crystal=1000000
$hwstack=40
$swstack=16
$framesize=32

Dim Messwert As Word 'Wichtig Word Variable verwenden da Werte 0 bis 1023
Config PortC.5 = Input
Config Portb.1 = Output 'LED1
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC konfigurieren
Start Adc
Do
Messwert = Getadc(5) 'Spannung an Portc.5 (ADC-Kanal 5) messen

If Messwert > 500 Then ' Ist Meßwert größer als 500
Portb.1 = 1 'dann LED1 ein
Else
Portb.1 = 0 'sonst LED1 aus
End If
Loop
End