Hallo, ich versuche im Rahmen einer Studienarbeit einen AD-Wandler mit SPI-Schnittstelle mit dem PC anzusprechen und zu steuern. Deshalb habe ich ein FT2232H Mini Module gekauft. Ich verzweifle an der Programmierung. An sich habe ich den Vorgang und den Ablauf verstanden, er funktioniert nur nicht. Ich versuche im Moment als erstes mit einer Brücke zwischen MOSI und MISO einen Loopback zu erzeugen und meine gesendeten Daten wieder einzulesen. Das klappt nicht. Hier die Fakten: - Programmierung direkt mit der D2XX_Net (also ohne vorgefertigte Libary) - Hardwareaufbau wurde mehrfach geprüft - Wenn ein Byte gesendet wurde, bekomme ich immer "FA" und das gesendete Byte zurück --> Der uC denkt, dass es sich um einen Befehl handelt, erkennt also nicht, dass ich Daten senden möchte. Hier muss irgendwo der Fehler liegen. - Programierung erfolgt in C#, da später ein automatisierter Ablauf mit mehreren Kommunikationsschnittstellen mit graphischer Überwachung am Bildschirm realisiert werden soll. Im Anhang habe ich die relevanten Codeelemente zusammenkopiert. Wenn noch Infos fehlen, bitte nachfragen! Ich danke euch schonmal im Vorhinein für eure Mühen, mir bei meinem Problem zu helfen! Gruß Lukas
:
Bearbeitet durch Moderator
Lukas schrieb: > AD-Wandler mit > SPI-Schnittstelle Welchen denn? Oft übertragen die keine Bytes, sondern mehr als 8 Bits und man muss auch nicht von einer Adresse lesen sondern nur die Convert/Chipselect und eine Clock anlegen. Im Datenblatt ist bestimmt ein Timing abgebildet, hast Du das eingehalten? Was sagt der Logicanalyzer/Oszi? Lukas schrieb: > Ich versuche im Moment als erstes mit einer Brücke zwischen MOSI und > MISO einen Loopback zu erzeugen und meine gesendeten Daten wieder > einzulesen. Das klappt nicht. Müsste das funktionieren? Kann SPI gleichzeitig senden und empfangen?
:
Bearbeitet durch User
Ist das jetzt eine Spitzfindigkeit? Ich kenne SPI nur so wie hier im Bildchen: http://www.corelis.com/images/screenshots/spi-read-command.jpg Betrachtest Du das Anlegen einer Clock schon als Senden?
Nein, das ist keine Spitzfindigkeit. Die von Dir dargestellte SPI-Variante ist schon eher eine Ausnahme; SPI sendet und empfängt gleichzeitig. Und ja, gesendet wird, sobald ein Takt anliegt, synchron zum Takt, ein Bit pro Zyklus. Du hast da ein "intelligentes" Gerät, das erst antwortet, wenn es ein Kommando ("Instruction") erkennt, das ist also schon ein Protokoll, das über SPI abgewickelt wird. Die SPI-Hardware in Deinem µC aber wird nichts davon wissen, die empfängt synchron mit dem Senden eines Bytes ein Byte (oder welche Wortgröße auch immer sie überträgt). Wenn Du ein simples Schieberegister per SPI ansteuerst, wird es vielleicht klarer, das hat keine Kommandos, Adressen o.ä.
OK, habe ich bisher noch nicht gesehen. Bisher habe ich einen ADXL362, einen LIS3DH und diverse SPI ADCs angesprochen wie den LTC2325, bei den ADCs wird sogar nur empfangen siehe http://cds.linear.com/docs/en/datasheet/232516fa.pdf ab Seite 14. Ich denke daher dass je nach ADC wird er mit einem SPI wie er es mit dem FT2232H betreiben kann nicht weiter kommen.
So, die SPI-Kommunikation läuft seit ein paar tagen. Ich poste meinen Quellcode sobald ich ihn richtig kommentiert und formatiert habe. Das nächste Problem ist jetzt aber der ADC: Das ID-Register kann ich richtig auslesen, alles andere Funktioniert nicht richtig. Ich bin hier echt langsam am Verzweifeln :(
Wie wäre es mit mehr Information? Welcher ADC ist es denn?
Es handelt sich um einen AD7176-2. Das Problem hat sich aber nach einem Tag knobeln auch schon wieder erledigt. Eine falsche Registereinstellung hatte einen Error hervorgerufen. (für alle, die es interessiert): Anbei ist mein Code zur SPI-Kommunikation. Gruß Lukas
:
Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.