Forum: Mikrocontroller und Digitale Elektronik RLC Messung mit AVR


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Robert (Gast)


Lesenswert?

Hallo,

hat schon mal jemand ein Projekt gesehen oder selbst eine machbare
Idee, wie man mit vernünftigen Aufwand einen Z, also ein unbekanntes
2pol bestehend aus R,L,C mit einer Sinus Frequenz Messen kann? Die
Lösung muss nicht hochgenau sein, sollte aber reproduzierbare
Ergebnisse liefern.

Danke schon mal für eure Vorschläge...

Robert

von Wolfram (Gast)


Lesenswert?

solche Bausteine gibt es bei analog devices Bsp: AD5934

Stichworte: CDC, Impedance converter , Network analyzer

von Robert (Gast)


Lesenswert?

Hallo Wolfram,

danke für die Info, das könnte passen.

Hast du vielleicht eine Bezugsquelle für ein eval-board oder Muster?

Grüße Robert

von Christoph Kessler (Gast)


Lesenswert?

Im derzeitigen "Funkamateur" (Januar-Heft)ist ein solcher
Vektor-Analysator besprochen,200kHz-100MHz, der mit zwei
Analog-Devices- Phasenmessungs-IC AD8302 arbeitet. Da das IC die
Phasenlage nicht eindeutig messen kann - es gibt zwei im Diagramm
spiegelbildliche Punkte, die denselben Wert liefern-  muß mit einer
Frequenzvariation die Phasenänderung betrachtet werden.
Das ganze ist allerdings mit 700€ nicht ganz billig. Es gibt sicher
einfachere Lösungen mit Mesung bei einer oder wenigen Frequenzen.
Webseite des Anbieters: http://www.tapr.org/kits_vna.html

von Geri (Gast)


Lesenswert?

Hallo

Ein Ansatz zur LC-Messung findest du hier:

http://www.sprut.de/electronic/pic/projekte/lcmeter/lcmeter.htm

Dann noch eine Widerstandsmessung und man hat ein RLC-Meter

von Benedikt (Gast)


Lesenswert?

Dieses Messgerät ist aber kein echtes RLC Meter, da es nicht zwischen
Spule und Kondensator unterscheiden kann:
Misst man eine Spule und schaltet einen Kondensator parallel, dann
zeigt  dass Messgerät eine größere Spule an !
Davon abgesehen ist die Spulenmessung wirklich einfach und ziemlich
genau. Aber man sollte trotzdem aufpassen, ob das Ergebnis überhaupt
zur Spule passen kann, denn manchmal schwingt der Oszillator aufgrund
von parasitären Bauteilen auf komplett anderen Frequenzen.

von Christoph Kessler (Gast)


Angehängte Dateien:

Lesenswert?

In den UKW-Berichten 3/1999 hat Jochen Jirmann DB1NV "Win vektorielles
Antennen-Impedanzmeter im KW-Bereich" veröffentlicht. Die Schaltung
des Messwertaufnehmers habe ich mal angehängt. Der gesamte Artikel ist
18 Seiten DIN A5 groß.

von Christoph Kessler (Gast)


Angehängte Dateien:

Lesenswert?

Außerdem gibt es ein ganzes Buch zum Thema "HF-Messungen mit einem
aktiven Stehwellen-Meßgerät" von Prof Gerd Janzen DF6SJ, aus dem ich
die Seite mit der recht allgemein gehaltenen Beschreibung, was er
darunter versteht. ISBN-Nr. 3-88006-170-X

von Robert (Gast)


Lesenswert?

Hallo Zusammen,

danke für die Info's. Die Pic Schaltung arbeitet soweit ich das
überblicke nicht mit einem Sinus als Messspannung. Das ist in meinem
Fall aber nötig, da das 2Pol einen variierenden Serienwiderstand
enthält. Deshalb funktioniert die Methode mit Laderampe und
Zeitmmessung auch nicht reproduzierbar über mehrere Exemplare. Ich habe
wohl vergessen zu erwähnen, das die Messfrequenz sich im unteren kHz
Bereich bewegen wird.

Der AD5934 sieht sehr gut aus, aber der scheint ja noch ganz neu zu
sein und es existieren (noch?) keine Implementationen - zumindest habe
ich keine gefunden.

