Hallo zusammen, z.Zt. arbeite ich an einem Projekt bei dem ich den XMEGA 256A3 und den ADS1256 von TI verwende. Der ADC ist mit dem XMega via SPI verbunden, wobei der µC natürlich als Master konfiguriert ist. Der µC wir mit einem extern Quarz mit 15.36 MHz getaktet und gibt via Event-Timer des Controller die halbierte Frequenz als Clk an den ADC weiter. Nun mein Problem: Ich möchte gerne die Register des ADCs auslesen bzw. beschreiben. Im Anhang befindet sich der Quellcode in dem ich versuche die Register auszulesen. Mit einem Logik-Analyzer konnte ich sehen, das die Signale aus dem µC Richtig ausgegeben werde und an den ADC übertragen werden. Leider bekomme ich vom ADC keine Antwort für die Anfrage. Bin im Moment überfragt woran es liegen könnte, da ich schon verschieden Konfigurationen und Timings ausprobiert habe. Also z.B. /DRDY, /RESET auf High und Low gelegt, was laut Datenblatt egal sein sollte. Natürlich könnte der ADC auch defekt sein. Wobei ich erst mal sicher gehen möchte das ich nichts falsch programmiert habe bevor ich den ADC auslöte und einen neuen bestelle. (Ist ja auch nicht gerade billig!) Leider kann ich weder im Datenblatt des ADS1256 noch in der Manual oder Trainings des Xmega irgendwelche andere Vorschläge finden, als selbst schon probiert. Würde mich über schnelle Hilfe echt freuen.
Hallo, Reset ist "Low Aktiv" und die Beschaltung laut Datenblatt doch nicht egal. (?) (Zeile 42:) PORTD.OUT &= ~(1<<ADC_RESET); Damit ist der ADC IMHO im Dauerrest. Gleiches gilt fuer !Sync/!PWDN (Ist im Powerdown Modus!) !DRDY ist ein Ausgang des ADCs und muss auf einen Eingang gehen. (Datenblatt Seite 5) MfG, Balze aka AVR Noob
Hallo AVR Noob, Danke für die zügige Antwort. Mit dem /DRDY habe ich mich verschrieben. Narürlich ist das ein Ausgangssignal des ADC und damit Eingangssignal für den µC. Habe das mit dem Reset und SYNC/Power-Down Signalen nochmal probiert (Obwohl schon öfters ausprobiert) und leider zunächst ohne Erfolg. Nachdem Reset und SYNC/PWR-DWN auf Hi geschaltet worden sind, wurde jetzt ein größeres Delay eingebaut. Was soll ich sagen: ES FUNZT!!! Timing ist alles.
Hallo Chris, was genau misst Du mit Deinen ADS1256? Vielleicht DMS? Wie sieht Deine Eingangsbeschaltung aus? So wie im Datenblatt? MfG, Balze aka AVR Noob
Servus, Chris W. schrieb: > Würde mich über schnelle Hilfe echt freuen. (1<< SPI_MASTER_bp) dein SPI ist Master! Du gibst den Takt an! Ich schildere dir mal ohne genau die Takelage zu kenne die Abfolge: Du musst nach dem dein ADC DRDY (Datenwandlung OK) ausgegeben hat, auch mal 24 Bit oder mehr (3x8 Daten-Byte ) senden, dass er auch ein 24 Bit Ergebnis aussenden kann. Wenn du nichts reinschiebst, kommt auch nichts raus! Ob nun 24 Bit oder 32 Bit gesendet werden soll ist sicherlich aus dem Datenblatt entnehmbar. (Beim LTC2418 sind es zum Beispiel 32 Bit.) Gruß XMEGA
Hallo XMEGA, grins meine Frage ist nur Neugierde, da ich jetzt selbst den ADS1256 einsetzen werde und mir die Notwendigkiet der im Datenblatt angegebenen Eingangsschlatung noch nicht ganz klar ist. Ich habe gehofft, das Chris das gleiche tun musste wie ich es jetzt zu zun habe. :) Chris eigentliche Frage ist soweit ich das verstanden habe erledigt, denn : Chris W. schrieb: > Was soll ich sagen: ES FUNZT!!! MfG, Balze aka AVR Noob
Hallo Balze, meine Anwendung hatte leider nichts mit DMS zu tun. Ich bin mir nicht sicher ob du die Grundschaltung (Figure 25) meinst, aber meine Schaltung hat mit der abgebildeten fast nichts gemeinsam. Darf dir leider keine Einzelheiten erläutern. Soviel aber schon: Single-Ended-Mode mit 7 Kanal Multiplex, wo die einzelnen Kanäle gegen AINCOM gemessen werden. Die Eingangssignale kommen von einer OP-Verstärkerschaltung mit angehängten Tiefpass. Wichtig bei der Beschaltung ist wohl das die Eingänge nicht zuviel Strom abbekommen. Konstant wohl max. 10 mA. Ansonsten habe ich die SPI wie die Reset usw. direkt, ohne Wid., mit dem XMega beschaltet. Der Takt kam auch vom XMega. Es läuft prima und ich habe bisher auch keine Probleme gehabt. Wenn du weiter Infos oder Hilfe zum Thema brauchst, kannst du mich gerne kontaktieren. Hallo XMega, zunächst einmal, wie Balze bereits schrieb: Es funzt!! Meine Frage wurde also beantwortet. ;-) Nun zu deiner Antwort! Ich schiebe mit: SPIC.DATA = 0x00; // WAKEUP while(!(SPIC.STATUS & (1<<SPI_IF_bp))){} //Wartet bis Byte gesendet wurde SPIC.DATA = 0x00; // WAKEUP while(!(SPIC.STATUS & (1<<SPI_IF_bp))){} //Wartet bis Byte gesendet wurde 2 Byte rein. Das Byte das RREG symbolisiert ist ein direkte Read-Register vom ADS1256 aufforderung. Somit muss ich keine 24 Bit auslesen, wenn ich nur 2 Byte wissen will. Dies wäre dann der Fall wenn ich eine normale Messung mache. Da hast du natürlich recht. MfG, Chris
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.