Forum: Mikrocontroller und Digitale Elektronik Fragen zu ADS1251


von Peter (Gast)


Lesenswert?

Hallo,

kennt sich jemand mit dem 24-bit ADC ADS1251 aus?

Ich blick' nicht durch, welchen Pegel der DOUT/~DRDY-Pin nach dem
Einschalten und nach Beendigung einer Datenübertragung hat.

Danke!
Peter

von Profi (Gast)


Lesenswert?

Ja, das sind huebsche 8polige AD-Cs von Burr Brown / TI.
Die Übertragung hat mich auch ganz schoen gefuchst:
die DOUT/~DRDY-Leitung geht an IRQ und an MISO.

Den IRQ hab ich auf "positive Flanke triggern" eingestellt.
In der ISR starte ich nur einen Timer mit einigen Mikrosekunden, sodass
die t3 (s.Datenblatt) sicher vorbei ist (unkritisch), Fall=1 und disable
den IRQ.

Wenn der Timer ablaeuft, gibts einen TimerOverflow-Interrupt:
dieser sendet auf dem SPI ein Word (16 bits) (mein SPI kann nicht mehr
auf einmal), damit bekomme ich die Clocks (MOSI ist nc -> gesendete
Daten gehen ins Nirwana).

Jetzt loest SPI einen RX-Interrupt aus, bei dem gibt es eine
Fallunterscheidung: 1. oder 2. Datenpaket à 16 Bits.

1. Fall: Bits abholen und speichern, und einen weiteren Write auf SPI
ausgeben fuer die restlichen Bits. (Eigentlich waeren nur 8 Bits
noetig, ich bin aber zu bequem zum jedesmal Umschalten. Wenn Dein SPI
das kann, geht es auch mit 2*12 bits.) Fall=2.

2. Fall: Bits abholen und speichern, Flag setzen, dass ein Sample zur
weiteren Bearbeitung zur Verfuegung steht, IRQ wieder freigeben.

Die SPI-RX-ISR wird also zweimal aufgerufen.

SPI-Clock (SCLK) hab ich auch mal mit 16MHz (ausserhalb der Spec)
getestet: ging auch.

Alles laeuft im Interrupt, ohne dass viel Rechenleistung weg geht, die
brauche ich naemlich fuer die folgenden Digitalfilter, doch das ist ein
anderes Kapitel...

Noch ein Tip: wenn Du wirklich hohe Aufloesung brauchst, nimm lieber
die ADCs mit mehr Pins, dann hast Du getrennte Versorgung fuer Digital
und Analog. Sonst schaffst Du nicht mehr als 16-18 Bits.

Der ADS1251 legt sofort los, sobald er Clocks auf CLK bekommt, Du
brauchst nichts konfigurieren.

Bitte berichte, wie es Dir gelang! Oder noch Fragen?

von Profi (Gast)


Lesenswert?

Um auf Deine Fragen genau einzugehen:
Nach dem Einschalten: weiss ich nicht genau, ich denke low.

Das Datenblatt haelt sich zurueck:
Once the ADS1251 powers up, the DOUT/DRDY line will
pulse LOW on the first conversion for which the data is valid
from the analog input signal.


Nach einer Übertragung: low, das siehst Du in
FIGURE 12. DOUT/DRDY Timing: wenn alle 24 Bits abgeholt sind, ist der
Ausgang low.
Wenn Du jedoch nicht alle Bits abholst, bleibt er auf dem Bit stehen,
das noch nicht abgeholt wurde, wenn gar keines geholt wurde, ist es das
MSB (glaube ich).
Wenn eine Übertragung fertig ist, kommt wieder DRDY-Mode, also je 6
Takte high-low-high.

Außerdem mußt Du aufpassen, dass Du nicht in den Sync- oder
Power-Down-Modus kommst, also SCLK nie laenger high lassen.

von Peter (Gast)


Lesenswert?

Hallo Profi,

herzlichen Dank für Deine ausführliche Antwort!

Was ich nicht ganz verstehe: Du stellst quasi im Controller eine Zeit
für die ganze ~DRDY-Dauer ein?
Ist das also sinnvoller, als alle Pegelwechsel im ~DRDY-Mode mit
getriggertem, externem Interrupt, festzustellen.

Für CLK würde ich einen AT90S2343 (an 3,6864 MHz) als einstellbaren
Frequenzteiler verwenden (Reset-Leitung zu Master-Controller und 3 Pins
zur Kodierung).
Ich denke, dass das recht praktisch wäre.

Was für eine CLK-Frequenz verwendest Du?

Die Datenübertragung werde ich wahrscheinlich in SW machen (da habe ich
schon mit dem LTC2400 gute Erfahrungen gemacht), will mich nicht zu viel
in die SPI-HW-Schnittstelle des Controllers hineindenken.

Wozu verwendest Du den ADS1251?

Bis dann,
Peter

von Profi (Gast)


Lesenswert?

Holla,
das gesamte Timing bestimmt nur der ADS.
CLK (38.4 KHz / 384 KHz bei mir) ist die 384 fache Sample-Frequenz (100
/ 1000 Hz bei mir).

Wenn Dein uC SPI hat, wuerde ich das unbedingt verwenden, erleichtert
die Sache wesentlich und ist gar nicht so kompliziert!

