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
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
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
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
> 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.
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
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
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
Indem du die entsprechende SS-Leitung auf LOW ziehst. Jeder Baustein bekommt seine eigene Select-Leitung. Servus, Helmut.
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
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
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.
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
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.
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
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
gibt es eigentlich irgendwelche adapter, mit welchem man so einen ic auf dip8 umändern kann?
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
@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
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
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
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
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)...
Also ich weiß jetzt nicht spezifisch deine Anforderungen, aber ich hab den AD5290 schon angesteuert, erweist sich als relativ einfach!
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
@ Peter G. Also Hasst du erfolgreich beide Type (5290 und 5292) angesteuert? Mit reset commande am Anfang?
Also: Erfolgreich angesteuert habe ich nur den AD5290, beim 92 bin ich leider noch nicht auf eine Lösung gekommen.
Sequenz 0b0001000000000000 0b0001100000000011 0b0000011111000000 funktioniert nicht. Ich warte noch an die Antword von AD. Bis dann habe ich keine Idee mehr.
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.
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.
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.
Mein Fehler, das alles steht fur 5292, so wie es gescrieben ist. Fur 5290 ist es umgekehrt.
Hab ich gemacht, aber geht noch immer nicht... Hast du schon Fortschritte zu bemessen??
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.
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.
hallo! Mann, danke, freu mich noch auf die Bilder morgen! Ich hoff, ich ersehe dann alles aus dem Timing! :-)
@ Wichtla Ihre Umgangsform läßt zu wünschen übrig. Es ist nicht jeder so superschlau, wie Sie...
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.
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 :-)
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
Okay, jetzt hab ich verstanden, was du meinst! Dankesehr :-), wenns funktioniert, hast du mir sehr sehr geholfen :-) Bin dir fast was schuldig ;-]
Kleine Frage noch, zur gesamten Operation: Zuerst gibst du 0x3006 aus, und danach Command Zwei oder?
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...
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!
Hab jetzt mal den Baustein beschrieben, er ändert jedoch garnichts! Hier mal meine Timings...
Alles geht, alles sauber... Die Beschaltung war ein klein wenig schuld :-D
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.