il max5436 è comandabile con SPI quindi devi avere 3 pin di arduino liberi per giocarci.
l'ideale sarebbe avere, nel caso di una board UNO, il pin 13, 11 e un altro a caso.
per sta volta facciamo finta di nulla... ti ricordo solo che se sei a corto di pin digitali, puoi usare i pin analogici come digitali, avendo l'accortezza di richiamarli usando il N°14 al posto di A0, 15 al posto di A1 ecc...
Il mio consiglio è di darti una mezza letta almeno un volta alla documentazione della SPI di arduino.
AL volo un po maccheronicamente, ma per farti avere un idea, tu per pilotare il device SPI, devi usare 3 pin, uno per il clock, uno per il dato seriale e uno per il ChipSelect; per la cronaca ci sono anche integrati spi a 4 pin, per restituire al micro delle informazioni, ma non è il tuo caso.
il ChipSelect serve per avvisare il tuo integrato spi che gli stai per mandare dei dati, sul max5436 è "active LOW" quindi quando lo porti a LOW l'integrato si mette a origliare.
Una volta che lo riporti ad HIGH l'integrato sa che hai finito di inviargli il dato seriale; nel max5436, ritornare ad HIGH è il "segnale" per aggiornare la posizione del wiper.
Il dato seriale, è il numero in binario che passi dal micro all'integrato, nel tuo caso tra 0000 0000(0) e 0111 1111 (127)
Il clock in estrema sintesi, serve per poter fare riconoscere al tuo integrato cosa gli stia mandando il micro come dato seriale.
Detto questo, passiamo allo sketch.
- Codice: Seleziona tutto
//do un nome ai pin per fare le cose a modo
int seriale=11; //mosi - collegato al DIN del max5436
int clocks=13; //clock - collegato al SCLK del max5436
int csPin=10; //cs - collegato al CS del max5436
//creo variabile datoDaMandare che contaerra' il numero da passare al max
int datoDaMandare=0;
void setup()
{
//avviso arduino che voglio usare i seguenti pin come Uscite
pinMode(seriale, OUTPUT); //MOSI out;
pinMode(clocks, OUTPUT); //sck clockpin
pinMode(csPin, OUTPUT); //cs
//metto alto il CS per evitare che disturbi diano falsi positivi.
digitalWrite(csPin, HIGH);
}
void loop()
{
//
tuo codice che fa le cose che deve fare
//
datoDaMandare=5; //numero compreso tra 0 e 127 per comandare il tuo cursore
//e qui la magia...
digitalWrite(csPin, LOW);
shiftOut(seriale, clocks, MSBFIRST, datoDaMandare);
digitalWrite(csPin, HIGH);
//se hai un codice piuttosto veloce lascia questo piccolo ritardo
delay(25);
}