Extra einen uC als Taktgenerator empfinde ich einfach als
verschwenderisch, kann Dein uC nicht einen Timer frei laufen lassen und
das Signal auf einem Pin ausgeben? So hab ich es gemacht (Proc =
DSP56F803 von Motorola). Wenn nicht: Timer soll Interrupt ausloesen,
der dann ein Pin toggelt.

Ich wandle das Signal von einer DMS (Dehnungsmessstreifen)-Waage und
filtere es ein wenig. Und Du?

von Peter (Gast)


Lesenswert?

Hi,

die Frequenzerzeugung mit einem zusätzlichen Mikrocontroller hat den
Vorteil, dass auch hohe Frequenzen genau erzeugt werden können, ohne
dass Interrupts stören.

Ist für Dich der differentielle Eingang bei der DMS-Auswertung von
Vorteil?
Wie filterst Du?
Wie erzeugst Du die Referenzspannung?

Ich will mit dem ADS einen Luftdrucksensor (MPX4100) auswerten.

Grüße,
Peter

von Profi (Gast)


Lesenswert?

Frequenzerzeugung geht immer genau, auch mit insgesamt 1 Proc.
Bitte mal meine Fragen beantworten zum Timer Deines uC beantworten.

diff. Eingang: eigentlich nicht, da ich vorher 1200-fach verstaerke.
Filter: ziemlich kompliziert: 4-fach 24bit Digitalfilter einstellbarer
Ordnung und Grenzfrequenz, das freut den DSP
Vref: mit einer 2.5V Referenzdiode

Und wozu muss das so genau (24bit) gehen?
MPX kenne ich gerade nicht, werde mal das pdf anschauen.
Bis demnaechst.

von Peter (Gast)


Lesenswert?

Hi Profi,

verwende den ATmega32. Du hast vollkommen Recht, ein zusätzlicher uC
ist Schwachsinn, die Timer des Mega haben ja eine Compare
Match-Funktion.

Die Auflösung benötige ich, da ich mit diesem Luftdrucksensor einen
Höhenmesser (für Modellflugzeuge) bauen will.

Wie versorgst Du den ADS1251?

Bis dann,
Peter

von Profi (Gast)


Lesenswert?

Was meinst Du mit versorgen, Vcc oder CLK?

Vcc: 3.3V Regler mit vielen Cs
CLK: ich starte einen freerunning Timer mit dem Reload-Wert 521
(40Mhz/38.4kHz/2) und sage ihm, er soll bei jedem Match ein Pin
togglen, das geht zum CLK. Kann das Dein Mega nicht, ein Timersignal
auf einem Port ausgeben?

Schau doch mal im pdf nach, oder soll ich das tun?

Luftdruck: Und was ist, wenn während des Fluges das Wetter umschlägt?

von John W. (halfpastseven)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich habe mich auch für den ADS1251 für meine Schaltung entschieden und 
schon ein wenig mit dem Auslesen der Messwerte gekämpft da ich noch ein 
Anfänger im Programmieren bin.

Dies hätte ich nun mit ein paar hilfreichen Beiträgen aus diesem Forum 
geschafft. Mein Problem ist nun das ich mit den Messwerten nichts 
anfangen kann. Ich habe mich zwar schon ein wenig in die Materie "2 
Komplement" eingelesen aber mein Messwerte ergeben für mich leider 
keinen Sinn.

Ich versorger den IC mit +5V gegen GND. Die Referenzspannung habe ich 
auf +2,5V gelegt und ebenfalls den IN- Eingang da ich positive und 
negative Spannungen messen muss.

Laut dem Diagramm von TI im Anhang müsste ich daher bei +2,5V am IN+ 
gegen IN- den Dout Wert von 7FFFFFh erhalten. Ich erhalte diesen Wert 
aber schon bei +1,25V und anschließend steigt der Wert immer weiter an 
bis FFFFFFFh obwohl die Spannung immer positiv bleibt!!!!????

Ich habe den HEX-Wert mit Oszi und µC gemessen und er müsste daher 
stimmen.
Mir scheint es sehr verdächtig das es genau die halbe Referenzspannung 
ist??

Das selbe gilt übrigends in der negativen Richtung nur umgekehrt. Bei 
-1,25V am IN+ gegen IN- ist der negative Maximalwert 800000h und danacht 
wird er linear kleiner bis annähernd 000000h.

Link App Note: http://www.ti.com/lit/an/slaa242/slaa242.pdf
Link Datasheet: http://www.ti.com/lit/ds/symlink/ads1251.pdf

Weiß jemand was mein Fehler ist bzw hat jemand eine Vermutung??

Vielen Dank im Voraus!

von John W. (halfpastseven)


Angehängte Dateien:

Lesenswert?

Habe den Fehler inzwischen gefunden.

Der µC bzw die Software hat keinen Bug, nur die Elektronik machte 
Probleme. Der AD-Wandler wird über einen Logik Isolator galvanisch vom 
µC getrennt und dieser macht mir in der Data-Ready-Phase einen Peak auf 
der SCLK Leitung und somit fehlte immer das erste Daten Bit für die 
Polarität.

Anbei noch ein Screenshot vom Oszibild falls es jemanden interessiert.

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.