Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema a rilevare il secondo MCP4728

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema a rilevare il secondo MCP4728

Messaggioda Foto Utentealien75 » 30 dic 2021, 17:26

In riferimento a https://www.electroyou.it/forum/viewtopic.php?f=56&t=85110&start=150
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.
Ultima modifica di Foto UtenteWALTERmwp il 28 giu 2022, 10:37, modificato 1 volta in totale.
Motivazione: Spostato "quì" da "Elettrotecnica generale"
Avatar utente
Foto Utentealien75
1 1 4 8
Sostenitore
Sostenitore
 
Messaggi: 588
Iscritto il: 31 lug 2011, 14:08

0
voti

[2] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto UtenteGioArca67 » 30 dic 2021, 20:11

alien75 ha scritto:Se inserisco il secondo MCP e carico il seguente codice:


Mi sono fermato qui a leggere...

Non si fa così: cambia una cosa per volta, altrimenti non ci capirai mai nulla... o con un certo HW cambi il SW oppure mantieni il SW e cambi l'HW.

alien75 ha scritto: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.

Bene...
ma insieme funzionano?
Se cambi il SW come lo capisci?

Sul manuale c'è scritto come modificare l'indirizzo.
Prova a guardare, poi ne riparliamo.
Avatar utente
Foto UtenteGioArca67
4.570 4 6 9
Master EY
Master EY
 
Messaggi: 4591
Iscritto il: 12 mar 2021, 9:36

0
voti

[3] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utentelelerelele » 1 gen 2022, 17:18

hai provato a mettere prima uno e poi l'altro, senza cambiare niente?
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

1
voti

[4] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utenteboiler » 1 gen 2022, 18:39

alien75 ha scritto:Evidentemente devo configurare il secondo MCP in modo che risponda sulla porta 0x61, ma non so come fare.


Il datasheet, questo acerrimo nemico...

MCP4728_addr.PNG


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

0
voti

[5] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utentelelerelele » 2 gen 2022, 15:26

A me sembra chiaro il datasheets, gli ultimi tre bit dello slave address identificano il device corretto.
vero Foto Utentealien75?

saluti.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[6] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utentealien75 » 27 giu 2022, 19:54

Bene grazie, ho letto il datasheet.
Ora ho capito che byte inviare al dispositivo tramite I2C ma non capisco il come inviare questi byte,
nel senso che non capisco che libreria usare e che codice usare per fare questo: in internet non trovo nessun tutorial che parla di questo ne su youtube e ne tutorial scritto.
Ci vogliono forse le funzioni di wire.h?
Aiutatemi in questo senso per favore.
Avatar utente
Foto Utentealien75
1 1 4 8
Sostenitore
Sostenitore
 
Messaggi: 588
Iscritto il: 31 lug 2011, 14:08

2
voti

[7] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utenterugweri » 27 giu 2022, 21:15

alien75 ha scritto: in internet non trovo nessun tutorial che parla di questo ne su youtube e ne tutorial scritto.


Un giorno di questi io mi sparo.
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1366
Iscritto il: 25 nov 2016, 18:46

1
voti

[8] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto UtenteEtemenanki » 27 giu 2022, 22:41

rugweri ha scritto:Un giorno di questi io mi sparo.

No, dai, abbi pieta' di Admin, che dovra' poi pulire tutto ... perche tirare via il sangue dallo sfondo bianco della chat e' di un difficile, che neppure te lo immagini :-P

(scusa, non ho resistito ;-) )
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
9.507 3 6 10
Master
Master
 
Messaggi: 5938
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[9] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto Utentelelerelele » 28 giu 2022, 8:23

alien75 ha scritto:Bene grazie, ho letto il datasheet.
Ora ho capito che byte inviare al dispositivo tramite I2C ma non capisco il come inviare questi byte,
Pensa che io ho controllato sensori I2C con un micro che non la prevedeva.... scrivendomi le librerie ed implementando l'hardware, il segreto è imparare il protocollo.

A parte questo, che è stata una provocazione, devi comunque impararti il protocollo I2C, (è sempre buona cosa conoscere cio che si ha in mano), poi tramite il microcontrolore che usi, vai a leggere il datasheets, (che hai gia letto, pare), e sopra c'è scritto come implementare la porta I2C.

non ci credo che non si trovi nulla di I2C sul web, link, link, link ,eccc.

(Senza fatica e tanto studio non si fa niente).

saluti.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

1
voti

[10] Re: Problema a rilevare il secondo MCP4728

Messaggioda Foto UtenteWALTERmwp » 28 giu 2022, 10:32

Foto Utentealien75, non so gli altri ma io ho qualche problema a stabilire l'associazione tra codice, numero di MPC4728 collegati e riscontri ottenuti.
Come già stato osservato è importante procedere con ordine.

Specifico che la discussione della quale riporti il link non l'ho letta quindi potrei scrivere delle ovvietà o peggio; inoltre ho dato un'occhiata veloce al datasheet, quindi potrei aver scritto qualcosa di errato, nel caso auspico che altri mi rettifichino.

Ti pongo qualche domanda per capire cosa hai capito.
Il primo codice del primo post di questo thread che cosa dovrebbe fare ?
Il secondo codice invece ?
Quando scrivi
Codice: Seleziona tutto
mcp2.begin(0x61)
cosa pensi di ottenere da questa funzione ?

Tieni presente che comunicando su un bus(o su una linea seriale come la I2C) occorre, in generale, che ogni device ad esso collegato(in tal caso i tuoi MPC) abbia un indirizzo univoco; per averlo, l'indirizzo deve essere assegnato.
Questo, nel caso dello MPC, viene scritto nella EEPROM dello stesso MPC tramite una istruzione che il master(un microcontrollore, un Arduino, ...) può inviare tramite linea seriale(la I2C), rispettando il protocollo(le regole) di comunicazione previste per questi "aggeggi".
Il master può farlo controllando anche lo stato di un "filo" dedicato(LDAC, pin 4), che da lui è connesso ad ogni MPC(non è la linea seriale I2C).
Se non è stata fatta questa inizializzazione(scrittura nello MPC dell'indirizzo, diverso per ogni MPC che si vuole gestire ...) gli MPC che utilizzi(forse per come hai testato i chip usando il primo codice) probabilmente hanno tutti lo stesso indirizzo.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8985
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti