ho inserito il secondo MCP4728 con lo scopo di comandare gli altri TDA.
Se inserisco il seguente codice:
- Codice: Seleziona tutto
#include <Wire.h>
int num=0;
void setup()
{
Wire.begin(0x60);
Serial.begin(9600);
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);
delay(500);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
{
Serial.println("No I2C devices found\n");
Serial.println(num);
++num;
}
else
Serial.println("done\n");
}
Facendo una scansione di un solo MCP (quello nuovo appena arrivato) senza collegare l'altro mi da come risultato che lo rileva senza problemi, quindi funziona.
Se inserisco il secondo MCP e carico il seguente codice:
- Codice: Seleziona tutto
#include <MD_AD9833.h>
#include <SPI.h>
#include <Adafruit_MCP4728.h>
#include <Wire.h>
#include <Adafruit_BusIO_Register.h>
#include <TimerOne.h>
Adafruit_MCP4728 mcp;
Adafruit_MCP4728 mcp2;
void play(float fO, int volA, char ta, float fA, int volB, char tb, float fB, int volC, char tc);
void read_USB();
// 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 2
#define FSYNC3 3
#define FSYNC4 1
#define FSYNC5 0
int x;
int vol=2100;
float att=0;
float sustain=1000;
float decay=1;
int volmaster=4000;
#define MAX_BUFFER 64
char buffer[MAX_BUFFER];
int elemento_buffer;
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("OK!");
// Try to initialize!
if (!mcp.begin(0x60)) {
Serial.println("Failed to find MCP4728 chip1");
while (1) {
delay(10);
}
}
// Try to initialize!
if (!mcp2.begin(0x61)) {
Serial.println("Failed to find MCP4728 chip2");
while (1) {
delay(10);
}
}
mcp.begin(0x60);
mcp2.begin(0x61);
//Timer1.initialize(2000000); //testa se ci sono comandi sulla USB ogni 1msec
//Timer1.attachInterrupt(read_USB); // read USB to run every 0.15 seconds
}
void loop()
{
}
ottengo il seguente messaggio:
- Codice: Seleziona tutto
OK!
Failed to find MCP4728 chip2
Nessuno mi puo' aiutarea capire perché succede questo?
Evidentemente devo configurare il secondo MCP in modo che risponda sulla porta 0x61, ma non so come fare.

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)