Hatte schon mal jemand die Ehre so ein Teil auszuprobieren?

Robert

von Robert (Gast)


Lesenswert?

So jetzt weiss ich es genau...

Spoerle kann erst im März Muster des AD5934 liefern. Damit ist die
Lösung auch erstmal ausgeschieden.

Noch irgend welche Ideen oder Applikationen die vielleicht mit Sinus
über D/A,  A/D, FFT arbeiten?

Robert

von Christoph Kessler (Gast)


Lesenswert?

Die klassische Methode mit Widerstandsbrücke hat noch keiner erwähnt.

Das geht nur mit einer Frequenz, also Sinus, die unbekannte Impedanz
ist einer der vier Widerstände.
Ein Mitteninstrument zeigt Widerstandsgleichheit in beiden
Brückenzweigen an, wenn man einen veränderlichen Widerstand (=Poti als
Zweipol geschaltet) auf denselben Wert gestellt hat.
Ein Kondensator parallel zu einem der Widerstände und ein einstellbarer
Kondensator an einem anderen wird ebenfalls auf Brückennull eingestellt,
dann liest man an einer Skala am Drehkondensator den Blindwiderstand ab.
Wenn der variable C kleiner als der feste C ist, dann ist die unbekannte
Impedanz induktiv, sonst kapazitiv.

Das ganze kann man mit bekannten Bauteilen kalibrieren, also eine Skala
beschriften.

Ich meine, das gabs auch zu kaufen als Zusatz zu Dipmetern von
Leader-Tech. Das Dipmeter lieferte die Sinusschwingung

von Christoph Kessler (Gast)


Lesenswert?

Ich hab mal gegoogled und das hier zum Thema Messbrücke gefunden,
speziell zur Z-Messung heißt das Wien- oder Maxwell-Messbrücke
Mit Rauschspannung statt Sinus auch "Antennenmessbrücke" nur so als
Google-Stichwort zum Weitersuchen

http://www.ptl.de/images/bilder/et-13a.pdf

von Robert (Gast)


Lesenswert?

So jetzt muss ich das hier nochmals aufwärmen...

Nachdem sich erstmal keine so einfach automatisierbare Lösung
abzeichente und die Muster des AD5934 doch früher als erwartet bei mir
eintrafen, habe ich damit mal ein Muster aufgebaut. Aber um es
vorwegzunehmen die Qualität der Daten lässt leider zu wünschen
übrig...

Viele Eigenschaften des Chips die das Datenblatt nennt sind nur durch
aufwendige äussere Massnahmen erreichbar, bzw. lassen sich bisher
garnicht in der Realität bestätigen. Die eher simple Aufgabe eine
unbekannte Kapazität im Bereich von 10..100nF behaftet mit einem
serien-R der im Bereich von wenigen Ohm bis zu 5kOhm liegen kann, lässt
sich nicht mit einer angemessenen Genauigkeit lösen. Die geforderte
Messfrequenz liegt im Bereich von 100Hz bis 2Khz.

Die Messfehler liegen teilweise über 10% ! Die Abweichungen sind zwar
weitgehend reproduzierbar, aber da deren Kompensation nicht so ohne
Weiteres möglich ist, sind die Ergebnisse nicht so verwertbar.

Monate Später habe ich meine Versuche jetzt erstmal eingestellt und
hoffe noch ein wenig auf Support von AD oder vielleicht von jemanden
der es weiter geschafft hat als ich...

von Wolfram (Gast)


Lesenswert?

Kannst du mal deine Schaltung zeigen und das ganze genauer ausführen?
Warum 100Hz bis 2kHz. Was sind deine Meßnormale an denen du die
Vergleiche machst und auf 10% kommst?

von Robert (Gast)


Lesenswert?

Hallo Wolfram,

die Schaltung kann ich im Moment von hier aus nicht reinstellen,
entspricht aber im wesentlichen der Vorschläge aus den Datenblättern.
Die Referenz bilden Folienkondensatoren 10n von Ph. Typ F63 1%. Die
R's sind 'gewöhnliche' 0.1% Metallfilm Typen. Die Kondensatoren sind
alle auf einer Hioki 3532 verifiziert worden. Die Frequenzen sind
Vorgaben des Kunden. Als Fclk für den Chip selbst habe ich von 16MHz
bis runter in den 200 kHz Bereich Versuche gefahren.

