Mit dem AnalogInput kann mit dem .Net Microcontroller eine analoge Spannung gemessen werden. Der Spannungswert wird dabei für das C#-Programm als Integer-Wert bereitgestellt. Außerdem kann der Wert für die weitere Benutzung aufbereitet werden. Beispielhaft werde ich dazu die Position eines Potentiometers auslesen und daran die Schaltung und den Code erklären.
Elektronische Schaltung
Wieder heißt es: Achtung! Die Spannung, die du anschließen möchtest, darf die zulässige Spannung für den analogen Port nicht überschreiten. Dieser Wert steht im Datenblatt vom Microcontroller. Üblicherweise sind Spannungen bis 3,3 Volt erlaubt. Ist die zu erwartende Spannung höher, musst du eine Elektronik vorschalten, die diese auf den erlaubten Wert bringt.
Ich werde als Beispiel ein Potentiometer anschließen. Potentiometer sind Bauteile mit einem variablen Widerstand, welcher durch drehen verändert wird. Potentiometer haben 3 Anschlüsse und arbeiten gut als Spannungsteiler: An den äußeren Anschlüssen wird die Eingangspannung und Masse angeschlossen und an dem mittleren geht die Ausgangsspannung raus, die sich je nach Drehposition ändert. Als Eingangsspannung habe ich die 3,3 V benutzt, die das Microcontroller-Board zur Verfügung stellt. So beträgt die Ausgangsspannung je nach Drehposition etwa 0 bis 3,3 Volt und übersteigt somit nie die maximal erlaubte Eingangsspannung am analogen Port.
Hinweis: Das Schaltzeichen für den Poti ist die amerikanische Version. In Europa ist es ein Rechteck wie beim Festwiderstand mit einem Pfeil wie hier auch.
Code
AnalogInput poti = new AnalogInput(FEZCerbuinoBee.Pins.A0_AnalogChannel); while(true) { Debug.Print( "ReadRaw(): " + poti.ReadRaw() + " - Read(): " + poti.Read()); Thread.Sleep(100); }
Nachdem das Port-Objekt instanziiert wurde, werden in der Endlosschleife die Ausgaben der ReadRaw()- und Read()-Methode ausgegeben. ReadRaw() gibt den digitalen Wert aus, der vom Analog-Digital-Wandler ankommt. Der analoge Port hat hier eine Auflösung von 12 Bit, also geht der Bereich von 0 bis 4095. Die Read()-Methode gibt einen aufbereiteten Wert aus, der die 0 bis 4095 standardmäßig als 0 bis 1 übersetzt. Für den Screenshot habe ich den Poti von Endanschlag zu Endanschlag gedreht:
Für die Auswertung einer Benutzereingabe am Poti ist der Wertebereich von 0 bis 1 schon perfekt.
Ansonsten kann der Wert noch durch den Scale-Faktor und dem Offset beeinflusst werden. Diese werden über die gleichnamigen Properties oder die richtige Konstruktor-Überladung gesetzt.
Angenommen es soll tatsächlich einfach die Spannung gemessen werden, dann ist bekannt, dass am Port 0 bis 3,3 Volt anliegen. Der Scale-Faktor ist also 3,3 und der Offset-Wert kann 0 bleiben.
Für die, die in Mathe aufgepasst haben: Da wird quasi eine lineare Funktion übergeben. Scale ist dabei die Steigung und Offset der y-Achsenabschnitt. Mit dem Schulwissen können so einfach die Werte gefunden werden.
Den Code habe ich entsprechend überarbeitet:
AnalogInput poti = new AnalogInput(FEZCerbuinoBee.Pins.A0_AnalogChannel); poti.Scale = 3.3; poti.Offset = 0; while (true) { // Aufbereiteten Spannungswert auslesen. // "f" kürzt das Ergebnis auf zwei Nachkommastellen. var spannung = poti.Read().ToString("f"); Debug.Print( "ReadRaw(): " + poti.ReadRaw() + " - Read(): " + spannung + " Volt"); Thread.Sleep(100); }
Zusammenfassung
Mit dem analogen Port können Spannungen gemessen werden. Was für ein Gerät bzw. Schaltung angeschlossen ist, ist unerheblich. Die maximale Spannung vom Port (meistens 3,3 V) darf dabei nicht überschritten werden. Mittels Scale und Offset kann der Wert passend aufbereitet werden. Wer mit linearen Funktionen umgehen kann, hat bei der Ermittlung dieser Werte leichtes Spiel.
Zurück zum NetMf-Tutorial-Index
Disclaimer
Die hier zusammen gestellten Informationen und Anleitungen habe ich mit bestem Wissen und Gewissen erstellt. Falls sich Fehler eingeschlichen haben oder du Verbesserungsvorschläge hast, schicke mir bitte eine Nachricht oder schreibe einen Kommentar unter den jeweiligen Beitrag. Informiere dich selber wie alles funktioniert. Ein Nachbau erfolgt auf eigene Gefahr. Du allein bist dafür verantwortlich, dass das, was du tust, funktioniert und keine Sach- oder Personenschäden verursacht.
Ist es möglich die durch den Poti beeinflusste Spannung als Wert für eine digitale Umsetzung von Impulsen zu nutzen?
Also zum Beispiel wenn ich einen 20 kOhm Poti anlege und den vereinfachten Spannungsverlauf vom Anfangs- bis zum Endpunkt des Poti nehme und jede Änderung der Spannung einem Impuls entspricht, kann ich diese Werte dann als digitales Signal weiterverwenden um den Verlauf eines optischen Drehimpulsgebers nachzustellen?
Es geht darum für ein Digitales System eine analoge Schnittstelle zu schaffen bei der ein analoger 20 kOhm Poti wie ein optischer Drehimpulsgeber interpretiert werden kann um mit Hilfe der einzelnen Impulsschritte die Signalstärke eines Audiosignals (Lautstärke) zu beeinflussen.
Vielen Dank für jeden Tipp
Thomas
Hi Thomas,
das ist eine interessante Aufgabe.
Als erstes würde ich gucken, ob das Problem nicht schon jemand anderes gelöst hat. Ist das nicht ein gängiges Problem von Leuten, die neue Audiotechnik in alte Gehäuse einbauen? Daher würde ich da mal weiter recherchieren.
Außerdem würde ich gucken, ob es möglich wäre, den Drehimpulsgeber in das alte Gehäuse einzubauen, das Problem also mechanisch zu lösen. 🙂
Mit einem Mikrocontroller lässt sich das aber auch lösen.
Wie du das Signal vom Poti ausliest, steht ja hier in genau diesem Artikel. 🙂
Dann müsstest du gucken, was dein momentaner Drehimpulsgeber für ein Signal erzeugt. Das musst du dann halt selber erzeugen, wenn du eine Drehung am Poti erkennst.
Außerdem musst du dir überlegen, wie du das Verhalten anpasst. Ich sehe da schon mal zwei relevante Unterschiede im Verhalten der Bauteile:
1) Das Poti hat Endanschläge
2) Das Poti weiß seine eigene Position. Der Drehimpulsgeber weiß nur, dass er gerade gedreht wird. Dreht man das Poti im ausgeschalteten Zustand, dann ist die veränderte Position nach dem Wiedereinschalten bekannt.
Du müsstest dir also überlegen, wie du mit diesen Unterschieden umgehst. Softwareseitig ist das auf jeden Fall lösbar.
Schreibe bitte hier, wie du es vor hast zu lösen. 🙂
Viel Erfolg und viele Grüße!
Daniel
Hi,
leider ist eine mechanische Lösung durch Umbau der Regler nicht möglich da das System momentan mit einem Drehimpulsgeber ausgestattet ist und nur eine Schnittstelle für ein älteres analoges Reglerelement benötigt wird.
Da die Spannung am Poti auch nach dem Einschalten bekannt ist würde ich diesen Wert einfach in den Regelbereich (Werteskala) des Drehimpulsgebers übertragen, wäre also bspw. 0,05V = 1 Impuls ( der Impulsgeber liefert je 360 Grad 64 Impulse. ).
Mal sehen wie wir das zusammenbekommen.
Danke
Thomas