ankon Geschrieben 26. Oktober 2021 Geschrieben 26. Oktober 2021 Hallo, ich suche ein Code-Beispiel auf C++ von D->A Wandler für einen abstrakten Mikrokontroller (egal welcher, egal welche Pinbelegung). Ich wollte zuerst mit Programm-Logik kennenlernen: am Eingangspin kommen hexadezimale Zahlen und es sollte in eine analoge Spannung umgewandelt werden. Meine Frage wäre: kennt Ihr solche Code-Muster? Oder Links im Internet auf solche? Zitieren
Whiz-zarD Geschrieben 26. Oktober 2021 Geschrieben 26. Oktober 2021 Wie soll das funktionieren? C++ ist eine Programmiersprache, wie mit digitalen Werten arbeitet. Sowas wie Analog kennt die Sprache nicht. Die Digital-Analog-Wandlung passiert im Bereich der Elektrotechnik. Dafür gibt es spezielle Bauteile, die die digitalen Stufen mit speziellen Filter wieder glättet. Dies ist aber nur ein Näherungswert, da der echte Wert mit der Quantisierung der Analog-Digital-Umwandlung verloren gegangen ist. https://de.wikipedia.org/wiki/Digital-Analog-Umsetzer#Funktion Zitieren
ankon Geschrieben 26. Oktober 2021 Autor Geschrieben 26. Oktober 2021 Danke. Ich stelle es so vor, dass z.B. ein Sensor (Temperatur- oder Entfernungsmess- Sensor o.a.) an Input-Pin vom Mikrokontroller die hex-Werte liefert. Ein Mikrokontroller leisst das ein und wandelt in analogen Wert 0 - 5V um... und liefert das an seinen analogen Output. Nach ungefähr solche C++ logik suche ich Beispiele. Zitieren
Whiz-zarD Geschrieben 27. Oktober 2021 Geschrieben 27. Oktober 2021 (bearbeitet) Wie gesagt, das lässt sich nicht programmieren. Wie soll das auch gehen? In der Informatik arbeitet man mit digitalen Signalen. Digitale Signale haben Stufen. Ein analoges Signal ist stufenlos. Ein D/A-Wandler tastet das Signal ab, indem man z.B. 8 Bits nimmt und sie mit Widerständen so schaltet, dass jeder Bit für die Verringerung des Gesamtwiderstandes beiträgt. Wenn also alle 8 Bits geschaltet sind, ist auch der Widerstand am geringsten und somit die Spannung am höchsten. Dennoch wird das Signal weiterhin stufen haben, die dann mit Hilfe von Filtern geglättet werden können. Der ESP32 besitzt z.B. zwei 8-Bit-D/A-Wandler. Der Arduino hingegen macht es anders. Hier verwendet man eine Pulsweitenmodulation. Das Signal ist weiterhin ein digitales Signal (Rechteckspannung), das oszilliert bzw. pulsiert. Das Signal wechselt also in einem bestimmten Takt immer von 0 auf 1 und umgekehrt. Hier nutzt man also die Trägheit der Bauelemente aus, die man damit steuern kann (z.B. LEDs oder Motoren). Je stärker es pulsiert, desto heller leuchtet die LED/rotiert der Motor, ohne dabei die Spannung zu ändern. Wenn du einfach sowas mit einem fiktiven D/A-Wandler simulieren möchtest, dann mache doch einfach eine Interpolation bzw. ein Dreisatz. Du hast z.B. Werte von 0 bis 255 und eine Ausgangsspannung von 5V. Der Wert 123 wäre 2,41V, da 5V / 255 * 123 = 2,41V und genau das versucht ein D/A-Wandler hinzubekommen aber wie gesagt, die Werte sind weiterhin stufig, da 124 2,43V wäre. Wir haben also eine Stufe von 0,02V und um diese Stufe wegzubekommen, verwendet man Filter, die für einen stufenlosen Anstieg sorgen. Weil man einen D/A-Wandler nicht programmieren kann, lassen sich auch z.B. Soundchips aus der 8-Bit-Ära eben nicht zu 100% emulieren, da sie integrierte Oszillatoren, Filter und A/D-Wandler haben, die für die Generierung des Analogen Signals zuständig sind. Man konnte den Charakter dieser Chips zwar ganz gut nachahmen aber eben nicht zu 100% akkurat. Bearbeitet 27. Oktober 2021 von Whiz-zarD Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.