Zum Abgleich des Chips habe ich Anfangs einen C verwendet, aber das hat
sich aufgrund der engen Dynamik als unpraktikabel erwiesen. Stattdessen
wird zum Abgleich (per Relais) jetzt ein R gewählt. Nach Rücksprache
mit AD liegt der sinnvoll nutzbare Dynamikbreich bei 50-200% um die
Abgleich (Referenz) Impedanz. Vorrausgesetzt der Rfb ist richtig
gewählt, um Übersteuerung des A/D Teils zu vermeiden.

Trotzdem ist es so nicht möglich, einen reinen C der bei der gewählten
Frq. die gleiche Impedanz wie der R ref darstellt, auch nur annähernd
richtig zu messen. Legt man einen (passenden) R dazu in Reihe sieht es
besser aus, aber das kann es ja nicht sein...

Robert

von Wolfram (Gast)


Lesenswert?

Mich hätte das Layout interessiert, saubere Trennung von AGND/DGND.
Stabilisierung der Stromversorgung etc.
Der Chip kann eine IMPEDANZ von 100Ohm bis 10MOhm. Versuch mal ob es
besser wird wenn die Impedanz bei 100kOhm liegt. Zum einen Mitte des
Messbereiches und es wird weniger Strom zum messen benötigt->geringere
Anforderungen an die Stabilisierung bzw. interne OPV.
Du sagst ja selbst wenn du noch einen R reinlegst (und damit den Strom
begrenzt) wird es besser.
Wenn du im Datenblatt unter Impedanzerror gehst Bereich 0.1Kohm bis
1Kohm. Denn da läge deine Impedanz. (2KHz,100nF) Dann sind da für
10KHz
4%Fehler angegeben und für 35KHz 3,5% Tendenz abnehmend. Also nach der
Tendenz könnte man bei 2KHz noch wesentlich schlechter liegen. Schau
dir im Vergleich mal den 10KOhm bis 100KOhm Bereich an. Da willst du
doch ungefähr hin.
Die Empfehlung damals kam, da ich auch gerade den Chip auf dem Tisch
liegen hatte. Die Samples hatten bei mir eine Woche Lieferzeit. Leider
bin ich bis jetzt noch nicht dazugekommen ihn zu benutzen.

