Moinsen
Was hat denn die CPOL mit der mit dem Pegel einer CS-Leitung zu tun?
Wenn du mal in die Spezifikation geschaut hättest, was du sicherlich gemacht hast, wäre dir aufgefallen des vier Modi gibt.
Einmal:
- im aktiven Mode ist CS Low und die während die Datenpegel bei logisch 1 dem High Pegel entsprechen, und auch das Clock Signal mit einer to HIGH Flanke eingeleitet wird.
Das ist der Modus welcher sich an am häufigsten genutzter Standard durchgesetzt hat.
Und damit auch schon Ende der Ansage, den wenn wie Martin28 schrieb der Clock Invertiert verwendet werden soll, dann muss diese Konfigurationsabweichung im BUS-Init beschreiben werden, dass funktioniert aber bei µPython nur dann wenn auch der CS mit invertiert wird, was zu einer vollständigen Signalinkompatibilität mit dem MCP41010 führen würde.
Man kann zwar diese Funktion umkehren, da aber beide ICs am den gleichen MOSI, MISO und SCLK Leitungen hängen, der Bus aber selber ohne einen SLAVE Reset zu bewirken nicht geändert werden kann frage ich mich, weil man dann zwar Manuell auch den CS Invertieren müsste, wie du diese beiden Chips an einem BUS-HOST-Master parallel betreiben willst ?
Du kannst zwar den Init des Busses im Programmlauf MAIN wiederholt auch mit unterschiedlichen Konfigurationen ausführen um das SCLK zu invertieren, was aber zur Folge hätte, das dieses DigiPOT ebenfalls einen Reset macht, und seinen Ausgangspegel auf Viper 50% stellt. Es ist natürlich bei dieser Schaltung sehr Sinnvoll erst den Ausgangspegel des OPVs via des DigiPots einzustellen, und dann um den Funktionsgenerator in Betrieb zu nehmen, einen BUS Reset auszuführen, was ggf einen höheren Ausgangspegel zur Folge hätte um dann die Signalausgabe zu starten. Die möglicher Weise angeschlossene Testhardware klatscht dann in die Hände und freut sich natürlich mörderisch, wenn der ankommende Eingangspegel über der Spezifikation liegt. Alles Super !!! ![]()
Falls du natürlich eine Lösung anbieten kannst die eine vollständige SPI Implementation ohne die pio Nutzung ermöglicht raus mit der Sprache. Aber du kannst ja gerne mit deinen überlegenen µPython Kenntnissen einen pio Code dem TO zur Verfügung stellen, ohne auf machine.SPI zurückzugreifen damit er beide IC's in technisch vollständiger elektrischen Parallelschaltung auch technisch parallel ohne einen HOST Reset betreiben kann.
Ich warte auf deine vollständige in pio geschriebene AD9833 und MCP41010 Bibliothek, welche der TO wie gewohnt importieren kann und sein Programm einfach so weiter verwenden kann.
Dazu müsste man die Datenblätter beider SPI Slaves gelesen und verstanden haben, was du offensichtlich nicht gemacht hast. Also lasse deine Vermutungen einfach außen vor, liefere echte Vorschläge die du auch mit einem funktionierendem Programmcode untermauern kannst, und übe dich nicht weiter in Spekulationen !
Und falls du dich mal durch die gesamten Handbücher und Begleitwerke der Firma Mirochip zum Thema SPI gewühlt hast, diesen Inhalt auch verstanden hast, und das dann eigenständig auch in Programmcode ( funktionierendem ) darstellen kannst, dann kannst du gerne hier mit deinem Wissen auftrumpfen. Sorry ich arbeite schon einige Jahre mit verschiedensten SPI-Slaves dieser Firma und setze diese auch bewusst und gezielt bei verschiedensten Projekten ein, so das ich die Tücken gerade um SPI, egal ob ADC, DAC, PortExpander, EEPROM wie auch RTC und anderen Anwendungen sehr genau kenne, ohne das ich extra dafür ein Studium der Datenblätter mehr benötige. Und solange wir, bzw der TO von MicroPython spricht, ist das der erste Aufhänger nachdem man sich die Befehlscodierung gemäß Datenblatt angeschaut hat. Bei C/C++ ist das ein ganz andere Sache, hier kann alle supporteten 4 Modi problemlos auch parallel verwenden, wenn man den BUS Init via Zeiger bedient. Das ist aber oder leider mit µPython nicht möglich, auch nicht mit CircuitPython !!!