Autor |
ADS830 liefert komische Werte |
|
|
|
|
BID = 455437
robodriver Stammposter
Beiträge: 217
|
|
Hi Leute,
ich arbeite zur Zeit an einem Projekt, wo ich über einen uC (ATMega32) einen A/D Wandler ADS830 ansteuere.
Vom Mcrocontroller her, lese ich zunächst 100 Werte vom ADC ein, welche aber gleich wieder verworfen werden. Direkt im Anschluss beginnt die richtige Haupt-Messung mit 1600 Messwerten mit einer Samplerate von 20 kHz.
Und obwohl ich den Eingang IN des ADC auf REFT lege erhalte ich Messwerte von 15 bis 255 bunt durcheinander. Kann sich jemand erklären wo das her kommt? Was könnte ich falsch gemacht haben?
Hat vielleicht jemand schonmal mit diesem Chip gearbeitet?
Die Anschlussbelegung sieht momentan wie folgt aus:
Bit 1-8 gehen an Port A des uC
CLK geht an PC7 des uC
RSEL sind an +5V
INT/EXT an +5V
REFB an 1,4V
REFT an 3,6V
CM offen gelassen
IN (Pin 16) an REFB
IN (Pin 17) an REFT
+Vs an +5V
VDRV an +5V
Normaler weise sollte dann ja jeder Messwert 255 sein, falls ich das Datenblatt richtig verstanden habe. Da gibt es bei mir noch einige Graustufen. Ist vielleicht etwas falsch angeschlossen?
Hoffe mir kann jemand weiter helfen.
Vielen Dank schonmal im Voraus.
PS: Um euch die Suche abzunehmen hier der Link zum Datenblatt:
http://focus.ti.com/lit/ds/symlink/ads830.pdf |
|
BID = 455438
Benedikt Inventar
Beiträge: 6241
|
|
Ich würde mal auf einen Softwarefehler tippen. Von der Hardware her sollte eigentlich selbst ein offener Eingang keine so stark rauschenden Werte liefern. |
|
BID = 455442
robodriver Stammposter
Beiträge: 217
|
Hey, danke für die Rasend schnelle Antwort.
Okay, das es ein Softwarefehler ist, möchte ich nicht ausschließen.
Hier mal die Mess-Routine, für alle die was von BASCOM verstehen...:
----------------------------------------------------------------
For A = 1 To 100
Set Portc.7
Waitus 24
Reset Portc.7
Waitus 24
Next A
B = 0
Tmp = 0
Do
Set Portc.7
Waitus 24
Reset Portc.7
Waitus 24
B = B + 1
Wert(b) = Pina
If B = 1600 Then
B = 0
Tmp = Tmp + 1
For A = 1 To 1600
Print Wert(a);
Print "x";
Next A
If Tmp = Anzahl Then
Goto Anfang
End If
End If
Loop
---------------------------------------------------------------
Die Dimensionierungen lauten wie folgt:
Dim Anzahl As Byte
Dim Wert(1600) As Byte
Dim A As Long
Dim B As Long
Dim Tmp As Byte
Funktioniert vom Grundprienziep eigentlich. sprich: Wenn ich Anzahl=1 habe, bekomm ich über RS232 1600 Werte in den PC.
Und wenn Anzahl=2 dann erhalte ich 3200 Werte. usw...
Ist da was mit der Erfassung der Werte falsch?
Gruß robodriver
|
BID = 455448
Benedikt Inventar
Beiträge: 6241
|
Ich denke ich habe den Fehler:
Du hast die Datenleitungen falsch rum angeschlossen ? Bit 1 hast du an PortA0 und Bit 8 an PortA7 angeschlossen ?
|
BID = 455462
robodriver Stammposter
Beiträge: 217
|
Hey, danke!
genau das wars. LSB und MSB waren vertauscht.
Hab es jetzt einfach die Werte auf dem PC umgerechnet, da ein Hardwareumbau zu aufwendig wäre.
Jetzt funktionierts einwandfrei
Tausend dank nochmal
|
BID = 455464
Benedikt Inventar
Beiträge: 6241
|
Da bin ich auch schon mehr als 1x drübergestolpert... Wenn man es ein paarmal falsch gemacht hat, kennt man die ADS ADC Wandler aber und achtet auf sowas.
|
BID = 455617
Benedikt Inventar
Beiträge: 6241
|
Hier mal meine Beschaltung des ADS830.
|
BID = 455620
faustian.spirit Schreibmaschine
Beiträge: 1388 Wohnort: Dortmund
|
Bei ADCs ist die Masse sehr kritisch... Schlage mich gerade mit einem 20Msps-ler rum, bei dem ich einfach beide Massen (dieser Chip hat geteilte Massen) einfach auf eine kleine Groundplane gelötet habe... funktioniert halbwegs bis 10Msps, danach wird es eher haarig...
|