Problem mit der SPI Datenübertragung zwischen einem Arduino Portenta H7 und einem ADS8684 (ADC)

#7815933
Lesenswert?

Ich arbeite derzeit an einem Projekt für meinen Masterabschluss und bin auf ein Problem gestoßen. Ich benutze einen Arduino Portenta H7 als Schnittstelle zwischen einem PC und einem ADC. Die Datenübertragung erfolgt über SPI und läuft durch einen digitalen Isolator (ISOW7841). Ich versuche, einige Register des ADC (ADS8684) auszulesen, aber ich erhalte nur 0xFF als Antwort.

Ich bin mir nicht sicher, ob das Problem in der Software oder der Hardware liegt. Der ADC ist auf die Leiterplatte gelötet und lässt sich nicht leicht entfernen, sodass ich ihn nicht isoliert testen kann.

Hierbei wird die Hardware SPI-Schnittstelle des Arduino Portenta H7 benutzt. Die wichtigsten Pins sind mit dem ADS8684 verbunden. Darunter SPI MISO, SPI MOSI, SPI CS (Chip select) und SPI CLK.

Im Code werden 3 einfache Register des ADS8684 einmalig im "setup()" ausgelesen und ausgeprinted. Wobei ich mir nicht ganz sicher bin wie genau das Datenblatt hinsichtlich "Bitshifting" oder ähnlichem zu identifizieren ist.

Im Anhang befinden sich die einzelnen Schaltungslayouts und der verwendete Arduino Code, sowie die einzelnen Datenblätter der Bauteile und des Arduinos. Referenzprojekte: https://github.com/siteswapjuggler/ADS8688a/blob/master/src/ADS8688.cpp https://github.com/codemonkeyboris/Arduino-ADS868x

Bei Unklarheiten einfach schreiben jede Hilfe wäre sehr willkommen.

#7815940
Lesenswert?

Jeremy schrieb:

Ich bin mir nicht sicher, ob das Problem in der Software oder der Hardware liegt.

Um in die richtige Richtung zu laufen könnte man ein Oszi mit 4 Kanälen oder einen Logik Analyzer anschließen um zu sehen was auf den Leitungen tatsächlich anliegt (vor/nach dem Isolator).

Man könnte auch den Isolator Mal runter werfen für den ersten Test und überbrücken um den aus zu schließen.

Versorgungsspannungen schon alle gemessen? Isolator? ADS8684? Reset Pin auf richtigem Level?

#7815957
Lesenswert?

Ich glaube deine ReadRegister Funktion ist auch falsch.

Bei den Command Registern heißt es:

1
REGISTER ADDRESS BITS[15:9]

Bit 8 ist das lese/schreib Bit. Du müsstest die Adresse also auf 9 schieben. Deine momentane 3 müsste momentan ein Schreiben auf AUTO_SEQ_EN sein.

#7815968
Lesenswert?

Die Pegel für die Spannungsversorgung und den Reset Pin am ADC haben wir bereits gemessen und korrigiert, das funktioniert jetzt. Wir haben auch Signale vor und nach dem Isolator gemessen und die kommen auch durch.

Ich werde mal den Schaltplan bearbeiten, sodass die von uns gemessenen Spannungen zu erkennen sind und es gleich hochladen.

In unserer Not entwickeln wir auch grade eine Platine um nur den ADC anzusteuern, also ohne Isolator usw.

#7816176
Lesenswert?

Ich habe außerdem mal den allgemeinen SPI-Bus des Arduinos ausgelesen, währenddessen ich sich erhöhende HEX-Werte sende. Hierbei benutze ich den SPI_MODE1 des der SPI Schnittstelle. Ich verstehe nur nicht ganz warum das letzte Bit auf HIGH stehen bleibt bis zum nächsten loop mit viel falschen Daten dazwischen.

Angehängte Dateien:
#7816346
Lesenswert?

Jeremy schrieb:

Ich verstehe nur nicht ganz warum das letzte Bit auf HIGH stehen bleibt bis zum nächsten loop

Eigentlich ja egal wie das steht. Daten werden ja erst übernommen wenn !CS und Clock 1->0.

Jeremy schrieb:

mit viel falschen Daten dazwischen.

Das ist ja nur das was dein PicoScope anzeigt. So schlecht sehen die Signale nicht aus. Vermutlich passen einfach die Level/Threshold Einstellungen für den Decoder nicht. Bzw sind zu klein. Zeig Mal die Einstellungen davon.

Dann vielleicht noch Masse nicht optimal angeschlossen und es zappelt halt etwas auf der Leitung.

#7816474
Lesenswert?

Jeremy schrieb:

Ich verstehe nur nicht ganz warum das letzte Bit auf HIGH stehen bleibt bis zum nächsten loop mit viel falschen Daten dazwischen.

Dann stell doch erstmal dein Oszi so ein, dass nicht alle Signale ineinander gematscht sind. Solange die dekodierten Daten während einer Clockperiode rumeiern, ist dein Dekoder falsch eingestellt. Das Signal NACH dem letzten Bit darf auf irgendeinem Wert stehen (Bild 3) https://de.wikipedia.org/wiki/Serial_Peripheral_Interface#Eigenschaften

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren