1

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 ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2

SPI.transfer(couche + 32 * numérocouche, 32);
So much code to write, so little time.

3

et sur l'écriture du retour, il va pas se foirer ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

4

Ah j'avais pas compris que tu voulais garder les données d'origine. Bah memcpy alors happy
So much code to write, so little time.

5

C'est un peu idiot de devoir se taper l'impact sur les perfs d'un memcpy() et des accès mémoire pour l'écriture des données reçues, alors que dans ton cas tu te fous des données reçues, vu qu'il n'y a rien de branché sur la broche de réception.

Apparemment ils ont pas prévu de fonction de transfert SPI dans un seul sens dans la lib Arduino, mais c'est pas dur à coder si tu regardes dans la datasheet. Tu peux garder les appels à la lib pour la configuration des paramètres SPI, et ne remplacer que la fonction qui transfère les données. Du coup plus besoin de memcpy(), suffit d'utiliser un pointeur qui tape au bon endroit de ton tableau.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

Zerosquare (./5) :
vu qu'il n'y a rien de branché sur la broche de réception
si, c'est câblé : la sortie des registres est rebouclé dessus... et en début d'init je lance justement un bit pour compter le nombre de registres qui sont chainés
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

7

ce quil faudrait faire c'est
-trouver les sources de la lib spi (elles trainent qq part dans ce que l'arduino ide a installé)
-copier la fonction transfer dans ton fichier source ou a cote de l'existant
-l'appeler transmit
-y virer tout ce qui copie les données en retour
-la tester
-éventuellement proposer ca pour inclusion a arduino officiel

sinon memcpy fait l'affaire mais ca prend du cpu pour rien en effet.

8

Suffit de faire une boucle for pour la copie embarrassed

#loin#

Oui la lib arduino est loin d'etre universelle et surtout optimisé. Par exemple les fonction pour jouer avec les IOs ajoutent un delais plus que notable, pour certains de mes tests il etait bien plus interessant de taper directement dans les registres que d'utiliser la lib officielle
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.