Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema a pilotare un MCP4251 con Arduino Due

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

-1
voti

[1] Problema a pilotare un MCP4251 con Arduino Due

Messaggioda Foto Utentealien75 » 30 apr 2025, 18:29

Salve ho collegato un MCP4251 ad un ARDUINODUE in questo modo:
Connettore ICSP:

    - MISO collegato a pin 13 MCP4251
    - SCK collegato a pin 2 MCP4251
    - MOSI collegato a pin 3 MCP4251
    - +5V collegato a pin 14 MCP4251
    - GND collegato a pin 4 MCP4251

L'integrato usaot è precisamnete un MCP4251-104E/P quindi da 100Kohms.
Ho collegato quindi il morsetto positivo dell'ohmetro al pin 7 ed il morsetto meno al pin 6 dell MCP4251.
Ho scritto il seguente programmino di prova:
Codice: Seleziona tutto
#include "Arduino.h"
#include "MCP4251.h"
#include <SPI.h>


//pin CS per MCP4251
#define cs1 9
#define pot0ResistanceRmax 100000 // These resistance values may vary
#define pot0ResistanceRmin 0
#define pot1ResistanceRmax 100000
#define pot1ResistanceRmin 0
//creazione funzioni per gestione potenziometri 100K
MCP4251 f0(cs1, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);

uint16_t wiper0;
uint16_t wiper1;



//ampiezza oscillatore 1
void amp1a(long amp)
{
  //wiper1 f0
  wiper1 = f0.DigitalPotResistanceToPosition(1, amp);
  f0.DigitalPotSetWiperPosition(1, wiper1);
}



void setup() {
  // put your setup code here, to run once:
  //ampiezza oscillatore 1

  //f0.DigitalPotTerminalBConnect(0);
  f0.DigitalPotTerminalAConnect(0);
  f0.DigitalPotWiperConnect(0);
  //creazione funzioni per gestione potenziometri 100K
  MCP4251 f0(cs1, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
}

void loop() {
  // put your main code here, to run repeatedly:
  amp1a(100000);
}


L'ho compilaot e trasferito nell'arduino e dovrei vedere 100Kohms nel tester ma ne vedo solo 22.8k,
perché?
Aiutatemi per favore.
MCP sembra non "rispondere".
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 pilotare un MCP4251 con ARDUINODUE

Messaggioda Foto UtenteGioArca67 » 30 apr 2025, 20:26

Per prima cosa scarica un esempio fra i file della libreria che usi e vedi se funziona....
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 pilotare un MCP4251 con ARDUINODUE

Messaggioda Foto Utenteboiler » 30 apr 2025, 20:37

Chip select?
Timing?
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

[4] Re: Problema a pilotare un MCP4251 con ARDUINODUE

Messaggioda Foto Utenteluxinterior » 30 apr 2025, 22:58

Ho visto che ci sono un pin e un bit di shutdown
Prova a scrivere e a rileggere un registro o a leggere il registro di stato che ha un pattern noto per alcuni bit così ti togli il dubbio sui collegamenti e la comunicazione
Fai una verifica preliminare dello stato delle linee di comunicazione a riposo verifica che i livelli di tensione siano quelli che ti aspetti
Se hai un oscilloscopio controlla che ci sia effettivamente una comunicazione sulla seriale e come dice boiler che siamo rispettati tutti i tempi
Avatar utente
Foto Utenteluxinterior
4.311 3 4 9
Master EY
Master EY
 
Messaggi: 2690
Iscritto il: 6 gen 2016, 17:48

-2
voti

[5] Re: Problema a pilotare un MCP4251 con ARDUINODUE

Messaggioda Foto Utentealien75 » 1 mag 2025, 0:27

boiler ha scritto:Chip select?
Timing?


Chip select: #define cs1 = 9

Ho scaricato dagli esempi questo codice e non funziona nemmeno cambiando i valori di pos:
Codice: Seleziona tutto
#include "Arduino.h"
#include <MCP4251.h>

#define chipSelectPin 9
#define pot0ResistanceRmax 98600 // These resistance values may vary
#define pot0ResistanceRmin 113.5
#define pot1ResistanceRmax 98600
#define pot2ResistanceRmin 130

MCP4251 digitalPot(chipSelectPin, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot2ResistanceRmin);

bool potNum = 1;
uint16_t pos;

void setup()
{
    Serial.begin(9600);
    digitalPot.begin();
}

void loop()
{
    pos = 25;
    digitalPot.DigitalPotSetWiperPosition(potNum, pos);

    while(1)
    {
    }
}
Avatar utente
Foto Utentealien75
1 1 4 8
Sostenitore
Sostenitore
 
Messaggi: 588
Iscritto il: 31 lug 2011, 14:08

-2
voti

[6] Re: Problema a pilotare un MCP4251 con ARDUINODUE

Messaggioda Foto Utentealien75 » 1 mag 2025, 0:55

boiler ha scritto:Chip select?
Timing?


Allego foto dei timing:
    - MISO traccia rosa
    - CK traccia gialla
    - MOSI traccia azzurra
Allegati
prova.jpg
Avatar utente
Foto Utentealien75
1 1 4 8
Sostenitore
Sostenitore
 
Messaggi: 588
Iscritto il: 31 lug 2011, 14:08

0
voti

[7] Re: Problema a pilotare un MCP4251 con Arduino Due

Messaggioda Foto Utenteboiler » 1 mag 2025, 18:09

La qualità dell'immagine che hai allegato è rappresentativa per il livello di tutta l'interazione.
Buona fortuna.
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

[8] Re: Problema a pilotare un MCP4251 con Arduino Due

Messaggioda Foto Utentealien75 » 2 mag 2025, 0:56

Ecco, ho salvato le tracce dell'oscilloscopio:
Vanno bene ora?
Allegati
NewFile1.png
Avatar utente
Foto Utentealien75
1 1 4 8
Sostenitore
Sostenitore
 
Messaggi: 588
Iscritto il: 31 lug 2011, 14:08

1
voti

[9] Re: Problema a pilotare un MCP4251 con Arduino Due

Messaggioda Foto Utenteboiler » 2 mag 2025, 10:00

Clock e linea dati communtano contemporaneamente --> non è un segnale SPI.

Clock: ~600 mV di ampiezza ?%
MOSI: ~20 mV di ampiezza con un common-mode negativo ?% ?%
MISO: ampiezza insignificante con ALMENO 40 V di common-mode ?% ?% ?%

Sarebbe stato utile vedere anche il chip select, ma viste le premesse, forse è meglio così.

Sono cose che avresti dovuto vedere tu, prima di postare lo screenshot.
Il progetto è evidentemente ampiamente al di fuori della tua portata, comincia con qualcosa di piú semplice.

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


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti