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
#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
Tu as une erreur là-dedans.
Tu envoies une deuxième fois l'adresse à la place de l'octet de contrôle.
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
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
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.
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.
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.
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