Pour mon cube à LED, j'utilise un arduino mega 2560.
Grâce aux précieux conseils de squalyl, j'ai recâblé mes buffers série pour profiter du SPI built in de la carte.
Ca marche, mais !
Concrètement :
- j'ai 32 buffers 8bits en série qui affichent donc 256 bits au moment du latch.
- le latch recopie les buffers en série sur les sorties en une fois et donc toute la couche s'illumine d'un coup
- un balayage sur les 16 couches passe à la suivante et ainsi de suite
Plutôt que de charger octet par octet, la lib SPI propose de charger un buffer complet en une fois : https://www.arduino.cc/en/Reference/SPITransfer
SPI.transfer(buffer, taille) permet donc copier N octets d'un tableau en SPI. Le protocole étant "bouclé", il remet en mémoire le "retour".
Si j'ai un buffer déclaré "unsigned char couche[32]; ", au moment où j'afficherai le contenu du buffer avec "SPI.transfer(couche, 32);", il se retrouvera avec en remplacement de ses anciennes valeurs le contenu de ce qui était affiché auparavant.
Pour gérer un buffer d'affichage 3D, j'aurai aimé avoir un buffer de 512 octets mais n'en afficher que 32 d'un coup. Comment puis-je faire pour appeler SPI.transfer avec une sous partie seulement ?
(en solution "dégradée" j'ai pensé à faire un "memcpy(buffer_rendu,buffer[(16*numérocouche)],32);" pour afficher buffer_rendu...
Vous en pensez quoi ?