Lesen von Werten aus einem Analog-zu-Digital-Konverter

Ein Analog-zu-Digital-Konverter (Analog-to-Digital Converter, ADC) ist ein Gerät, mit dem ein analoger Eingangsspannungswert ausgelesen und in einen digitalen Wert konvertiert werden kann. Analog-zu-Digital-Konverter werden zum Auslesen von Werten aus Thermistoren, Potenziometern und anderen Geräten verwendet, mit denen der Widerstand anhand von bestimmten Bedingungen geändert wird.

In diesem Thema nutzen Sie .NET zum Auslesen von Werten aus einem ADC, während Sie die Eingangsspannung mit einem Potenziometer modulieren.

Voraussetzungen

  • ARM-basierter (ARMv7 oder höher) Single-Board-Computer (SBC)
  • MCP3008: Analog-zu-Digital-Konverter
  • Potenziometer mit drei Anschlüssen
  • Breadboard
  • Jumperdrähte
  • Raspberry Pi GPIO Breakout Board (optional/empfohlen)
  • .NET SDK 7 oder höher

Hinweis

Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät Raspberry Pi ist. Dieses Tutorial kann jedoch für jeden Linux-basierten SBC verwendet werden, der .NET unterstützt, z. B. Orange Pi, ODROID und mehr.

Vorbereiten des SBC

Stellen Sie sicher, dass Ihr SBC für die Unterstützung der folgenden Dienste konfiguriert ist:

  • SSH
  • SPI

Für viele Geräte ist keine zusätzliche Konfiguration erforderlich. Verwenden Sie für Raspberry Pi den raspi-config-Befehl. Weitere Informationen zu raspi-config finden Sie in der Dokumentation für Raspberry Pi.

Vorbereiten der Hardware

Verwenden Sie die Hardwarekomponenten, um eine Schaltung wie im folgenden Diagramm zu erstellen:

Fritzing-Diagramm: Schaltung mit einem MCP3008 ADC und einem Potenziometer

Beim MCP3008 wird eine SPI (Serial Peripheral Interface) für die Kommunikation verwendet. Hier sind die Verbindungen zwischen dem MCP3008 und dem Raspberry Pi bzw. Potenziometer dargestellt:

  • VDD zu 3,3 V (rot)
  • VREF zu 3,3 V (rot)
  • AGND zu Erde (schwarz)
  • CLK zu SCLK (orange)
  • DOUT zu MISO (orange)
  • DIN zu MOSI (orange)
  • CS/SHDN zu CE0 (grün)
  • DGND zu Erde (schwarz)
  • CH0 zum variablen (mittleren) Anschluss auf dem Potenziometer (gelb)

Schließen Sie die Verbindungen für 3,3 V und Erde an die äußeren Anschlüsse des Potenziometers an. Die Reihenfolge spielt hierbei keine Rolle.

Die folgenden Anschlussdiagramme können Ihnen als Hilfe dienen:

MCP3008 Raspberry Pi GPIO
Anschlussdiagramm: MCP3008 Anschlussdiagramm: Raspberry Pi GPIO-Header. Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.
Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.

Tipp

Ein GPIO-Breakout-Board in Verbindung mit einer Steckplatine wird empfohlen, um die Verbindungen zum GPIO-Header zu optimieren.

Erstellen der App

Führen Sie in Ihrer bevorzugten Entwicklungsumgebung die folgenden Schritte aus:

  1. Erstellen Sie eine neue .NET-Konsolen-App, indem Sie entweder die .NET-CLI oder Visual Studio verwenden. Geben Sie ihr den Namen AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Fügen Sie das Paket Iot.Device.Bindings in das Projekt ein. Verwenden Sie entweder .NET CLI aus dem Projektverzeichnis oder Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code:

    using System;
    using System.Device.Spi;
    using System.Threading;
    using Iot.Device.Adc;
    
    var hardwareSpiSettings = new SpiConnectionSettings(0, 0);
    
    using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings);
    using var mcp = new Mcp3008(spi);
    while (true)
    {
        Console.Clear();
        double value = mcp.Read(0);
        Console.WriteLine($"{value}");
        Console.WriteLine($"{Math.Round(value/10.23, 1)}%");
        Thread.Sleep(500);
    }
    

    Für den Code oben gilt:

    • hardwareSpiSettings wird auf eine neue Instanz von SpiConnectionSettings festgelegt. Vom Konstruktor wird der Parameter busId auf „0“ und der Parameter chipSelectLine ebenfalls auf „0“ festgelegt.
    • Mit einer using-Deklaration wird eine Instanz von SpiDevice erstellt, indem SpiDevice.Create aufgerufen und hardwareSpiSettings übergeben wird. Diese Instanz von SpiDevice steht für den SPI-Bus. Mit der using-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden.
    • Mit einer weiteren using-Deklaration wird eine Instanz von Mcp3008 erstellt und das Element SpiDevice an den Konstruktor übergeben.
    • Eine while-Schleife wird ohne zeitliche Begrenzung ausgeführt. Bei jeder Iteration passiert Folgendes:
      1. Löscht die Konsole.
      2. Liest den Wert von CH0 auf dem ADC aus, indem mcp.Read(0) aufgerufen wird.
      3. Schreibt den Rohwert in die Konsole.
      4. Schreibt den Wert als Prozentsatz in die Konsole.
        • Um den Prozentsatz zu berechnen, wird der Wert durch 10,23 geteilt. Beim MCP3008 handelt es sich um einen ADC mit 10 Bit. Dies bedeutet, dass 1.024 mögliche Werte (0 bis 1023) zurückgegeben werden. Wenn der Wert durch 10,23 dividiert wird, wird er als Prozentsatz dargestellt.
        • Der Prozentsatz wird auf die nächste Dezimalstelle (0,1) gerundet.
      5. Wartet 500 ms lang ab.
  4. Erstellen Sie die App. Führen Sie dotnet build aus, wenn Sie die .NET-CLI verwenden. Drücken Sie STRG+UMSCHALT+B, um die App in Visual Studio zu kompilieren.

  5. Stellen Sie die App auf dem SBC als eigenständige App bereit. Anweisungen hierzu finden Sie unter Bereitstellen von .NET-Apps auf einem Raspberry Pi-Gerät. Erteilen Sie dabei mithilfe von chmod +x die execute-Berechtigung für ausführbare Dateien.

  6. Führen Sie die App auf dem Raspberry Pi aus, indem Sie zum Bereitstellungsverzeichnis wechseln und die ausführbare Datei ausführen.

    ./AdcTutorial
    

    Verfolgen Sie die Ausgabe, während Sie am Drehrad des Potenziometers drehen. Die Veränderung ergibt sich daraus, dass mit dem Potenziometer die Spannung geändert wird, die CH0 auf dem ADC erreicht. Der ADC vergleicht die Eingangsspannung an CH0 mit der Referenzspannung an VREF, um einen Wert zu generieren.

  7. Beenden Sie das Programm, indem Sie STRG+C drücken.

Herzlichen Glückwunsch! Sie haben eine SPI verwendet, um Werte aus einem Analog-zu-Digital-Konverter auszulesen.

Herunterladen des Quellcodes

Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.

Nächste Schritte