Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
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 |
---|---|
![]() |
![]() 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:
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
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-*
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 vonSpiConnectionSettings
festgelegt. Der Konstruktor legt denbusId
Parameter auf 0 und denchipSelectLine
Parameter auf 0 fest.- Eine using-Deklaration erstellt eine Instanz von
SpiDevice
, indem sieSpiDevice.Create
aufruft undhardwareSpiSettings
übergibt. DiesSpiDevice
stellt den SPI-Bus dar. Mit derusing
-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden. - Mit einer weiteren
using
-Deklaration wird eine Instanz vonMcp3008
erstellt und das ElementSpiDevice
an den Konstruktor übergeben. - Eine
while
-Schleife wird ohne zeitliche Begrenzung ausgeführt. Jede Iteration:- Löscht die Konsole.
- Liest den Wert von CH0 auf dem ADC aus, indem
mcp.Read(0)
aufgerufen wird. - Schreibt den Rohwert in die Konsole.
- 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.
- Wartet 500 ms lang ab.
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.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.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.
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.