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
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
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
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
Hallo Tobias, bei "%d" wird die Zahl als vorzeichenbehafteter Integer-Wert interpretiert. "%u" -> unsigned int "%lu" -> unsigned long Probiere es mal damit. Gruß Olaf
hallo olaf der gewandelte wert den ich vom ad wandler lese ist im zweierkomplement? wie kann ich das richtig umrechnen? tobias
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
habe noch einen fehler programiert. dem analog_buf weise ich natürlich den wert von hilf zu...
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
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
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
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.