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

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

Messaggioda Foto Utentealien75 » 25 ott 2021, 13:14

Mi dicono che c'è un errore se risponde a 0x50, ma non capisco quale?
Se per assurdo provassi a comunicare con l'MCP tramite lo 0x50 che succede?
Vorrei provare a comunicare sullo 0x50 e vediamo per assurdo che succede.
Che dite?
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

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

Messaggioda Foto UtenteGioArca67 » 25 ott 2021, 13:19

Chi lo dice?

Prova, lo devi mettere nell'inizializzazione
mcp.begin(0x50);
Avatar utente
Foto UtenteGioArca67
4.585 4 6 9
Master EY
Master EY
 
Messaggi: 4594
Iscritto il: 12 mar 2021, 9:36

0
voti

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

Messaggioda Foto Utentealien75 » 28 ott 2021, 19:01

Ho trovato in rete questo codice:

Codice: Seleziona tutto
#include <Wire.h>
#include <MCP4728.h>

MCP4728 dac;
int minutes = 60;
int analogPin = A1;

void setup()
{
Serial.begin(115200); // initialize serial interface for print()

Wire.begin(0x50);
dac.attach(Wire, 14);
dac.readRegisters();

dac.selectVref(MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::INTERNAL_2_8V, MCP4728::VREF::INTERNAL_2_8V);
dac.selectPowerDown(MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_500KOHM, MCP4728::PWR_DOWN::GND_500KOHM);
dac.selectGain(MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X2, MCP4728::GAIN::X2);
dac.analogWrite(MCP4728::DAC_CH::A, 0);
dac.analogWrite(MCP4728::DAC_CH::B, 4000);
dac.analogWrite(MCP4728::DAC_CH::C, 0);
dac.analogWrite(MCP4728::DAC_CH::D, 0);

dac.enable(true);

dac.readRegisters();
delay(5000);
dac.analogWrite(MCP4728::DAC_CH::B, 4000);
delay(10000);

}


int cur = 4000;
void loop()
{
dac.analogWrite(MCP4728::DAC_CH::B,(cur));

}



In teoria questo sopra avendo inserito la porta 0x50 su Wire.begin(0x50); dovrebbe darmi 4V sul canale B
ma in realtà mi da 0V.
Cosa c'è che non funziona?
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

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

Messaggioda Foto Utentealev » 28 ott 2021, 19:21

Prova a fare come ti è stato chiesto nel [62]
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

0
voti

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

Messaggioda Foto Utentealien75 » 28 ott 2021, 20:10

Ho aggiunto 0x50 a wire.begin() del codice dello scanner ed ottengo:

Codice: Seleziona tutto
I2C device found at address 0x60


Incomincio a capire che se inizializzo a 0x50 trovo una porta in 0x60, dico giusto?
Correggetemi se sbaglio.
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

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

Messaggioda Foto UtenteGioArca67 » 28 ott 2021, 21:33

Specificando un indirizzo nella begin di Wire, hai impostato lo YUN come slave sul bus I2C...

Io intendevo di specificarlo nella begin di mcp....

Hai i pull-up verso i 5V sulle linee del bus?
Avatar utente
Foto UtenteGioArca67
4.585 4 6 9
Master EY
Master EY
 
Messaggi: 4594
Iscritto il: 12 mar 2021, 9:36

0
voti

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

Messaggioda Foto Utentealien75 » 28 ott 2021, 22:17

Si ho le resistenze di pull-up verso i 5V sui bus.
Compilando mi dice che mcp non ha membri di nome begin().
Funziona solo la Wire.begin(0x50).
Avatar utente
Foto Utentealien75
1 1 4 7
Sostenitore
Sostenitore
 
Messaggi: 597
Iscritto il: 31 lug 2011, 14:08

0
voti

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

Messaggioda Foto UtenteGioArca67 » 29 ott 2021, 9:09

Ma stai usando la libreria Adafruit?
Cioè questo codice?

Codice: Seleziona tutto
// Basic demo for configuring the MCP4728 4-Channel 12-bit I2C DAC
#include <Adafruit_MCP4728.h>
#include <Wire.h>

Adafruit_MCP4728 mcp;

void setup(void) {
  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)) {     //indirizzo del MCP4728, da 0x60 a 0x68, default se omesso a 0x60
    Serial.println("Failed to find MCP4728 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MCP4728 chip found");
  mcp.setChannelValue(MCP4728_CHANNEL_A, 4095);
  mcp.setChannelValue(MCP4728_CHANNEL_B, 2048);
  mcp.setChannelValue(MCP4728_CHANNEL_C, 1024);
  mcp.setChannelValue(MCP4728_CHANNEL_D, 0);
}

void loop() { delay(1000); }

Altrimenti se cambi le carte in tavola come si fa a seguirti?
Avatar utente
Foto UtenteGioArca67
4.585 4 6 9
Master EY
Master EY
 
Messaggi: 4594
Iscritto il: 12 mar 2021, 9:36

1
voti

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

Messaggioda Foto UtenteGioArca67 » 29 ott 2021, 9:43

Se cerchi su GitHub la libreria che usavi (non la Adafruit, ma quella del post [63]) e la esamini ti accorgi che:
1) non c'è un metodo begin() quindi il compilatore giustamente segnala l'errore

2) usa come base l'indirizzo 0x60, infatti in fondo inizializza così
Codice: Seleziona tutto
    const uint8_t I2C_ADDR {0x60};
    uint8_t addr_ {I2C_ADDR};
    uint8_t pin_ldac_;

e dove deve parlare col DAC fa, ad es.
Codice: Seleziona tutto
    uint8_t singleWrite(uint8_t ch)
    {
        wire_->beginTransmission(addr_);
        wire_->write((uint8_t)CMD::SINGLE_WRITE | (ch << 1));
        wire_->write(((uint8_t)eep_[ch].vref << 7) | ((uint8_t)eep_[ch].pd << 5) | ((uint8_t)eep_[ch].gain << 4) | highByte(eep_[ch].data));
        wire_->write(lowByte(eep_[ch].data));
        return wire_->endTransmission();
    }

Quindi usa beginTransmission() di Wire, la quale prende in input l'indirizzo del dispositivo col quale vuole parlare.

3) È inutile che provi a casaccio. Usa un codice non troppo complesso ed esaminalo in dettaglio per capire come fa cosa.
Avatar utente
Foto UtenteGioArca67
4.585 4 6 9
Master EY
Master EY
 
Messaggi: 4594
Iscritto il: 12 mar 2021, 9:36

0
voti

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

Messaggioda Foto UtenteIlGuru » 29 ott 2021, 11:05

GioArca67 ha scritto:È inutile che provi a casaccio. Usa un codice non troppo complesso ed esaminalo in dettaglio per capire come fa cosa.

Ma questo è totalmente contrario alla filosofia arduinista.
Chiunque può scrivere codice per microcontrollore e realizzare schede embedded. 1 vale 1
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti