Forum: Mikrocontroller und Digitale Elektronik Ansteuerung des AD5292


von Peter G. (grudolf)


Lesenswert?

Hallo!
Habe folgendes Problem:
Möchte gerne das Digipoti AD5292 ansteuern, jedoch weiß ich überhaupt
nicht, welche Zeichenkette dieser Baustein überhaupt will?
Werde aus dem Datenblatt nicht schlau, außer dass man es über SPI
ansteuern sollte...
Bitte um Hilfe....Danke...
lg

von Reinhard R. (reinhardr)


Lesenswert?

Zumindest auf den ersten Blick scheint das Datenblatt ja gut 
verständlich zu sein. Ab S18 wird das alles erklärt.

Um dich besser einschätzen zu können, bzw. das Problem einzugrenzen: 
Hast du schon praktische Erfahrung mit SPI oder ähnlichen seriellen 
Schnittstellen? Mit welchen µC willst du das verwenden?

Reinhard

von Peter G. (grudolf)


Lesenswert?

Okay danke, hab mir die Seite 18 mal angeguckt.
Hatte vorher glaube ich n falsches Datenblatt drinn...
Nun aber das Problem, dass ich wirklich noch nie mit SPI gearbeitet 
habe, was ich weiß, gibts auch Master-Slave Prinzip wie i2c oder lieg 
ich da falsch? Erfahrung hab ich mit RS232 und eben I²C.
µC: PIC18F4550

lg

von Reinhard R. (reinhardr)


Lesenswert?

Wenn du schon mit I2C gearbeitet hast, sollte SPI kein Problem für dich 
sein. SPI ist ein Master-Slave Bus wie es normalerweise bei I2C der Fall 
ist (I2C eignet sich auch für Multimasterszenarien).
Der Hauptunterschied zu I2C ist wohl die Art und Weise wie einzelne 
Devices angesprochen werden. Bei I2C gibt es die Start und Stop Signale 
und eine individuelle Adresse für jedes Device. Bei SPI gibt es eine 
zusätzliche "Slave Select" Leitung. Mit der wird dem angesprochenen 
Device Anfang und Ende der Übertragung signalisiert. Verkettete Slaves 
können sich auch eine SS Leitung teilen, das ist aber in deinem Fall 
vermutlich nicht relevant.
Außerdem besitzt SPI getrennte Leitungen für des Senden und das 
Empfangen der Daten. Eine gleichzeitige Übertragung in beide Richtungen 
ist daher möglich.
Unter Serial Peripheral Interface findest du detailliertere 
Informationen, insbesondere auch im ersten Link.

Mit PICs habe ich keine Erfahrungen, aber laut der HP von Microchip 
unterstützt der von dir Verwendete SPI in Hardware, was dir die Sache 
deutlich einfacher machen sollte.

Reinhard

von Dieter W. (dds5)


Lesenswert?

> Eine gleichzeitige Übertragung in beide Richtungen ist daher möglich.

Genauer gesagt wird auf jeden Fall in beide Richtungen gleichzeitig 
übertragen, wobei nur in ganz seltenen Fällen auch sinnvolle Daten in 
beiden Richtungen laufen.

Beim Lesen vom slave schickt man z.B. erst die Leseanforderung (der 
slave gibt derweil noch keine Daten aus) und danach so viele "dummy" 
Bytes (Daten sind ohne Bedeutung) wie man Bytes empfangen will.

von Peter G. (grudolf)


Lesenswert?

Reinhard R. schrieb:
> Wenn du schon mit I2C gearbeitet hast, sollte SPI kein Problem für dich
> sein. SPI ist ein Master-Slave Bus wie es normalerweise bei I2C der Fall
> ist (I2C eignet sich auch für Multimasterszenarien).
> Der Hauptunterschied zu I2C ist wohl die Art und Weise wie einzelne
> Devices angesprochen werden. Bei I2C gibt es die Start und Stop Signale
> und eine individuelle Adresse für jedes Device. Bei SPI gibt es eine
> zusätzliche "Slave Select" Leitung. Mit der wird dem angesprochenen
> Device Anfang und Ende der Übertragung signalisiert. Verkettete Slaves
> können sich auch eine SS Leitung teilen, das ist aber in deinem Fall
> vermutlich nicht relevant.
> Außerdem besitzt SPI getrennte Leitungen für des Senden und das
> Empfangen der Daten. Eine gleichzeitige Übertragung in beide Richtungen
> ist daher möglich.
> Unter Serial Peripheral Interface findest du detailliertere
> Informationen, insbesondere auch im ersten Link.
>
> Mit PICs habe ich keine Erfahrungen, aber laut der HP von Microchip
> unterstützt der von dir Verwendete SPI in Hardware, was dir die Sache
> deutlich einfacher machen sollte.
>
> Reinhard