von Robert (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Wolfram,

habe dir die Ansichten angehängt. Was meine Parameter angeht, bin ich
nicht flexibel. - Kunde braucht das genau so. Meine Alternativen die
ich sehe sind entweder das Teil z.B. durch zusätzliche Beschaltung mit
einer Pufferstufe und was weiss ich noch alles zu zähmen, oder ich baue
das ganze doch konventionell auf.

Was mich an dem Chip exterm stört ist zum Einen die schlechte
Signalqualität des DDS bei niedrigen Taktfrequenzen, und zum anderen
das man keine Kontrolle bei Über- oder Untersteuerung des A/D hat. Bei
der Wahl der Taktfrequenz ist man leider nicht frei, da die DFT 5 tau
überspannen soll... Der 'Sinus' der dann da aus dem DDS rauskommt
verdient eigentlich den Namen nicht mehr. Aber einen Vorteiler für die
Samplingrate des A/D gibt es nicht.

Trotzdem danke für den Tipp, beim ersten lesen des Datenblattes kommt
man eben nicht gleich auf die Fallstricke. Ich habe mal parallel eine
Supportanfrage gestellt. Mal sehen ob da was Vernünftiges bei
rauskommt.

Grüße Robert

von Geri (Gast)


Lesenswert?

Hallo

Sehr interessant ist eine RLC-Bestimmung nach dem Prinzip der
Kreuzkorrelation. Hier erreicht man höchste Genauigkeiten -auch bei
sehr kleinen und bei sehr grossen Impedanzen.

Vielleicht eine Hilfestellung bei der Suche..

Beste Grüsse
Geri

von Robert (Gast)


Lesenswert?

@Geri,

kannst du mal grob skizzieren wie das Verfahren funktioniert?

von Wolfram (Gast)


Lesenswert?

Hallo Robert,
Was machen die Dioden im Messpfad?
Du sagst es ist ein schlechter Sinus, bis wohin wird der Sinus
ausgesteuert? Es
Wie lang dauert so eine Messung? Kannst du mal ein Bsp. bringen? Würde
mich sehr interessieren.
Hast du schonmal eine Messung ohne Relais probiert.
Auch wenn es sehr weit hergeholt klingt, die gegenüberliegenden
Kontakte eines Relais sind kleine Metallplattenkondensatoren. Die Frage
ist wie weit sie in dem Relais auseinander sind. Nicht das der Fehler
daraus resultiert, das bei der Messung die Referenzimpedanz parallell
über das Relais mit eingekoppelt wird.

von Arno H. (Gast)


Lesenswert?

Hallo,
die 1N4448 würde ich rausschmeissen und durch Dioden mit sehr niedrigem
Sperrstrom UND sehr niedriger Sperrschichtkapazität ersetzen.
Am preiswertesten sind hier einfache Sperrschichtfets zu verwenden.
Drain und Source zusammenschalten und die Gate-Kanal-Sperrschicht
verwenden.
Relais kann man auch nach niedrigen Kapazitäten aussuchen.
Wo ist die Untergrenze des Kapazitätsmessbereichs?
Arno

von Robert (Gast)


Lesenswert?

@Wolfram,

die Dioden schützen die Schaltung vor möglicherweise beim Anschluss
geladenen Kapazitäten. Zum Test habe ich die Sache natürlich schon mal
komplett gestript. Also direkte Verbindungen und sonst nix. Da waren
keine Unterschiede zum jetzigen Aufbau festzustellen. Wie gesagt stabil
ist das Ganze, aber eben weit entfernt von den Angaben des Herstellers.

Zum Sinus, der wird ja intern vom DDS Teil de Chips erzeugt. Was man am
Oszi sieht ist die Quantisierung des D/A, das führt natürlich zu
Oberwellen und zu Fehlern in der (Singlepoint-)DFT Auswertung. Der
Sinus hat je nach gewählter Konfiguration eine andere Amplitude und
auch Offset, bleibt aber immer in den Grenzen GND-VCC. Genaueres findet
man im Datenblatt.

@Arno,

die zu messenden Kapazitäten liegen im 2 stelligen nF Bereich. Es
handelt sich bei diesem Chip immer um eine Relativmessung zu einer
bekannten Impedanz, somit stören die Dioden nicht.


Mein Fazit ist mitllerweile, das ich die Geschichte so nicht machen
kann. Auf meine Supportanfrage gab es zwar Antworten bis zu einem
gewissen Punkt, aber das Problem an sich konnte nicht gelöst werden.

Schade, das war ganz schön Aufwand...

von Wolfram (Gast)


Lesenswert?

Schade, der Chip hörte sich ganz gut an. Ich hätte nicht erwartet das
man am Oszi die DDS sieht. Ich will ihn demnächst mit einer Spule
testen, mal sehen was das wird.
Letzte Möglichkeit die mir einfiele, du legst die Referenzimpedanz in
Reihe mit dem Messobjekt und misst einmal mit und einmal ohne
Messobjekt(gebrückt). Dann hättest du auch eine kleinere Kapazität und
kommst in den günstigeren Messbereich.

von Robert (Gast)


Lesenswert?

Hi Wolfram,

das habe ich schon hinter mir, aber die Vorteile halten sich in
Grenzen. Zum Sinus sei noch gesagt, das je höher die Taktfrq. desto
besser das DDS Ergebnis, jedoch wird dann das Erfassungsfenster für die
DFT zu klein. Hier fehlt intern ein Vorteiler...

Viel Glück bei deiner Anwendung, du kannst ja über Ergebnisse
berichten. Sollte sich seitens des Supports noch was tun werde ich was
dazu schreiben...

Grüße Robert

von Ingo L. (ingo76)


Lesenswert?

Hallo erst mal,

ich hoffe hier kann mir jemand helfen.
Ich nutze das EVA-Board vom AD5933, sollte aber bis auf einen
schnelleren ADC identisch sein wenn ich mich nicht täusche.

Mein Problem ist folgendes, ich weiss absolut nicht wie man man aus den
Werten des Real- bzw. Imaginärregisters R, L und c berechnet.
Ich hätte ja erwartet das bei einem reinen Widerstand unter 50 kHz der
Realteil gleich dem Widerstandswert und der Imaginär annähernd "0"
sein müsste.
Im Datenblatt steht nur, dass die Werte im 2-Komplement sind. Die
Eva-Board-SW liefert diese als ASCI-Werte in einer einspaltigen
Text-Datei, diese Werte machen für mich überhaupt keinen Sinn.

Im Messbereich von 30 - 31.5 kHz bei 100k ohm Calibrierung, bekomme ich
zum Beispiel folgende Werte bei 30kHz:

100 k - RE: -1580 IM: 9943 Amplitude: ca. 100.000
200 k - RE: 271 IM: 5459 Amplitude: ca. 184.000

Warum ist der Realteil bei 100k eigentlich negativ und 200 positiv?
Es sieht so aus als ob bei pos. Realteil für zu große Abweichungen
steht?
Wie kann sich in dem Bereich eigentlich der Imaginärteil so stark
verändern?
Kann mir jemand sagen wie Real- und Imaginärteil in reale l,r,c
umrechnet?

Also falls schon jemand mit dem AD5933/5934 ausreichende Erfahrungen
hat, ich bin dankbar für jede Unterstützung.

Besten Dank im voraus

Grüsse Ingo

von hastam ahmadi (Gast)


Lesenswert?

Hi
Ich kaufte mir ein AD5933 Evaluation-Board, aber ich habe viele Probleme 
mit der Kalibrierung dieser device.I entfernen LK9 und ich einen 200K 
Ohm für RfB und 100K Ohm Verbindung zwischen VIN und VOUT und ich 
kalibrieren it.But, wann immer ich will, um ein Impedanz 100 Ohm 
Widerstand Gerät ein 88K Ohm impedance.Can Sie helfen mir, was ist mein 
Fehler in der Kalibrierung?

von Jörn (Gast)


Lesenswert?

@Ingo

Hi,
Ich habe ebenfalls das AD5933 Eval Board und genau das gleiche Problem.

Hasst du mitlerweile rausgefunden wie genau die Werte in Real und 
Imaginär registern zu deuten sind?

Ich hab die selbe Messung mit einem Widerstand mit 200k durchgeführt.

Die Impedance passt ha genau enstpricht also gemessen auch 200k.

Real-Value: -4199
Imag-Vale: 9096

Berechnete werte:

Impedance 200k
Winkel -114°

Berechne ich nun den "richtigen" (Gain Faktor muss eingerechnet werden) 
Real und Imaginärteil neu, erhalte ich folgede werte:

Real:     -81,34 k
Imaginär: -182,7 k

Hat es mittlerweile jemand geschafft dem AD5933 sinnvolle Werte zu 
entlocken?

Gruß Jörn

von AVR (Gast)


Lesenswert?

Könnt ihr mir bitte sagen, wie ich die Daten aus beiden Register lesen 
kann?
Ich hab es folgendermaßen implementiert, aber es werden keine Werte 
geliefert:

unsigned char i2c_readbyte(unsigned char regadress)
{
i2c_start();
i2c_write(0x1B);        // Standardadresse des AD5934 0b0001101 
+1-Bit=lesen
delay_us(50);
data=i2c_read(0);       // Master empfängt Data Byte vom Slave
delay_us(50);
i2c_stop();
return data;            // Rückgabewert der gelesenen Bytes aus Ad5934
}

Im Datenblatt steht, dass genau diese Reihenfolge angewendet werden soll 
(nur Slave-Adresse von Bedeutung), um ein Byte zu lesen. Ich vermisse 
allerdings die Registeradresse.

Wie habt ihr es implementiert?

herzlichen Dank.

von Jörn (Gast)


Lesenswert?

Hi,

1. Adresse des AD5933 mit zusatz bit zum schreiben 0x1A auf i2c Bus 
senden
2. Commando 0xB0 senden. (Register Pointer)
3. Registeradresse senden

4. Adresse des AD5933 mit zusatz bit zum lesen 0x1B auf i2c bus senden
5. Registerwert vom i2c Bus lesen

Grüße Jörn

von AVR (Gast)


Lesenswert?

Hallo Jörn,

danke für den Tipp mit den command-Befehl. Allerdings sind die Register 
weiterhin  0000. Schreiben auf dem IC funktioniert wunderbar, aber lesen 
noch nicht, hier Ein Auszug wie ich es umgeschrieben habe. Theoretisch 
ist es so wie im Datenblatt steht und wie du es gelistet hast. Wo mache 
ich mein Fehler?

if (status & 0x02)           //  Abfrage, ob DFT-Operation zu Ende ist
        {

        i2c_commandbyte(0x94);        //  Adress-Zeiger
        i2c_readbyte();
        realarray[0]= data;
        i2c_commandbyte(0x95);
        i2c_readbyte();
        realarray[1]= data;
        i2c_commandbyte(0x96);        //  Adress-Zeiger
        i2c_readbyte();
        imaginararray[0]= data;
        i2c_commandbyte(0x97);
        i2c_readbyte();
        imaginararray[1]= data;
        if (status & 0x04)
                {
                i2c_writebyte(0x80,0xA0);     //  Registeradresse: 0x80, 
Powerdown mode: D13 & D15 setzen
                }
        else
                {
                i2c_writebyte(0x80,0x30);     //  Registeradresse: 0x80, 
Increment frequency: D12 & D13 setzen

                }

        }


  :
  :
  :
  :
  :


unsigned char i2c_readbyte(void)
{

i2c_start();
i2c_write(0x1B);       // Standardadresse des AD5934 
0b0001101+1Bit=lesen;
delay_us(50);           // als "Ersatz" für Acknowledge-Bit vom AD5934
data=i2c_read(0);       // Master empfängt Data Byte vom Slave
delay_us(50);
i2c_stop();
return data;            // Rückgabewert der gelesenen Bytes aus Ad5934
}

void i2c_commandbyte(unsigned char regadress)
{
i2c_start();
i2c_write(0x1A);        // Standardadresse des AD5934 0b0001101 +0-Bit 
=schreiben;
delay_us(50);
i2c_write(0xB0);        // command code (Datenblatt Seite 27)
delay_us(50);
i2c_write(regadress);   // Registeradresse auf dem Pointer gezeigt wird
delay_us(50);
i2c_stop();
}

von AVR (Gast)


Lesenswert?

Hallo,

ich hab nun zumindest Werte nun bekommen, zwar nicht plausible aber 
immerhin irgendwelche, nachdem ich den if-Befehl auskommentiert habe. 
Mein Bit (status: DFT zu Ende) war dauerhaft Low, deshalb sprang es 
überhaupt nicht in der if-Anweisung.

von Dennis (Gast)


Lesenswert?

bei mir auch das selbe problem. im zus'hang mit gain factor wirds auch 
net anders. hab sogar den gain factor konstant einen wert zugewiesen, so 
um die 10^-12, trotzdem kommt da morks raus, wenn ich unterschiedlich 
reale widerstände verwende.

@ ingo: du musst den gain factor mit berücksichtigen und bei jeder 
änderung des pga-wertes,zu messende impedanz und 
ausgangserregungsspannung diesen neu berechnen (siehe s.16 unten 
rechts).

was mir aber an den ding so gar net gefällt bzw. ich schlechtes gefühl 
dabei hab, ist der controll-register 0x80. bei den programmablaufplan 
steht schrittweise: zuerst standby, initalize mode,sweep mode command, 
einstellung des pga usw. alles auf register 0x80. wenn man diese 
schritte  hintereinander durchführt, dann überschreibt man ja die 
einzelnen bits (z.b. für die verstärkung des pga's), ich vermute mal 
beim gain factor liegt der fehler, dass dieser falsch berechnet wird...

gruß dennis

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Da sich auf die Universalanfrage noch keiner gemeldet hat, versuche ich 
es hier nochmal. Habt Ihr dem AD5934 irgendwie sinnvolle Werte entlocken 
können?

Anbei nochmal meine Originalanfrage:


Hallo,

hat jemand schon mal dem Impedance Converter AD5934 sinvolle Werte
entlocken können? Die I2C-Programmierung des geht so leidlich. Das
Rücklesen der Register ergibt immer den vorher reingeschriebenen Wert
aber die Messung wird nie mit "valid real/imaginary data" beendet. In
Abhängigkeit des Gain Faktors erhalte ich mal 00h oder 70h aus dem
Statusregister. Beide werte machen keinen Sinn. Die Programmierung mache
ich laut Vorschrift:

Daten Programmieren
- standby
- initialisierung
- start sweep

hier der Code dazu:

// Initialisierung AD5934
TWI_Flag := TWIout(Slave, $82,$02);               { Startfrequenz 1000
Hz }
TWI_Flag := TWIout(Slave, $83,$0C);
TWI_Flag := TWIout(Slave, $84,$49);

TWI_Flag := TWIout(Slave, $85,$02);           { Frequenzincrement 1000
Hz }
TWI_Flag := TWIout(Slave, $86,$0C);
TWI_Flag := TWIout(Slave, $87,$49);

TWI_Flag := TWIout(Slave, $88,$00);        Incremente 50 (1 kHz - 50
kHz) }
TWI_Flag := TWIout(Slave, $89,$32);

TWI_Flag := TWIout(Slave, $8A,$06);                  { Settings Cycles
x4 }
TWI_Flag := TWIout(Slave, $8B,$64);                   { 100 Messungen x
4 }

TWI_Flag := TWIout(Slave, $81,$08);     { D3 = 1, extern Clock
}
TWI_Flag := TWIout(Slave, $80,$B1);     { Standby Mode
}
                                        { D9 = D10 = 0; 2 V p-p
}
                                        { D0 = 1; PGA Gain 1
}
TWI_Flag := TWIout(Slave, $80,$11);     { Messung initialisieren
}
TWI_Flag := TWIout(Slave, $80,$21);     { Start Sweep
}


TWI_Flag := TWIout(Slave,$B0,$8F);       { Command Code + Statusregister
}
TWI_Flag := TWIinp(Slave, TWI_Status);         { lese Statusregister 8FH
}
If TWI_Flag = true then
  TWI_Error := $FF;                                   { lesen
erfolgreich }
  else TWI_Error := $00;                               { lesen
fehlerhaft }
endif;


Joe

von assyrian (Gast)


Lesenswert?

Hallo Joe,

ich hab auch mal mit dem AD5934 gearbeitet und sinnvolle Ergebnisse 
bekommen. Aber mal vorweg: es war nicht ganz ohne...

Ich habs damals in C programmiert. Du meinst du hast den 
Skalierungsfaktor berechnet, kannst du dir das anzeigen lassen? z.B. mit 
nem LCD oder so. Es wär hilfreich zwecks debuggen sozusagen, vielleicht 
ist dort etwas nicht plausibel...

Ich vermute aber der Fehler ist woanders. Bei den Setting Cycles 
(Register 0x8A und 0x8B) wählst du lange Zeiten. Später wenn du mit if 
abfragst, ist die Berechnung nicht so schnell zu Ende, deshalb musst du 
eine Schleife einbauen, die solange läuft bis die Ergebnisse gültig 
sind, so hab ich das gemacht zumindest...

Ich kenne die Assemler-Befehle nicht, aber laut Registerbeschreibung und 
Kommentare stell ich fest, dass du den Register 0x8F nicht abfragst, 
oder täusch ich mich?! Wenn die entsprechenden Werte gültig sind, erst 
dann kannst du mit der nächsten Frequenz fortfahren.
Außerdem machst du zwischendurch standby, warum eigentlich? Laut PAP auf 
Seite 21 kommt das zum Schluß, also probier mal ohne die Zeile mit 
(0x80,0xB1)...

Probier mal immer wieder aus und irgendwann klappts.

grüße

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Hallo Assyrian,

besten Dank für die Hilfestellung! Einer der Fehler war wirklich nicht 
lange genug auf das Ergebnis zu warten. Nun bekomme ich nach der 
entsprechenden Messzeit die Antwort das Daten bereit liegen. Ob sie 
korrekt sind prüfe ich gerade.

Beste Grüße

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.