mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16bit ad wandler


Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich steuere einen 16bit ad wandler ad677 von analog device
an. die zwei dafür notwendigen funktionen habe ich als text
file angehängt.
die ganze wandlung läuft leider nicht stabil. das heisst jedes zweite 
mal lese ich einen falschen wert vom wandler.
zwischendurch funktioniert es wieder.
ich habe das ganze erst testhalber auf einem steckbrett fliegend 
aufgebaut. jetzt bin ich mir nicht sicher ob es sich um ein 
hardwareprolem oder software problem handelt.

vieleicht sieht jemand einen fehler oder könnte mir einen typ
geben wie ich das besser programieren kann.

gruss tobias

Autor: franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was hat der ADC für eine Wandlungszeit?

Grüße,
Peter

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
max. sample rate wäre 100kS/s.
ich brauche aber nur jede sekunde einen wert.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

sieht ganz nach einem Timing-Problem aus. Bei dem C-Code ist natürlich 
die Frage, was der Compiler daraus macht ...

Zwei Dinge die mir spontan auffallen:
- die Daten sind nicht unmittelbar nach der fallenden CLK-Flanke gültig.
- ich würde mich beim Auslesen nicht auf das BUSY-Signal verlassen, 
sondern die CLKs zählen.

Gruß,
Olaf

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo olaf

die zeit nach clk0 bis die daten gültig sind, ist nach datenblatt 175ns.
meinst du der vergleich, if(SDATA==1) ad_result++;
ist schneller abgearbeitet als 175ns?
dann müsste ich dort mal ein paar nop's reinschreiben.

ich werde das programm mal abändern.


gruss tobias

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nun habe ich das programm umgeschrieben.

ich kann kontinuierlich werte lesen. es sind auch nicht
zufällige wert. nur sind sie falsch, immer negativ.

das negative könnte von meiner sprintf(,"%d",)funktion kommen.
die wandelt ja eine int zahl in einen string. alles was
über 32768 ist wird dann mit einem vorzeichen in meinen string kopiert.
nur dürfte der gelesene wert schon gar nicht über 32738 sein.
ich arbeite mit einer 10V referenz spannung. und die eingangsspannung 
ist immer kleiner als 5V.

vieleicht hat ja noch jemand einen tip.
sonst kann ich mir nur noch vorstellen das es am aufbau liegt.

gruss tobias

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

bei "%d" wird die Zahl als vorzeichenbehafteter Integer-Wert 
interpretiert.

"%u"  -> unsigned int
"%lu" -> unsigned long

Probiere es mal damit.

Gruß
Olaf

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... außerdem beachten: Wert liegt im 2er-Komplement vor.


Gruß
Olaf

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo olaf

der gewandelte wert den ich vom ad wandler lese ist im
zweierkomplement?
wie kann ich das richtig umrechnen?

tobias

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich habe das mal so programiert...

ich maskiere einfach das msb aus und sollte dann nur noch
possitive werte darstellen können.
habe ich das so richtig verstanden?

tobias

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe noch einen fehler programiert.

dem analog_buf weise ich natürlich den wert von hilf zu...

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ganze funktioniert immer noch nicht.

ich möchte ja nur possitive zahlen darstellen. dann brauche ich ja nicht 
umzurechnen.
aber mein gewandelter wert bewegt sich bei einer eingangsspannung von 
0.5-5V nur im bereich von ca.9000-12000.
es wird also ein viel zu kleiner bereich gewandelt.

könnte dieser fehler nun noch ein hardware problem sein?

tobias

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

im 2er-Komplement werden Zahlen mit Vorzeichen dargestellt. Das MSB 
repräsentiert das Vorzeichen, die restlichen Bits die eigentliche Zahl.

Bsp. (nur mit 8-Bit):

0111 1111 ->  127
0111 1110 ->  126
0000 0000 ->    0
1111 1111 ->   -1
1111 1110 ->   -2
1000 0000 -> -128

Betreibst du den ad677 eigentlich symmetrisch (+/-12V oder +/-15V)?

Gruß
Olaf

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo olaf

ich betreibe den ad677 mit +-12V
und 5V für den ganzen digitalteil des wandlers.

ich muss mal schauen ob vieleicht ein fehler beim calibrieren des 
wandlers passiert. dann könnte natürlich die 16bit auflösung im arsch 
sein.

komisch ist nur wenn ich vin auf gnd lege lese ich immer noch einen wert 
vom wandler.
und das dürfte nun unter keinen umständen sein.

vieleicht ist der wandler selbst auch defekt.
ich bekomme nächste woche wieder 2 samples.

ich versuche dann mal die initialisierung wegzulassen.
mal schauen wie dann die werte aussehen.

gruss tobias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.