[RISOLTO] MAX5392 potenziometro digitale

Buongiorno ragazzi!
Sono a chiedervi aiuto per il pilotaggio di MAX5392.
E' un potenziometro digitale, configurabile tramite I2C.

Non riesco tuttavia a pilotarlo.
E' stato configurato per avere come indirizzo: 0x28 e riesco a vederlo nel bus I2C.
Sto provando ad utilizzare la libreria "Wire.h".

Condivido il datasheet del componente nel link seguente: MAX5392

In tale datasheet, a pagina 12 sono indicati i dettagli inerenti al formato dei comandi, riportando testualmente:

Write to the devices by transmitting the device’s slave
address with NOP/W (8th bit) set to zero, followed by
at least 2 bytes of information. The first byte of information is the command byte. The second byte is the data
byte. The data byte goes into the internal register of the
device as selected by the command byte (Figure 7 and
Table 2).

Il codice che sto usando per fare tutti i tentativi del caso è questo:

      for(int yyy=0; yyy<0xFF; yyy++)
      {
        for(int yy=0; yy<0xFF; yy++)
        {
          Wire.beginTransmission(0x28);
            Wire.write(yy);    //command byte
            Wire.write(yyy);   //data byte
            Wire.endTransmission();

            Serial.print(yy);
            Serial.print(",");
            Serial.print(yyy);
            Serial.print("\t");
            delay(10);
        }
           Serial.println(); 
      }

A livello HW:
i pin "LA" ed "LB" sono entrambi a GND.
i pin "WA" e "WB" sono cortocircuitati e fra loro e GND monitoro il valore della resistenza durante l'avanzamento del piccolo sketch condiviso.

Avreste consigli?
ci sto perdendo davvero un sacco di tempo senza riuscire a venirne a capo ;(

Vi ringrazio molto
Buon proseguimento di giornata

Ok, ho risolto, in effetti era corretto.
Chiaramente per accedere alla resistenza A bastava accedere al registro_A (0x11) per la res B al (0x12) e per entrambi al (0x13)

Grazie comunque

Grazie a te per aver condiviso la soluzione, karma+1

Bene che hai risolto, però effettivamente da quello che avevi scritto non capivo bene un paio di cose:

  1. perché tu abbia "cortocircuitato WA e WB", di fatto mettendoli in parallelo: la risultante sarà R1R2/(R1+R2), che non penso sia quello che volevi misurare
  2. perché tu abbia voluto fare quello sketch di test con un delay da solo 10ms: di fatto dato che hai 65536 combinazioni, tutto il ciclo ti dura solo poco più di 6 decimi di secondo, cosa pensavi di vedere? :smiley:
  3. perché nello sketch tu abbia pensato di mandare "a caso" una sequenza di combinazioni di byte tra 0 e 255 come comando e dato, quando nelle specifiche è spiegato bene cosa mandare...

insomma, ora immagino che tu abbia provato a leggere e capire "Command Byte Summary" a pagina 13, e quindi hai risolto, esatto? :wink:

nid69ita:
Grazie a te per aver condiviso la soluzione, karma+1

Wow! Ti ringrazio molto!

docdoc:
Bene che hai risolto, però effettivamente da quello che avevi scritto non capivo bene un paio di cose:

  1. perché tu abbia "cortocircuitato WA e WB", di fatto mettendoli in parallelo: la risultante sarà R1R2/(R1+R2), che non penso sia quello che volevi misurare
  2. perché tu abbia voluto fare quello sketch di test con un delay da solo 10ms: di fatto dato che hai 65536 combinazioni, tutto il ciclo ti dura solo poco più di 6 decimi di secondo, cosa pensavi di vedere? :smiley:
  3. perché nello sketch tu abbia pensato di mandare "a caso" una sequenza di combinazioni di byte tra 0 e 255 come comando e dato, quando nelle specifiche è spiegato bene cosa mandare...

insomma, ora immagino che tu abbia provato a leggere e capire "Command Byte Summary" a pagina 13, e quindi hai risolto, esatto? :wink:

Interessanti le tue domande, grazie per l'interessamento :slight_smile:

1)E' perfettamente esatto ciò che dici.
Nell'applicazione necessito di una resistenza massima di 3KΩ, nettamente inferiore ai 20KΩ ottenibili configurando le due resistenze in serie. Ed inferiore alla massima resistenza ottenibile configurandole in parallelo (5KΩ). Ho quindi sfruttato la configurazione in parallelo per ottenere una migliore risoluzione, sopratutto in prossimità del limite massimo utilizzato, questo aspetto mette a mia disposizione, gratuita, la possibilità di regolare il mio sistema in modo davvero molto fine, e questa è la mia priorità.

2)In effetti, senza spiegazione dei test eseguiti, non ha alcun motivo di esistere quel delay, io l'ho usato semplicemente per rendere più semplice da visualizzare la curva che mi aspettavo di vedere (graficamente) e mi era comodo quel tempo in base al numero di samples/s che in quel momento avevo impostato sull'oscilloscopio, tramite il quale monitoravo la tensione, il cui valore era dipendente dal valore di resistenza. Così facendo concludevo un ciclo completo in poco meno di 11 secondi :slight_smile: mi era semplicemente comodo :slight_smile:

3)Questa è la domanda migliore! Dato che non vedevo muoversi niente... Ho pensato... magari sto facendo confusione con little endian, big endian, middle endian, e via dicendo... LSB... MSB... (Mi capita sempre!!!) e sto male configurando il messaggio inviato... cià facciamo in modo di provare tutte le possibilità... almeno così devo beccarla per forza!!! :slight_smile:

Solo dopo aver aumentato un po' il delay... e visto il punto esatto in cui qualcosa iniziava a muoversi... Ho potuto comprendere correttamente quello che solo ora posso definire un chiarissimo "Command Byte Summary".

Grazie nuovamente a tutti
buona serata