TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
adc

8. ANALOG-DIGITAL-CONVERTER (ADC)

 

 

DU LERNST HIER...

 

dass viele Sensoren aus der physikalischen Messgrösse eine (analoge) Spannung erzeugen, die man zur Verarbeitung mit dem Computer digitalisieren muss. Dies erfolgt in einem weit verbreiteten elektronischen Baustein, einem Analog-Digital-Converter (ADC).

 

 

MUSTERBEISPIEL

 

Obschon der ESP32 einen eingebauten ADC hat, verwendest du hier externe Breakout-Boards mit einer I2C-Schnittstelle. Damit ist sichergestellt, dass du selbst bei unsachgemässem Vorgehen nur den externen ADC und nicht die Oxocard beschädigst.

Beachte, dass die maximale Eingangsspannung aller hier verwendeten ADC die Betriebsspannung von ca. 3.3V nicht übersteigen darf.

ADS1015/ADS1115
Der ADS1015 ist ein 12-Bit ADC, wandelt also die Spannung in 4096 Schritte um. Der  ADS1115 ist ein 16-Bit ADC und wandelt die Spannung in 65536 Schritte um. Beide haben 4 Eingangskanäle. Die SMD-Chips werden in baugleichen Breakout-Boards verbaut (Bezugsquellen: Adafruit, eBay).

 

Zur Verwendung mit der Oxocard empfiehlt sich der Anschluss eines Grove-Kabels für die I2C-Schnittstelle. Es ist zweckmässig, Steckbuchsen mit GND- und einer VCC-Reihe  einzulöten, damit manam Eingang Jumper-Kabel verwenden kann. Ein mögliches Vorgehen ist das Folgende:

Header
(2 reihig)
2 Stücke
abschneiden
Reihen mit
Draht verbinden
Auf Breakout-Board einlöten

Zum Test verwendest du am besten ein Potentiometer mit einem Gesamtwiderstand von ungefähr 10 kOhm in folgender Schaltung. Damit bist du sicher, dass das Eingangssignal im erlaubten Bereich liegt.

 

Im folgenden Programm verwendest du den ADC ADS1015 mit dem Treiber ads1x15.py. Die Methode read(i) liefert dir den Messwert des Kanals i (i = 0..3), den du noch umrechnen  musst. Die Spannung in Millivolt auf Kanal 0 zeigst du mit je 2 Ziffern auf dem LED-Display an.

Programm:

from time import sleep
from ads1x15 import ADS1015
from oxocard import *

def show():
    millivolt = int(1000 * voltage)
    high = millivolt // 100
    display(high)
    sleep(2)
    low = "%02d" % (millivolt % 100)
    display(low)
    sleep(2)
    display("::")
    sleep(2)

adc = ADS1015()
channel = 0
while True:
    value = adc.read(channel)
    voltage = value / 2024 * 4.096
    show()
► In Zwischenablage kopieren

Für den ADS1115 musst du die Klasse ADS1115 importieren. Für die Umrechnung gilt  

voltage = value / 32768 * 4.096 

 

ADC121C021

 

Scheust du Lötarbeiten, so kannst du das ADC-Board von Seed mit einem Grove-Stecker für die Verbindung mit dem I2C-Hub verwenden, wo du das Eingangssignal auf dem standardisierten "analogen" Grove-Stecker anlegen kannst. Das Programm verwendet den Treiber für den ADC121C021 und schreibt die Werte im Bereich 0..2047 für den Spannungsbereich von ungefähr 0..3V aus. Hier wird auf der Eingangsseite ein Potentiometer von Seed mit dem analogen Grove-Anschluss verwendet.


Programm:

from time import sleep
from adc121c021 import ADC121C021
from oxocard import *

def show():
    display(v // 100)
    sleep(2)
    display("%02d" %(v % 100))
    sleep(2)
    display("::")
    sleep(2)

adc = ADC121C021()
while True:
    v = adc.getValue()
    show()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Analoge Spannungen müssen zuerst mit einem Analog-Digital-Converter digitalisiert werden, bevor sie vom Mikrocontroller eingelesen werden können. Dabei werden üblicherweise ADCs mit einer Auflösung von 8, 10, 12 oder 16 bit verwendet. Damit ist der kleinste Spannungsschritt festgelegt, den man noch messen kann, beispielsweise für eine maximale Eingangsspannung von 3.3V bei einem 8 bit-ADC die Spannung 3.3V / 256 = 12.9 mV

 

 

ZUM SELBST LÖSEN

 

 

1.

Wie gross ist der kleinste Spannungsschritt bei einem ADC mit 16 bit Auflösung und einer maximalen Eingangsspannung von 5 V?

2.

Verwende das Potentiometer als Helligkeitsregler des LED-Displays. Dabei sollen alle LEDs zusammen in weisser Farbe bis zum maximalen Farbwert (100, 100, 100) leuchten.

3.

Verwende das Potentiometer, um die Frequenz von sich wiederholenden Tönen der Dauer 200 ms zu wählen (Kopfhörer oder aktiver Lautsprecher am Audio-Port).