[RESOLU] DAC6574 10 bits,10 broches en i2c

je suis actuellement en train de faire fonctionné un code, il devrais fonctionner avec n'importe quelle dac et juste avec la bibliothéque "wire" or le dernier sur le quel je bloque c'est celui ci le DAC, DAC6574IDGS. malheureusement je n'arrive pas à le faire fonctionné, c'est pour cela que vous demande de l'aide merci a qui conque m'aidera .

la datasheet avec le montage:
je n'ai pas branché A0 et A1 pour qu'il reste à 0 dans l'adresse

[datasheet du produit]
(https://www.ti.com/lit/ds/symlink/dac6574.pdf?ts=1713874162247&ref_url=https%253A%252F%252Fwww.google.com%252F)

#include <Wire.h>

#define DAC_ADDRESS 0b1001000 // Adresse I2C du DAC, à remplacer par l'adresse de votre DAC

void setup() {
  Serial.begin(9600);
  Wire.begin(); // Initialisation de la communication I2C
}

void loop() {
  for (int value=0 ; value<4095;value++){
  // Exemple de valeur à envoyer au DAC (entre 0 et 1023 pour un DAC 10 bits)
  int valueToSend = 255; // Vous pouvez modifier cette valeur selon vos besoins
  // Envoi de la valeur au DAC
  sendToDAC(valueToSend);

  Serial.print("Valeur envoyée au DAC : ");
  Serial.println(valueToSend);
  
  delay(200); // Attente d'une seconde avant d'envoyer une nouvelle valeur
}
}

void sendToDAC(int value) {
  Wire.beginTransmission(DAC_ADDRESS); // Démarre la transmission vers l'adresse du DAC
  Wire.write(0b1001000); // Envoie la commande de configuration des DAC
  Wire.write(highByte(value)); // Envoie le byte de poids fort
  Wire.write(lowByte(value)); // Envoie le byte de poids faible
  Wire.endTransmission(); // Termine la transmission
}

Tu devrais lire les règles de bonne conduite du forum qui indiquent comment publier sa demande.
C'est là :

Il faut formatter ton code (CTRL D dans l'IDE) et le copier sur le forum en mettant des balises CODE qui aident pour la lecture plus facile du code. Sans ça, tu risques d'avoir très peu de monde qui lira ta demande et donc moins de réponses qu'avec une demande "propre".

De plus, si

alors tout devrait fonctionner. Précise bien ton montage, comment c'est alimenté, etc. Comment sais-tu que l'adresse est bonne ? Comment sais-tu que ça ne fonctionne pas ?

datasheet pages 13-18 : adresse i2c de 0x4C à 0x4F suivant config A1 A0
b10001000 est pour le "i2c broadcast addressing"
un scani2c
tester avec une biblio dac6574

1 Like

Comme déjà demandé, merci de présenter le code correctement.

Tu as une erreur là-dedans.
Tu envoies une deuxième fois l'adresse à la place de l'octet de contrôle.
image
Et attention en mode broadcast les fonctionnalités sont limitées.

j'ai rectifié l'adresse de base en 01010000 mais rien de change j'ai essayé différente adresse et commande mais ça ne change rien de plus je ne comprend pas très bien l'explication de la datasheet je la trouve peux claire

Bonjour ludyto

Je plussoie @chrislemire

Charges ce programme de scanner i2C et mets ta console à 9600:

 #include <Wire.h>

 void setup()
 {
	 Wire.begin();

	 Serial.begin(9600);
	 while (!Serial);             // Leonardo: wait for serial monitor
	 Serial.println("\nI2C Scanner");
 }


 void loop()
 {
	 byte error, address;
	 int nDevices;

	 Serial.println("Scanning...");

	 nDevices = 0;
	 for(address = 1; address < 127; address++ )
	 {
		 // The i2c_scanner uses the return value of
		 // the Write.endTransmisstion to see if
		 // a device did acknowledge to the address.
		 Wire.beginTransmission(address);
		 error = Wire.endTransmission();

		 if (error == 0)
		 {
			 Serial.print("I2C device found at address 0x");
			 if (address<16)
			 Serial.print("0");
			 Serial.print(address,HEX);
			 Serial.println("  !");

			 nDevices++;
		 }
		 else if (error==4)
		 {
			 Serial.print("Unknown error at address 0x");
			 if (address<16)
			 Serial.print("0");
			 Serial.println(address,HEX);
		 }
	 }
	 if (nDevices == 0)
	 Serial.println("No I2C devices found\n");
	 else
	 Serial.println("done\n");

	 delay(5000);           // wait 5 seconds for next scan
 }

Tu devrai voir l'adresse de ton DAC (ici celui de mon affochage LCD)

Scanning...
I2C device found at address 0x27  !
done

Scanning...
I2C device found at address 0x27  !
done

A+
Cordialement
jpbbricole

1 Like

Ce n'est pas bon.
Format d'échange décrit page 16
L'adresse de base, comme indiqué par @chrislemire, est comprise entre 0x4C et 0x4F suivant comment est configurée ta carte.
Ensuite tu as l'octet de contrôle décrit page 14 et 15 suivi des données.
Si tu veux faire du broadcast il faut utiliser l'adresse 0x48 et pour l'octet de contrôle il faut regarder dans le bas du tableau page 15.

1 Like

hello

le titre de la data sheet
QUAD, 10-BIT, LOW-POWER, VOLTAGE OUTPUT,
I2C :wink: INTERFACE DIGITAL-TO-ANALOG CONVERTER

page 16 de la data sheet

A0 =I2C Address Pin :wink:
A1 = I2C Address Pin :wink:

edit: j'arrive un peu tard :woozy_face:

Il faudrait quand t'assurer que les lignes A0 et A1 sont tirées à la masse si elles sont "en l'air". Je n'ai rien vu concernant ce point dans la doc du DAC.

The first five
bits (MSBs) of the address are factory preset to 10011. The next two bits of the address are the device select
bits A1 and A0. The A1, A0 address inputs can be connected to VDD or digital GND, or can be actively driven by
TTL/CMOS logic levels. The device address is set by the state of these pins during the power-up sequence of
the DAC6574.

ils ne doivent pas être NC

Oui, ce que je voulais dire c'est qu'il n'était nulle part mentionné que l'on pouvait laisser les broches en l'air.

Bonjour

Une "patte d'entrée en l'air" c'est comme une antenne qui va recevoir tous les "parasites" qui traînent aux alentours => il y aura une tension non nulle sur cette patte en l'air, et donc, il n'y aura pas 0V <=> pas à la masse.

la carte arduino utilisée ? le circuit DAC puce ou module ?
il faut les résistances de pullup sur l'i2c
tout le monde répond sauf le demandeur

c'est bon c'est résolue le probleme était l'adresse de commande elle fonctionne sur du 16bits et moi je le faisais en 8 bits alors impossible merci à vous et en branchant les pin a0 et a1

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.