Freigeben über


Lesen von Werten aus einem analogen zu digitalen Konverter

Ein analog-zu-digital Konverter (ADC) ist ein Gerät, das einen analogen Eingangsspannungswert lesen und in einen digitalen Wert umwandeln kann. ADCs werden zum Lesen von Werten von Thermistoren, Potentiometern und anderen Geräten verwendet, die den Widerstand auf der Grundlage bestimmter Bedingungen ändern.

In diesem Thema verwenden Sie .NET, um Werte aus einem ADC zu lesen, während Sie die Eingangsspannung mit einem Potentiometer modulieren.

Voraussetzungen

  • ARM-basierter (ARMv7 oder höher) Single-Board-Computer (SBC)
  • MCP3008 Analog-zu-Digital-Konverter
  • Potentiometer mit drei Anschlüssen
  • Breadboard
  • Jumper-Kabel
  • Raspberry Pi GPIO Breakout Board (optional/empfohlen)
  • .NET SDK 8 oder höher

Hinweis

Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät ein 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

Bei vielen Geräten ist keine weitere Konfiguration erforderlich. Verwenden Sie bei einem 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 den Schaltkreis wie im folgenden Diagramm dargestellt zu erstellen:

Ein Fritzing-Diagramm mit einer Schaltung mit einem MCP3008 ADC und einem Potenziometer

Die MCP3008 verwendet die serielle Peripherieschnittstelle (SERIAL Peripheral Interface, SPI), um zu kommunizieren. Im Folgenden sind die Verbindungen vom MCP3008 zum Raspberry Pi und Potentiometer aufgeführt:

  • VD bis 3,3V (rot dargestellt)
  • VREF bis 3.3V (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. Reihenfolge ist unwichtig.

Sehen Sie sich die folgenden Pinout-Diagramme bei Bedarf an.

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. Nennen Sie es 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 3.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);
    }
    

    Im vorhergehenden Code:

    • hardwareSpiSettings wird auf eine neue Instanz von SpiConnectionSettings festgelegt. Der Konstruktor legt den busId Parameter auf 0 und den chipSelectLine Parameter auf 0 fest.
    • Eine using-Deklaration erstellt eine Instanz von SpiDevice, indem sie SpiDevice.Create aufruft und hardwareSpiSettings übergibt. Dies SpiDevice stellt den SPI-Bus dar. 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. Jede Iteration:
      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 als Prozentsatz formatierten Wert in die Konsole.
        • Um den Prozentsatz zu berechnen, wird der Wert durch 10,23 dividiert. Die MCP3008 ist ein 10-Bit-ADC, was bedeutet, dass 1024 mögliche Werte im Bereich von 0-1023 zurückgegeben werden. Das Dividieren des Werts durch 10,23 stellt den Wert als Prozentsatz dar.
        • Der Prozentsatz wird auf die nächste 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 erstellen.

  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 die chmod +x-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
    

    Beobachten Sie die Ausgabe, während Sie das Potentiometerwähl drehen. Dies ist darauf zurückzuführen, dass das Potenziometer die spannung variiert, die an CH0 auf dem ADC geliefert wird. Der ADC vergleicht die Eingangsspannung auf CH0 mit der Referenzspannung, die an VREF geliefert wird, um einen Wert zu erzeugen.

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

Glückwunsch! Sie haben SPI zum Lesen von Werten aus einem analogen zu digitalen Konverter verwendet.

Herunterladen des Quellcodes

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

Nächste Schritte