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.
Problema a far funzionare l'MCP4728
0
voti
Ho messo due canali con TDA e rilevo i seguenti valori sul secondo canale:
POT = 2,2K
R1 = R2 = 2,7K
- 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
0
voti
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.
.
0
voti
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:
Con quel valore impostato sul pin 6 ottengo lo stesso valore di uscita del valore di ingresso.
- 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.
0
voti
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?
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?
0
voti
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:
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.
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.
Chi c’è in linea
Visitano il forum: Nessuno e 27 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




