Potenziometro digitale

  • vito1984
  • Giovane Utente
  • Giovane Utente
Di più
9 Anni 10 Mesi fa #21 da vito1984
Risposta da vito1984 al topic Potenziometro digitale
Ciao a tutti,
utilizzando il potenziometro digitale mcp41010 mi sono accorto che per programmarlo tramite spi occorre un segnale di clock a 16 impulsi, poiché bisogna inviare due byte, uno di comando e uno dati.
Se uso un pic16f877a per pilotare il potenziometro la modalità spi del pic permette di trasmettere 8 bit con un segnale di clock a 8 impulsi. Devo cambiare microcontrollore, utilizzandone uno che supporti la modalità di trasmissione a 16 bit?

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • alfa75
  • Platino Utente
  • Platino Utente
Di più
9 Anni 10 Mesi fa - 9 Anni 10 Mesi fa #22 da alfa75
Risposta da alfa75 al topic Potenziometro digitale
Ciao Vito
il problema che hai ho dovuto affrontarlo qualche mese fa per gestire un tlc5940 che ha bisogno in ingresso di 16 valori composti ognuno da 12bit(che in totale sono 192bit) ,ma come hai gia detto tu lo spi del pic permette l'invio di 8 bit,quindi per ovviare il problema ho preso esempio da una libreria trovata in rete dove hanno fatto nel seguente modo...
sapendo che in totale i bit sono 192 hanno crato un array formata da 24 char in modo da avere proprio 192bit
quest'array fa da secondo buffer per l'invio tramite SSPBUF dello spi.
in pratica viene una cosa del genere
Code:
unsigned char packedGrayScaleDataBuffer2[24 * NUMBEROF5940]; for (int byteCounter = 0; byteCounter < (24 * NUMBEROF5940); byteCounter++) { // Send the byte to the SPI buffer SSPBUF = packedGrayScaleDataBuffer2[byteCounter]; // Wait for the transmission complete flag while (SSPIF == 0); // Reset the transmission complete flag SSPIF = 0; }
Ultima Modifica 9 Anni 10 Mesi fa da alfa75.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • firstcolle
  • Platino Utente
  • Platino Utente
Di più
9 Anni 10 Mesi fa - 9 Anni 10 Mesi fa #23 da firstcolle
Risposta da firstcolle al topic Potenziometro digitale
Non si riescono ad inviare 2 byte via SPI in successione? Mandi il primo byte, attendi che venga inviato e mandi il secondo byte...

altrimenti ti puoi fare tu un semplice loop per gestire l'invio in SPI e non usare il protocollo integrato al PIC (se non ricordo male io avevo fatto così per usare i potenziometri digitali)
Ultima Modifica 9 Anni 10 Mesi fa da firstcolle.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • vito1984
  • Giovane Utente
  • Giovane Utente
Di più
9 Anni 10 Mesi fa #24 da vito1984
Risposta da vito1984 al topic Potenziometro digitale
Grazie a entrambi per la risposta,
praticamente ho risolto mandando due byte in successione, con un codice del genere.

spi_start ();
int command_byte = 17;
spi_start ();
int data_out_3 = 4;
spi_write (command_byte);
spi_write (data_out_3);

Così mi funziona...

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
9 Anni 10 Mesi fa #25 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Potenziometro digitale
Effettivamente per inviare 16 bits basta inviare due byte.

In alcuni casi potrebbe non funzionare, infatti dipende dalla modalità SPI supportata dallo Salve.

In alcuni casi e' necessario portare CS alto, prima di riportarlo nuovamente a livello basso e inviare un nuovo byte (CS attivo basso).

Maggiori dettagli li puoi trovare nel Tutorial sul protocollo SPI .

Saluti,

Mauro
I seguenti utenti hanno detto grazie : vito1984

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi