Potentiomètres Digitale AD8400

Bonjour à toutes et à tous.

J'essaye d'envoyer des ordres avec un Arduino Nano à un Potentiomètres Digitale AD840

Le schéma de câblage :

Ce code fonctionne bien avec des mcp410 de 10,50 et 100K :

#include <Wire.h> 
#include <SPI.h>

const int potard = 8;  
byte valeur;

void setup(){

  SPI.begin();

}

void loop(){

    digitalWrite(potard, LOW);
    SPI.transfer(0x11);
    SPI.transfer(valeur);
    digitalWrite(potard, HIGH);
    delay(2000);
    valeur++;


}

Mais impossible de faire varié la valeur avec le AD8400 je pense que c'est l'adresse 0x11 qui n'est pas bonne ? non ?

Si vous pouviez m'aiguiller sur l'erreur

Merci

Bonjour

Il n'est pas surprenant que le code prévu pour un MCP410 de MIcrochip ne fonctionne pas pour un AD8400 d'Analog Device !!

Il semble d'après la doc que l'adresse soit sur 2 bits

Pour l'AD8400 qui ne comporte qu'un seul potentiometre dans le boitier les deux bitsd'adresse sont à zéro (datasheet page 20 "Theory of Operation.") Donc adresse = 002

Essayer d'envoyer 0x00 mais le chronogramme suivant montre un envoi de 10 bits et non 2 fois 8 bits
timing.png

timing.png

Bonjour,

C'est le /CS (chip select) que tu dois mettre à zéro. La broche SDI sert aux données série.
Dans ton cas: const int potard = 10;

Pour l'adresse, lis la notice de l'AD8400.

Merci pour vos réponses,

J'ai modifier le code const int potard = 10; sans résultat
j'ai également intervertit le 8 et le 10 et rechanger le const int potard = 8;
j'ai essayer en parallèle SPI.transfer(0x00); et de le commenté sans succès.

La référence exact est AD8400ARZ1 , sur la notice il est indiquer que c'est un 8bit.

Il faut essayer de faire en SPI l'envoi de 10 bits sont les deux premiers sont à 0(adresse) et les 8 suivants représentent la position à donner au 'curseur'

J'ai essayer

    digitalWrite(potard,LOW );
    SPI.transfer(0x00);
    SPI.transfer(0x00);
    SPI.transfer(255);
    digitalWrite(potard, HIGH);

En modifiant le 2eme SPI transfert et la valeur 255 le potentiometre change de valeur...

al1fch:
Il faut essayer de faire en SPI l'envoi de 10 bits sont les deux premiers sont à 0(adresse) et les 8 suivants représentent la position à donner au 'curseur'

il faut l'envoyer en 2 lignes ?

digitalWrite(potard,LOW );
SPI.transfer(0x00);
SPI.transfer(0x00);
digitalWrite(potard, HIGH);

Bonsoir
lire et adapter ce topic
J'ai juste rapidement parcouru
mais les réponses données seront surement "bénéfiques" dans ton cas :grin:

J'ai essayer ce code cet apres midi mais les spi "spi" sont en minuscule et non en SPI, j'ai donc modifier les 3 lignes mais rien ne s'affiche dans le terminal,

C'est une bibliothèque différente ?

Bonjour

Il manquait le

SPI.begin(); sur la page SPID digital pot using AD8402 - Interfacing - Arduino Forum

J'ai modifier les "spi en "SPI" et ça fonctionne

#include <SPI.h>//#include <Spi.h>

const int slaveSelectPin = 10;
const byte channel=0;

void setup(){
 Serial.begin(9600);
 pinMode(slaveSelectPin, OUTPUT);
 SPI.begin();
}

void loop(){
//for (byte channel = 1; channel < 2; channel++){
 for (byte level = 0; level < 255; level++){
  digitalPotWrite(channel, level);
  delay(10);
  Serial.print(0+channel);
  Serial.print("  ");
  Serial.println(0+level);
  delay(100);
 }
 for (byte level = 0; level < 255; level++){
  digitalPotWrite(channel, 255 - level);
  delay(10);
  Serial.print(0+channel);
  Serial.print("  ");
  Serial.println(255-level);
 }  
 delay(500);
//}
}

void digitalPotWrite(byte address, byte value){
 digitalWrite(slaveSelectPin, LOW);
 SPI.transfer(address); // Spi.transfer(address);
 SPI.transfer(value);    // Spi.transfer(value);
 digitalWrite(slaveSelectPin, HIGH);
}

J'ai commenté le channel puisque c'est un AD8400 (et non un AD8403 avec plusieurs digital pot)

la valeur du multimètre ne change que lorsque la variable "level " est entre 200 et 255.

il ne doit prendre ne compte que le debut de la variable level.

Bon ba quand ça veut pas, peut être le AD8400 qui est hs.

J'en ai commander un autre ... à voir ...

Bonjour

J'ai reçu le nouveau AD8400 semaine derniere .

j'ai essayer hier soir sans succes...

Donc ça vient du code...

al1fch:
[...]
Essayer d'envoyer 0x00 mais le chronogramme suivant montre un envoi de 10 bits et non 2 fois 8 bits
[...]

Quelle est la bonne syntaxe pour envoyer 10bits au lieu de 2x 8bits ?

@+

Bonjour

Probablement faire un 'SPI software' avec shiftout() -> Référence
Faire une boucle poussant les 10 bits d'un après l'autre vers la sortie et produisant à chaque tour une impulsion d'horloge.