Bon, ben ça marche!
Avec ce code là :
/**********************************************
* Programmation de potentiomètres numeriques *
* AD5206 *
**********************************************/
/* branchement :
* - @74LS154 : B3:0
* - Data : B4
* - Clk : B5
*/
#define MAX_POT 54
#define TEMPO 2
byte pot_data[MAX_POT];
void setup() {
byte i;
for (i=0; i<MAX_POT; i++){ // met toutes les valeurs à 0
pot_data[i] = 0;
}
pot_init();
}
byte x; // variable temp
void loop() {
for (x = 0; x < 255; x++){
pot_set(6, x);
}
}
Avec la proc d'initialisation :
void pot_init(){ // initialise les potentiomètres à 0
byte i;
DDRB |= 0x3F; // pins ctrl pot en sortie
for (i = 0; i < MAX_POT; i++){ // met tous les potars à 0
pot_set(i, 0);
}
PORTB |= 0x0F; // idle : 74LS154 = N°15;
PORTB &= 0xCF; // sdi = 0; sck = 0;
}
et la fonction d'écriture sur les potars :
void pot_set(byte adress, byte data){ // envoie données sur potentiomètre
byte b, pot; // adresses décomposées
byte value; // valeur d'envoi en série
byte i;
b = adress / 6; // décomposition des adresses boîtier
pot = adress - (b * 6); // potentiomètre
PORTB &= (b | 0xC0); // adressage 74LS154 : CS(b) = 0
for (i = 0; i < 3; i++){ // adresse A2:0
value = pot << i;
if (value & 0x04) { // teste adresse[2-i]
PORTB |= 0x10; // adresse = 1
} else {
PORTB &= 0xEF; // adresse = 0
}
PORTB |= 0x20; // clock high
PORTB &= 0xDF; // clock low
}
for (i = 0; i < 8; i++){ // data D7:0
value = data << i;
if (value & 0x80) { // teste data[7-i]
PORTB |= 0x10; // data = 1
} else {
PORTB &= 0xEF; // data = 0
}
PORTB |= 0x20; // clock high
PORTB &= 0xDF; // clock low
}
PORTB &= 0xCF; // idle PORTB
PORTB |= 0x0F;
}
Il n'y a pas de tempo dans les impulsions, vu que le composant accepte une clock min de 10ns, comme l'arduino ne saura jamais descendre en dessous de 62.5ns, on a de la marge.
le montage :

Le gros, c'est le démultiplexeur 74LS154 proposant 16 sorties, le petit, c'est le potar numérique.
Le signal :
J'ai mis le potar N°1 entre 0 et 5V, puis voilà ce qu'on trouve sur le wipper :

la rampe fait dans les 8,2ms de long (soit 256 écritures, ça donne un temps d'écriture d'environ 32µs). Donc pour mettre tous mes potars à jour (ils seront 54), il me faudra moins de 2ms, c'est raisonnable. l'idée est que les potars bougent en même temps que la souris du PC... à 550 MAJ possibles par seconde, je pense qu'on tient le bon bout. Il ne faudrait pas que ce soit la liaison série qui ralentisse le système... Si je tourne à 128Kbauds, (à moins que côté PC on puisse aller plus vite?), ça me ferait un temps de transfert max (1 octet de commande et 54 octets de données) de 3.5ms, je ne sais pas si c'est jouable, il faudra tester. Au pire, le pc n'enverra la commande que lorsqu'on relâche la souris... Par contre, si on ne touche qu'à une voie, la commande du potar peut être instantanée. à suivre et à voir.
youpi
Maintenant, on va tester en audio...