Hallo Reinhard.
Das Ansprechen der Devices stellt sich für mich noch ein bisschen 
utopisch heraus. Zum Beispiel hat ja bei I2C jeder Slave seine eigene 
Adresse, also externe Adresse und zum Beispiel noch Speicheradresse. 
Angesprochen über i2c_write Befehle Beispielsweise. Wird gesendet über 
die SDA Leitung. Wie sieht das bei SPI aus? Ähnlich? Fungiert man da die 
Adressen ganz einfach mittels SS Leitung?
Ja SPI wird vom PIC 100%ig unterstützt, mittels dem MASTER SYNCHRONOUS
SERIAL PORT (MSSP) MODULE, welches auch eine SPI Mode unterstützt.
Danke im Vorraus,
MfG

von Reinhard R. (reinhardr)


Lesenswert?

Es läuft in etwa so ab (kleinere Ungenauigkeiten bitte verzeihen, hab es 
schon eine Weile nicht mehr gemacht).

Aktivieren der SS Leitung (active low)
Senden des Befehls
Deaktivieren der SS Leitung

Lesen ist geringfügig komplizierter. Sieh dir dazu mal das 
Timingdiagramm auf S8 im Datenblatt an.

Wichtig ist auch dass du die richtigen Flanken verwendest. In deinem 
Fall wird immer bei fallender Flanke ein Bit übertragen.

Reinhard

von Peter G. (grudolf)


Lesenswert?

Reinhard R. schrieb:
> Es läuft in etwa so ab (kleinere Ungenauigkeiten bitte verzeihen, hab es
> schon eine Weile nicht mehr gemacht).
>
> Aktivieren der SS Leitung (active low)
> Senden des Befehls
> Deaktivieren der SS Leitung
>
> Lesen ist geringfügig komplizierter. Sieh dir dazu mal das
> Timingdiagramm auf S8 im Datenblatt an.
>
> Wichtig ist auch dass du die richtigen Flanken verwendest. In deinem
> Fall wird immer bei fallender Flanke ein Bit übertragen.
>
> Reinhard

Hallo Reinhard!
Okay, in das habe ich mich schon vertieft, dass man zuerst die SS 
Leitung auf Low ziehen muss, damit die Datenübertragung überhaupt 
starten kann, bzw. bei der nächsten Flanke des SCLKs...
Danach sende ich einen Befehl an den AD5292 über die MOSI Leitung an den 
DIn Eingang. Verstehe ich auch noch.
Wie ist das jedoch, wenn ich zwei AD5292 habe, wie werden diese 
adressiert (also die Digitalpotis sind das ja...). Wie erkennt der Slave 
Hausnummer 1, dass er gemeint ist, und nicht der Slave mit der 
Hausnummer 2?
MfG

von Helmut -. (dc3yc)


Lesenswert?

Indem du die entsprechende SS-Leitung auf LOW ziehst. Jeder Baustein 
bekommt seine eigene Select-Leitung.

Servus,
Helmut.

von Peter G. (grudolf)


Lesenswert?

Aaaah:
Hab soeben die Seite 21 angeguckt. Dort steht:
"When two AD5292 devices are daisy-chained, 32 bits of data are 
required. The first 16 bits go to U2, and the second 16 bits go to U1."
D.h. jetzt einfach, wenn ich 32 Bit sende, werden die 16 
niederwertigeren Bits an das zweite Gerät, und die 16 höherwertigen Bits 
an das erste Gerät übertragen?
MfG

von Peter G. (grudolf)


Lesenswert?

Helmut -dc3yc schrieb:
> Indem du die entsprechende SS-Leitung auf LOW ziehst. Jeder Baustein
> bekommt seine eigene Select-Leitung.
>
> Servus,
> Helmut.

Hallo.
Aber wenn jeder Baustein seine eigene SS Leitung hat, dann ist es ja im 
Prinzip nichtmehr möglich, die Bausteine zu verketten, oder lieg ich da 
falsch?
MfG

von Rotti (Gast)


Lesenswert?

Wenn du die hintereinander hängst, musst du die Potis parallel an eine 
einzige SS-Leitung hängen, das sieht für den uC dann wie ein einziger 
Chip aus, der eben die n-Fache Menge an Daten bekommt.

von Peter G. (grudolf)


Lesenswert?

Rotti schrieb:
> Wenn du die hintereinander hängst, musst du die Potis parallel an eine
> einzige SS-Leitung hängen, das sieht für den uC dann wie ein einziger
> Chip aus, der eben die n-Fache Menge an Daten bekommt.

Eben die 32Bit anstatt der 16Bit oder?
Wenn ja, dann ist alles klar :-)
MfG

von Rotti (Gast)


Lesenswert?

Ganz genau, vermute ich...

Habe es mit dem AD5290 zumindest so gemacht, der SDO des letzten kann 
dann an den MISO vom uC angeschlossen werden, damit du die Daten 
auslesen kannst.

von Peter G. punkt (grudolf) (Gast)


Lesenswert?

Mal ne mehr oder weniger Offtopic-Frage.
Gibts es die Dinger von Analog D. eigentlich auch in dem DIP 8 Gehäuse, 
oder nur generell nur SMD?
Ich hab zwar von Analog D. direkt gesampled, jedoch kam es mir so vor, 
als wenns dir Dinger nur in SMD Format gibt...
MfG

von Reinhard R. (reinhardr)


Lesenswert?

Das AD5292 gibt es nur im TSSOP Gehäuse, siehe Datenblatt.
Von AD gibt es derzeit 8 andere digitale Potis im PDIP Gehäuse, siehe 
Homepage.

Wenn SPI nicht dein Fall ist sieh dir mal das AD5220 an.

Reinhard

von Hans M. (fuxdancer)


Lesenswert?

gibt es eigentlich irgendwelche adapter, mit welchem man so einen ic auf 
dip8 umändern kann?

von Peter G. punkt (Grudolf) (Gast)


Lesenswert?

Naja, das Problem liegt eher nicht bei SPI, sondern daran, dass ich die 
Auflösung des Potis unbedingt brauch bei gleichzeitig hoher 
Eingangsspannung. Weiß jetzt nur nicht, welche dein oben beschriebenes 
Poti für ne Auflösung/maximale Spannung hat. Das Problem in TSSOP ist, 
dass die Leiterbahnen auf 1/4 Mil Abstand sind, und das bei meiner 
Fertigung für den Prototypen nicht möglich ist zu fertigen. Deshalb wäre 
es günstiger ein anderes Gehäuse, anstatt eine andere Firma zu wählen...
LG

von Reinhard R. (reinhardr)


Lesenswert?

@Chris K.
Ja, im einfachen Fall eine Platine mit 2 Stiftleisten. Es gibt auch 
aufwendigere Adapter z.B. für Programmer, die aber relativ teuer sind.

@Peter G. punkt
Sieh dich mal auf der HP von Analog um. Da gibt es auch parametrische 
Listen. Ganz abnehmen kann ich dir die Produktrecherche nicht. ;)

Reinhard

von Peter G. (grudolf)


Lesenswert?

Reinhard R. schrieb:
> @Peter G. punkt
> Sieh dich mal auf der HP von Analog um. Da gibt es auch parametrische
> Listen. Ganz abnehmen kann ich dir die Produktrecherche nicht. ;)
>
> Reinhard

Brauchst du auch nicht, nur wenn du spontan was gewusst hättest, hättest 
du mir weiterhelfen können, ansonsten bin ich schon vollkommen 
zufrieden!
MfG

von Gregor S (Gast)


Lesenswert?

Peter,

warst du erfolgreich, mit AD5292 steuerung?
Ich habe naemlich aenliches Problem. Ich kenne gut genug SPI Protokol 
aber habe Probleme mit Steuerung Inhalt. Ich glaube, zuerst man musst 
0x1803 senden und dann vieleich in RDAC schreiben. Aber das arbeitet 
nicht. Soll man noch was machen/senden?

Gregor

von Peter G. punkt (grudolf) (Gast)


Lesenswert?

Tach Gregor!
Also ich hab das ganze so realisiert (obwohl zurzeit noch nicht 
funktioniert):

Zuerst 4096dez also 0001000000000000bin rausschreiben. Ist ein Reset 
"refresh RDAC with 20-TP strored value".
Bin mir aber nicht sicher, ob das nötig ist, auf Seite 19 im Datenblatt 
steht was von Write Protection und Command 4, eben die 4096dez.
Und folglich steht: "Um das Programmieren der Wiper zu ermöglichen, ist 
es nötig, das write protect bit (C1) zu setzten. Das wird erreicht, 
indem man das Schieberegister mit Command 6 füttert. Also: 
0001100000000000bin. (6144dez).
Nun hab ich den Wert am Potentiometer rausgeschrieben, mittels Command 
1.

Ich muss jetz noch gucken, ob ich das hinbekommt bekomme, da ich mir 
noch nicht beim Timing sicher bin, ob ich die maximalen Zeiten einhalte 
(weil manuelles Timing). Würde mich über deine Antwort freuen, ob du es 
so geschafft hast, wie oben beschrieben, ansonsten meld ich mich wieder 
hier.

LG

von Gregor S (Gast)


Lesenswert?

Bis jetzt bin ich nicht mit reset command probiert. Bis jetzt bin ich 
nur mit command 6 0x1802 begonnen und dann mit command 1 0x0500 (zum 
Beispiel) RDAC geandert. Damit war ich nicht erfolgreich. Werde ich 
jetzt mit reset command am Anfang versuchen und dann melden. Bis jetzt 
konnte ich noch nicht Wiederstand andern. War ich aber erfolgreich einen 
anderen AD IC durch SPI benutzen (mit 100 us CLK Periode)...

von Peter G. punkt (grudolf) (Gast)


Lesenswert?

Also ich weiß jetzt nicht spezifisch deine Anforderungen, aber ich hab 
den AD5290 schon angesteuert, erweist sich als relativ einfach!

von Heinz W. (heinz_wichtelmann)


Angehängte Dateien:

Lesenswert?

Peter G. punkt (grudolf) schrieb:
> Also ich weiß jetzt nicht spezifisch deine Anforderungen, aber ich hab
> den AD5290 schon angesteuert, erweist sich als relativ einfach!

Hallo!
Ich habe ebenfalls folgendes Problem:
Mein AD5292 lässt sich nicht einstellen!! :-(

Ich poste hier mal den C-Code, welcher das Timing beeinhaltet, ist 
ebenfalls zu Fuß!

Beste Grüße

von Gregor S (Gast)


Lesenswert?

@ Peter G. Also Hasst du erfolgreich beide Type (5290 und 5292) 
angesteuert? Mit reset commande am Anfang?

von Grudolf (Gast)


Lesenswert?

Also: Erfolgreich angesteuert habe ich nur den AD5290, beim 92 bin ich 
leider noch nicht auf eine Lösung gekommen.

von Gregor S (Gast)


Lesenswert?

Sequenz
0b0001000000000000
0b0001100000000011
0b0000011111000000
funktioniert nicht.
Ich warte noch an die Antword von AD.
Bis dann habe ich keine Idee mehr.

von Gregor S (Gast)


Lesenswert?

Auf erstem Blick, wichtiger Unterschied zwishen 90 und 92 ist, SPI SCK 
polaritat soll inverted sein.
Mit 90 positives Ubergang von CLK shifts neues Bit ein. 92 macht das mit 
negatives Ubergang.

von Peter G. punkt (grudolf) (Gast)


Lesenswert?

Ja, da hast du allerdings Recht.
Der 5290 ist Zustandsgesteuert, nicht flankengesteuert, das heißt, er 
shiftet das Bit in der Mitte des Datums rein. Das hab ich auch so 
programmiert.
Beim 92 wird bei der fallenden Clockflanke das Bit übernommen, danke für 
deine Erkenntnis, auf das hab ich noch garnicht gedacht, obwohl es nahe 
liegt, ich werde das mal probieren, die Daten bei der fallenden Flanke 
reinzushiften.

von Gregor S (Gast)


Lesenswert?

Ob hast du SPI "manuell" realisiert, dann must do es so realisieren, das 
das Bit um positive Flanke auf pin geschrieben ist, so es genug Zeit 
dauert, das 5290 dieses Bit auf negative Flanke lesen kann.
Du must Bit auf positive Flanke andern und es wird auf negative Flanke 
gelesen. So steht auch im Datasheet.

von Grudolf (Gast)


Lesenswert?

Ansteuerung AD5290 funktioniert ja schon...

von Gregor S (Gast)


Lesenswert?

Mein Fehler, das alles steht fur 5292, so wie es gescrieben ist. Fur 
5290 ist es umgekehrt.

von Grudolf (Gast)


Lesenswert?

Hab ich gemacht, aber geht noch immer nicht...
Hast du schon Fortschritte zu bemessen??

von Gregor S (Gast)


Lesenswert?

Noch nicht. Aber endlich habe ich Contact mit AD Engineer erhalten 
(durch Distributer). Er mochtet Oscillogramme von mir. Diese habe ich 
ihm gegeben.
Werde hier melden wenn etwas neuses passieren wird.

von Gregor S (Gast)


Lesenswert?

test

von Gregor S (Gast)


Lesenswert?

Endlich  hab ich die Losung gefunden. Man muss SPI einstellen:
- Idle state for clock is a low level
- Clock changes from idle to active
Morgen werde ich auch ein paar oscillogrammen hier stellen.

von Grudolf (Gast)


Lesenswert?

hallo!
Mann, danke, freu mich noch auf die Bilder morgen! Ich hoff, ich ersehe 
dann alles aus dem Timing! :-)

