Forum: Mikrocontroller und Digitale Elektronik XMEGA_SPI + ADS1256 Pobleme


von Chris W. (grinch)


Angehängte Dateien:

Lesenswert?

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.

von Avr N. (balze)


Lesenswert?

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

von Chris W. (grinch)


Lesenswert?

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.

von Avr N. (balze)


Lesenswert?

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

von XMEGA (Gast)


Lesenswert?

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

von Avr N. (balze)


Lesenswert?

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

von Chris W. (grinch)


Lesenswert?

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
Noch kein Account? Hier anmelden.