Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema a far funzionare l'MCP4728

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[141] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto UtenteGioArca67 » 15 nov 2021, 15:45

Dagli AD9833 escono le frequenze impostate da sketch?
Senza i DAC metti 2 TDA , 1 potenziometro (con le R sopra e sotto) ciascuno sul pin 6 e riprova.
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[142] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto Utentealien75 » 16 nov 2021, 14:16

Ho messo due canali con TDA e rilevo i seguenti valori sul secondo canale:

Codice: Seleziona tutto
POT a MIN = 1,75V
POT pos. CENTRO = 2,72V
POT a MAX = 3,12V


POT = 2,2K
R1 = R2 = 2,7K
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[143] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto UtenteGioArca67 » 16 nov 2021, 14:50

Ma questi sono i valori di tensione al pin 6 del tda?
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[144] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto Utenteboiler » 16 nov 2021, 15:35

Presumibilmente sì, glielo avevo chiesto io per verificare che la tensione in ingresso fosse quella che ci sì aspetta.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

0
voti

[145] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto UtenteGioArca67 » 16 nov 2021, 15:56

Con R1 e T2 così alte non riuscirai a fare fare l'escursione completa al TDA. Prova con 270 - 330 ohm circa
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[146] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto Utentealien75 » 16 nov 2021, 19:31

GioArca67 ha scritto:Ma questi sono i valori di tensione al pin 6 del tda?


Quei valori sopra sono quelli del pin 6 del secondo TDA in esame (il primo lo abbiamo già testato e non si comporta come dovrebbe).
Invio in allegato la foto della traccia del segnale di uscita del secondo TDA, tenendo conto che il segnale di ingresso rispettivo è di 1KHz testatri e controllati.
Riporto pure il codice che mi ha permesso di impostare 500Hz sul primo AD9833 ed il secondo impostato a 1KHz.
Codice: Seleziona tutto
#include <MD_AD9833.h>
#include <SPI.h>
#include <Adafruit_MCP4728.h>
#include <Wire.h>

Adafruit_MCP4728 mcp;

int pinLed = 3;





// Pins for SPI comm with the AD9833 IC
#define DATA  11  ///< SPI Data pin number
#define CLK   7  ///< SPI Clock pin number
#define FSYNC 6  //(FSYNC in AD9833 usage)
#define FSYNC1 5
#define FSYNC2 3
#define FSYNC3 2
#define FSYNC4 1
#define FSYNC5 0


 
MD_AD9833  O(DATA, CLK, FSYNC);
MD_AD9833  A(DATA, CLK, FSYNC1);
MD_AD9833  B(DATA, CLK, FSYNC2);
MD_AD9833  C(DATA, CLK, FSYNC3);
MD_AD9833  D(DATA, CLK, FSYNC4);
MD_AD9833  E(DATA, CLK, FSYNC5);

void setup(void)
{
  O.begin();
  A.begin();
  B.begin();
  C.begin();
  D.begin();
  E.begin(); 
  Serial.begin(115200);
  while (!Serial)
    delay(10); // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("Adafruit MCP4728 test!");

  // Try to initialize!
  //mcp.begin();
  /*if (!mcp.begin(0x60)) {
    Serial.println("Failed to find MCP4728 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.print("Imposto i canali...");
  mcp.setChannelValue(MCP4728_CHANNEL_A, 2500);
  mcp.setChannelValue(MCP4728_CHANNEL_B, 404);
  mcp.setChannelValue(MCP4728_CHANNEL_C, 1024);
  mcp.setChannelValue(MCP4728_CHANNEL_D, 500);
  Serial.println(" Fatto");   */         
}


void loop(void)
{
    O.setFrequency(MD_AD9833::CHAN_0, 500);
    O.setMode(MD_AD9833::MODE_SINE);
    A.setFrequency(MD_AD9833::CHAN_0, 1004);
    A.setMode(MD_AD9833::MODE_SINE);
    /*B.setFrequency(MD_AD9833::CHAN_0, 500);
    B.setMode(MD_AD9833::MODE_SINE);
    C.setFrequency(MD_AD9833::CHAN_0, 5000);
    C.setMode(MD_AD9833::MODE_SINE);
    D.setFrequency(MD_AD9833::CHAN_0, 1000);
    D.setMode(MD_AD9833::MODE_SINE);
    E.setFrequency(MD_AD9833::CHAN_0, 1500);
    E.setMode(MD_AD9833::MODE_SINE);*/ 
}


La componente continua è di 5V circa aggiornati rispetto alla foto sopra: se vario il potenziometro varia l'ampiezza della cresta sinusoidale sopra la componente continua.
Ho constato che il TDA non essendo impostato con dei valori di partitore opportuni nel pin 6 non può riportare in uscita valori di ampiezza pari ai valori di ingresso con potenziometro messo al massimo
Non capisoc perché l'oscilloscopio mi visualizza pure la componente continua pur facendo la misura dopo la capacità che dovrebbe invece filtrarla.
Che ne pensate di questo comportamente?
Il TDA mi sembra ok.
In ultima analisi invio pure la traccia del segnale di ingresso (traccia blue) ed il segnale di uscita (traccia gialla).
Il segnale di uscita con potenziometro spalancato al massimo non può raggiungere il valore del segnale di ingresso.