von Wichtla (Gast)


Lesenswert?

Was bist denn du für ein Troll. Die Ansteuerung des AD5292 ist doch ein 
Witz du Idiot.

von min (Gast)


Lesenswert?

@ Wichtla
Ihre Umgangsform läßt zu wünschen übrig. Es ist nicht jeder so 
superschlau, wie Sie...

von Gregor S (Gast)


Lesenswert?

Auf URL 
http://rapidshare.com/files/322041579/AD5292_troubleshooting.zip.html 
kann mann sich oscillogramme von SPI (SCLK und DIN) andschauen. Einige 
(not_working_xxx) sind vorher aufgenohmen werden, als ich die Losung 
nicht hegabt habe. Andere (working_xxx) sind funtionsfahig.
Ein kleiner Untershied ist auch letztes Bit von Config Wort, aber dieser 
ist gar nicht wichtig.
Was wichtig ist, ist das SCLK signal, wenn nichts ist gesendet, auf 0 
gestellt wird.

von Grudolf (Gast) (Gast)


Lesenswert?

Kannst du mir bitte die ZIP woanders posten?
Rapidshare geht bei mir nicht :-(
Bzw. hier die Bilder reintun, ansonsten halt eine E-Mail, wenns dir 
nichts ausmachen würde :-)

von Gregor S (Gast)


Lesenswert?

Versuch dann hier.

Diese zwei Oscillograme sind vorher Problem gelost war.

http://www4.slikomat.com/09/1217/qqi-not-wo.jpg
http://www4.slikomat.com/09/1217/cmg-not-wo.jpg

Diese zwei Oscillograme sind mit richtige SPI anstellungen.

http://www4.slikomat.com/09/1217/rq8-workin.jpg
http://www4.slikomat.com/09/1217/fv8-workin.jpg

von Grudolf (Gast) (Gast)


Lesenswert?

Okay, jetzt hab ich verstanden, was du meinst!
Dankesehr :-), wenns funktioniert, hast du mir sehr sehr geholfen :-)
Bin dir fast was schuldig ;-]

von Grudolf (Gast) (Gast)


Lesenswert?

Kleine Frage noch,

zur gesamten Operation:
Zuerst gibst du 0x3006 aus, und danach Command Zwei oder?

von Grudolf (Gast) (Gast)


Lesenswert?

Bitte um Entschuldigung: 0x1802

von Gregor S (Gast)


Lesenswert?

Ja, zuerst sende ich Commande #6 (0x1802) und danach kann man sofort 
RDAC schreiben mit Commande #1 (0bxx0001xxxxxxxxxx).
Ich verbrauche 20-TP gar nicht - aber ob du es brauchst, musst du zuerst 
Commande #6 0x1803 senden und dann Commande #1 und dann Commande #3. So 
habe ich es verstanden, aber weil ich das nicht versuchen habe bin ich 
nicht sicher. Man darf AD datablaten nicht vertrauen...

von Grudolf (Gast) (Gast)


Lesenswert?

Haha, danke :-)
Ja das 20-TP Register brauch ich auch nicht, mein Poti darf ruhig 
flüchtig sein :-)
Okay, dann danke ich dir bis jetzt mal, bei weiteren Problemen 
kontaktieren ich dich!

von Grudolf (Gast) (Gast)


Angehängte Dateien:

Lesenswert?

Hab jetzt mal den Baustein beschrieben, er ändert jedoch garnichts!
Hier mal meine Timings...

von Grudolf (Gast) (Gast)


Lesenswert?

Alles geht, alles sauber...
Die Beschaltung war ein klein wenig schuld :-D

von Gregor S (Gast)


Lesenswert?

Grudolf sagst du dass du jetzt erfolgreich bist? Deine Oscillograme 
sehen nicht so gut aus... Ich glaube du sollst ein bischen mehr Zeit 
warte nach negative Flanke von SCLK, bis wenn du DIN signal anderst.

von Grudolf (Gast)


Lesenswert?

Nein es funktioniert mit diesem Timing, hab es ausgemessen etc. ...

von activeMode j. (jad)


Lesenswert?

Hallo Grudolf,
könntest du mir dein Code zuposten lassen?
Ich würde dir dafür sehr Dankbar sein

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.