@spicer
es ist mir jetzt gelungen den DAC in LTspice zu simulieren.
Wesentlich sind diese 3 folgenden Zeilen, mit denen ich die Grundlage geschaffen habe, die Aussteuerung des DAC über einen Integerwert bestimmen zu können.
.param Amp=32
32 ist für den Augenblick ein Spielwert, der später in der kompletten Simulation Werte zwischen 0 und 4194303 annehmen kann.
.param VHigh 3.3
VHigh stellt den Spannungspegel dar, mit dem der Raspberry Pi Pico die Widerstandszweige einspeist, wenn der entsprechende Ausgang auf H gesetzt ist, anderenfalls wird ein Pegel von 0 Volt vorgegeben.
.func BVal(x,n) = floor(x / (2**n)) % 2
Das ist die Zauberfunktion, nach der ich den ganzen Tag gesucht habe. Diese Funktion extrahiert ein spezifisches Bit aus einer Ganzzahl. Hier ist die Aufschlüsselung:
- x: Der Eingangswert, aus dem wir ein Bit extrahieren wollen.
- n: Die Position des Bits, das wir extrahieren wollen (0 für das least significant bit, 1 für das zweite Bit, usw.).
- 2**n: Dies berechnet 2 hoch n. Es verschiebt effektiv das gewünschte Bit an die richtige Position.
- x / (2**n): Dies verschiebt die Bits von x nach rechts, so dass das gewünschte Bit an der least significant Bit-Position steht.
- floor(...): Diese Funktion rundet das Ergebnis der Division ab. Dies ist notwendig, da LTspice mit Fließkommazahlen arbeitet, wir aber eine Ganzzahlrechnung benötigen.
- % 2: Der Modulo-Operator gibt den Rest der Division durch 2. Dies extrahiert effektiv das least significant Bit des Ergebnisses, was unserem gewünschten Bit entspricht.
Da das Bitschieben in LTspice anscheinend nicht so beliebig funktioniert, war dieser Weg noch die letzte verbliebene Möglichkeit zum Ziel zu kommen.
V={if(BVal(Amp,n)>0, VHigh, 0)}
Und dieser Formalismus wird wird beim Value-Attribut der mit "bv" gewählte Spannungsquelle (Arbitrary behavioral voltage source) eingegeben.
Das sind die "berühmten" Parameter, die bei anderen Elementen wie der Kategorie R, C oder SW immer nur individuelle Merkmale ausbilden. Bei der gewählten Spannungsquelle, die eine besondere Art in der Kategorie der Spannungsquellen darstellt, ist es auf diese Art möglich, den Spannungspegel dynamisch zu bestimmen. Und wenn man oben im Plan nach schaut, habe ich die Spannungsquellen
willkürlich identifiziert. LTspice hätte mit seiner Default-Einstellung die Spannungsquellen mit V1..V22 benamst. Da ich aber noch etwas vorhabe und noch etliche Spannungsquellen benötige, habe ich die für den DAC benötigten Spannungsquellen aus dem Muster herausgenommen und somit für diesen Teil eine besondere Nomenklatur eingeführt, die sich damit deutlich von der tatsächlichen Hardware abgrenzen lässt.