.
Allegati
2_segnali.jpg
segnale_uscita.jpg
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[147] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto Utentealien75 » 16 nov 2021, 20:14

Togliendo le R1 ed R2 e lasciano dolo il potenziometro da 2,2K ed impostandolo in modo che sul pin 6 ci sia una tensione di 3,5V ottengo i seguenti valori:

Codice: Seleziona tutto
Vin TDA = 250mVpicco
Vout TDA = 250mVpicco


Con quel valore impostato sul pin 6 ottengo lo stesso valore di uscita del valore di ingresso.
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[148] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto UtenteGioArca67 » 16 nov 2021, 20:16

Forse volevi dire 4,5V e non 3,5?

Ma hai provato lo schema di test del datasheet con condensatore da 1uF in serie all'uscita e resistenza da 10kohm fra l'"uscita" del condensatore e massa?
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[149] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto Utentealien75 » 21 nov 2021, 11:00

Si la resistenza da 10K l'ho messa.
Ho provato l'MCP da solo e funziona: erano solo dei contatti messi male.
Ora funziona l'MCP pure messo dentro la mille fori assieme agli altri chip.
Ho inserito il seguente codice:

Codice: Seleziona tutto
#include <MD_AD9833.h>
#include <SPI.h>
#include <Adafruit_MCP4728.h>
#include <Wire.h>

Adafruit_MCP4728 mcp;

int pinLed = 3;
int x;




// Pins for SPI comm with the AD9833 IC
#define DATA  11  ///< SPI Data pin number
#define CLK   7  ///< SPI Clock pin number
#define FSYNC 6  //(FSYNC in AD9833 usage)
#define FSYNC1 5
#define FSYNC2 3
#define FSYNC3 2
#define FSYNC4 1
#define FSYNC5 0



MD_AD9833  O(DATA, CLK, FSYNC);
MD_AD9833  A(DATA, CLK, FSYNC1);
MD_AD9833  B(DATA, CLK, FSYNC2);
MD_AD9833  C(DATA, CLK, FSYNC3);
MD_AD9833  D(DATA, CLK, FSYNC4);
MD_AD9833  E(DATA, CLK, FSYNC5);

void setup(void)
{
  O.begin();
  A.begin();
  B.begin();
  C.begin();
  D.begin();
  E.begin();
  Serial.begin(115200);
  while (!Serial)
    delay(10); // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("Adafruit MCP4728 test!");

  // Try to initialize!
  if (!mcp.begin(0x60)) {
    Serial.println("Failed to find MCP4728 chip");
    while (1) {
      delay(10);
    }
  }
  //mcp.begin(0x60);
}


void loop(void)
{
  for (x = 500; x < 4501; x++) {
    mcp.setChannelValue(MCP4728_CHANNEL_A, x);
    mcp.setChannelValue(MCP4728_CHANNEL_B, x);
    mcp.setChannelValue(MCP4728_CHANNEL_C, x);
    mcp.setChannelValue(MCP4728_CHANNEL_D, x);
  }
  for (x = 4500; x > 501; x--) {
    mcp.setChannelValue(MCP4728_CHANNEL_A, x);
    mcp.setChannelValue(MCP4728_CHANNEL_B, x);
    mcp.setChannelValue(MCP4728_CHANNEL_C, x);
    mcp.setChannelValue(MCP4728_CHANNEL_D, x);
  }
  Serial.println("Fatto!");
  Serial.println(" Fatto");
  O.setFrequency(MD_AD9833::CHAN_0, 500);
  O.setMode(MD_AD9833::MODE_SINE);
  A.setFrequency(MD_AD9833::CHAN_0, 1004);
  A.setMode(MD_AD9833::MODE_SINE);
  B.setFrequency(MD_AD9833::CHAN_0, 500);
  B.setMode(MD_AD9833::MODE_SINE);
  C.setFrequency(MD_AD9833::CHAN_0, 5000);
  C.setMode(MD_AD9833::MODE_SINE);
  D.setFrequency(MD_AD9833::CHAN_0, 1000);
  D.setMode(MD_AD9833::MODE_SINE);
  E.setFrequency(MD_AD9833::CHAN_0, 1500);
  E.setMode(MD_AD9833::MODE_SINE);
}


Noto che i rispettivi segnali di uscita dei vari TDA variano di ampiezza continuamente come da codice, quindi
funziona pure collegando le uscite dell'MCP all'ingresso dei 4 TDA.
Ora non mi resta che comprare un altro MCP dato che l'altro non funziona, per poter completare la scheda.
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

[150] Re: Problema a far funzionare l'MCP4728

Messaggioda Foto UtenteGioArca67 » 21 nov 2021, 11:28

Bravo!!
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti