360

Bon, je suis un peu coincé niveau "optimisation"

Pour afficher une "frame", je dois afficher 16 "layers" de 256 bits. Pour afficher un layer je dois "pusher" les bits un à un en série et ensuite déclencher la recopie sur les sorties de mes cartes.

Si on vise un framerate de 25 fps alors il faut faire 25*16=400 layers par seconde soit 102400 pushs par seconde sur le port.

J'ai mis le code de push d'un layer dans une interruption. Pour afficher à 25fps, je dois l'exécuter 400 fois par seconde.

J'utilise la librairie suivante pour le timer : http://playground.arduino.cc/Code/Timer1

La valeur est en µs, pour tenir mon framerate je dois donc descendre à 2500µs pour du 25fps ou au moins 3500 si on vise le 18fps.

Or, et c'est bien là mon soucis, en dessous de 5000~5500µs de période, y'a plus aucun changement (le code de la loop principale ne s'exécute plus comme il faut). Et je peux vous assurer qu'à 10~12 fps on le voit le clignottement...

Voici mon code si vous voyez si un truc "énorme" m'aurait échappé...
#include "TimerOne.h" char video_buffer[]={LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW}; // :) char sprite[]={LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW}; // wolf char sprite2[]={LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}; int frame=0; int couche_vbl=0; int nb_out=0; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(53, OUTPUT); // Data IN pinMode(52, OUTPUT); // Latch pinMode(51, INPUT); // Data OUT pinMode(50, OUTPUT); // Clk pinMode(49, OUTPUT); // selcouche bit 3 pinMode(48, OUTPUT); // selcouche bit 2 pinMode(47, OUTPUT); // selcouche bit 1 pinMode(46, OUTPUT); // selcouche bit 0 pinMode(13, OUTPUT); // onboard led selcouche(0); //Autotest (comptage d'un cycle) //init with 0 for (int i=0;i<4096; i++){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); } //insert 1 digitalWrite(53, HIGH); digitalWrite(50, LOW); digitalWrite(50, HIGH); nb_out=1; //fill with 0 until 1 exits the loop while (digitalRead(51)==LOW){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); nb_out++; } //init with 0 for (int i=0;i<nb_out; i++){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); } //DISPLAY digitalWrite(52, HIGH); digitalWrite(52, LOW); digitalWrite(13, LOW); Timer1.initialize(50000); Timer1.attachInterrupt(VBL); } void selcouche(int couche){ switch(couche){ case 0: digitalWrite(49, LOW); digitalWrite(48, LOW); digitalWrite(47, LOW); digitalWrite(46, LOW); break; case 1: digitalWrite(49, LOW); digitalWrite(48, LOW); digitalWrite(47, LOW); digitalWrite(46, HIGH); break; case 2: digitalWrite(49, LOW); digitalWrite(48, LOW); digitalWrite(47, HIGH); digitalWrite(46, LOW); break; case 3: digitalWrite(49, LOW); digitalWrite(48, LOW); digitalWrite(47, HIGH); digitalWrite(46, HIGH); break; case 4: digitalWrite(49, LOW); digitalWrite(48, HIGH); digitalWrite(47, LOW); digitalWrite(46, LOW); break; case 5: digitalWrite(49, LOW); digitalWrite(48, HIGH); digitalWrite(47, LOW); digitalWrite(46, HIGH); break; case 6: digitalWrite(49, LOW); digitalWrite(48, HIGH); digitalWrite(47, HIGH); digitalWrite(46, LOW); break; case 7: digitalWrite(49, LOW); digitalWrite(48, HIGH); digitalWrite(47, HIGH); digitalWrite(46, HIGH); break; case 8: digitalWrite(49, HIGH); digitalWrite(48, LOW); digitalWrite(47, LOW); digitalWrite(46, LOW); break; case 9: digitalWrite(49, HIGH); digitalWrite(48, LOW); digitalWrite(47, LOW); digitalWrite(46, HIGH); break; case 10: digitalWrite(49, HIGH); digitalWrite(48, LOW); digitalWrite(47, HIGH); digitalWrite(46, LOW); break; case 11: digitalWrite(49, HIGH); digitalWrite(48, LOW); digitalWrite(47, HIGH); digitalWrite(46, HIGH); break; case 12: digitalWrite(49, HIGH); digitalWrite(48, HIGH); digitalWrite(47, LOW); digitalWrite(46, LOW); break; case 13: digitalWrite(49, HIGH); digitalWrite(48, HIGH); digitalWrite(47, LOW); digitalWrite(46, HIGH); break; case 14: digitalWrite(49, HIGH); digitalWrite(48, HIGH); digitalWrite(47, HIGH); digitalWrite(46, LOW); break; case 15: digitalWrite(49, HIGH); digitalWrite(48, HIGH); digitalWrite(47, HIGH); digitalWrite(46, HIGH); break; default: digitalWrite(49, LOW); digitalWrite(48, LOW); digitalWrite(47, LOW); digitalWrite(46, LOW); } } // The callback of the timer1 (displays a layer) void VBL(){ for (int i=0;i<nb_out; i++){ digitalWrite(53, video_buffer[i]); digitalWrite(50, LOW); digitalWrite(50, HIGH); } //DISPLAY selcouche(couche_vbl); digitalWrite(52, HIGH); digitalWrite(52, LOW); couche_vbl=(couche_vbl+1)&15; } // the loop function runs over and over again forever void loop() { if( frame==0){ frame=1; memcpy(video_buffer, sprite,256); }else{ frame=0; memcpy(video_buffer, sprite2,256); } delay(1000); }
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

361

N'utilise pas digitalWrite() : c'est lent. Écrit directement sur les ports, de préférence en fusionnant les accès consécutifs à plusieurs bits d'un même port en un seul octet.

Si ça suffit pas faudra passer en assembleur.
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

362

Bon en 4 couches ça passe, on perçoit à peine un scintillement :
20160811_164146.mp4

EDIT : je viens de voir ta réponse, je vais essayer de trouver comment on accède directement au ports...
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

363

ok pour la fonction selcouche ça se résume désormais à :

void selcouche(int couche){
  PORTL=couche;
}

(par contre il a fallu que j'inverse les fils pour avoir le bon ordre de couches)
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

364

Au fait, vérifie que t'as bien activé les optimisations du compilo (c'est tout con, mais on sait jamais).
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

365

Oh putain, la différence une fois appliqué à mon push de 256 bits...

je monte à 125fps
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

366

smile
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

367

A quand un Boo en troidé ? grin

368

Oooh la bonne idée love

(bon, faut quelqu'un pour le modéliser/dessiner)
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

369

le sprite en multilayer
20160811_171735.mp4
et un première animation (en 16 étapes séparées de 20ms chacune)
20160811_175434.mp4
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

370

Folco (./367) :
A quand un Boo en troidé ? grin
tu fournis le tableau en 4096 points et je te l'affiche ^^
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

371

HIGH; } delay(delay_ms); }Le source de la ligne qui tourne : #include "TimerOne.h" //16x16x16 video buffer char video_buffer[4096]; // :) char sprite[]={LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW}; // wolf char sprite2[]={LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}; int frame=0; int couche_vbl=0; int nb_out=0; int delay_ms=20; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(53, OUTPUT); // Data IN pinMode(52, OUTPUT); // Latch pinMode(51, INPUT); // Data OUT pinMode(50, OUTPUT); // Clk pinMode(49, OUTPUT); // selcouche bit 3 pinMode(48, OUTPUT); // selcouche bit 2 pinMode(47, OUTPUT); // selcouche bit 1 pinMode(46, OUTPUT); // selcouche bit 0 pinMode(13, OUTPUT); // onboard led selcouche(0); //Autotest (comptage d'un cycle) //init with 0 for (int i=0;i<4096; i++){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); } //insert 1 digitalWrite(53, HIGH); digitalWrite(50, LOW); digitalWrite(50, HIGH); nb_out=1; //fill with 0 until 1 exits the loop while (digitalRead(51)==LOW){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); nb_out++; } //init with 0 for (int i=0;i<nb_out; i++){ digitalWrite(53, LOW); digitalWrite(50, LOW); digitalWrite(50, HIGH); } //DISPLAY digitalWrite(52, HIGH); digitalWrite(52, LOW); digitalWrite(13, LOW); Timer1.initialize(500); Timer1.attachInterrupt(VBL); } void selcouche(int couche){ PORTL=couche; } // The callback of the timer1 (displays a layer) void VBL(){ int j=nb_out*couche_vbl;//layer for (int i=0;i<nb_out; i++){ if(video_buffer[i+j]==LOW){ PORTB=PORTB&0xFE; }else{ PORTB=PORTB|0x01; } PORTB=PORTB&0xF7; PORTB=PORTB|0x08; } //DISPLAY selcouche(couche_vbl); PORTB=PORTB&0xFD; PORTB=PORTB|0x02; couche_vbl=(couche_vbl+1)&15; } // the loop function runs over and over again forever void loop() { /*if( frame==0){ frame=1; memcpy(video_buffer, sprite,256); }else{ frame=0; memcpy(video_buffer, sprite2,256); } delay(1000);*/ memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[i+i*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[4+i/2+i*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[8+i*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i/2+i*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+i*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+(4+i/2)*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+128+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+(15-i)*16+i*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[i+i*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[4+i/2+i*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[8+i*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i/2+i*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+i*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+(4+i/2)*16+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+128+(15-i)*256]=HIGH; } delay(delay_ms); memset(video_buffer,0,4096); for (int i=0;i<16; i++){ video_buffer[15-i+(15-i)*16+(15-i)*256]=
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

372

top
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

373

Par contre, j'ai une des baguettes qui s'est décollée, je dois trouver des petits clous si je veux pas que ça recommence...

Et j'ai encore rien mis sur le fond du socle, je sais pas si je laisse vide avec des pieds pour l'aération en accrochant les circuits sur les bords ou si je prévois un fond... (j'ai acheté deux tiges filetées d'un mètre pour pouvoir stacker les 8 cartes si besoin)

Et j'ai commandé une alim fanless 5V 10A (le double de mon max théorique) pour pouvoir n'avoir qu'une prise élec sur le coté...
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

374

tromb Fichier joint : 20160811_192629.mp4
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

375

il manque les cheveux...
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

376

tromb Fichier joint : UPzi
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

377

Si qqn a le cœur de continuer... en attendant j'ai un problème tout autre à gérer : la ram... je stocke 0 ou 1 dans un octet, je peux diviser la taille de mon buffer...
................/*O*/
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

................/*l*/
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

................/*2*/
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

................/*3*/
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

................/*4*/
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

................/*5*/
................
................
................
................
......XXXX......
......XXXX......
......XXXX......
......XXXX......
................
................
................
................
................
................

................

................/*6*/
................
................
................
......XXXX......
.....X....X.....
.....X....X.....
.....X....X.....
.....X....X.....
......XXXX......
................
................
................
................
................
................

................/*7*/
................
................
......XXXX......
.....X....X.....
....X......X....
....X......X....
....X......X....
....X......X....
.....X....X.....
......XXXX......
................
................
................
................
................

................/*8*/
................
......XXXX......
.....X....X.....
....X......X....
...X........X...
...X........X...
...X........X...
...X........X...
....X......X....
.....X....X.....
......XXXX......
................
................
................
................

................/*9*/
................
......XXXX......
.....X....X.....
....X......X....
...X.......X.X..
...X........X...
...X........X...
...X.......X.X..
....X......X....
.....X....X.....
......XXXX......
................
................
................
................

................/*lO*/
................
......XXXX......
.....X....X.....
....X......X....
...X........X...
...X........X...
...X........X...
...X........X...
....X......X....
.....X....X.....
......XXXX......
................
................
................
................

................/*ll*/
................
......XXXX......
.....X....X.....
....X......X....
...X........X...
...X........X...
...X........X...
...X........X...
....X......X....
.....X....X.....
......XXXX......
................
................
................
................

................/*l2*/
................
................
......XXXX......
.....X....X.....
....X......X....
....X......X....
....X......X....
....X......X....
.....X....X.....
......XXXX......
................
................
................
................
................

................/*l3*/
................
................
................
......XXXX......
.....X....X.....
.....X....X.....
.....X....X.....
.....X....X.....
......XXXX......
................
................
................
................
................
................

................/*l4*/
................
................
................
.....XXX........
......XXXX......
......XXXX......
......XXXX......
......XXXX......
.....XXX........
................
................
................
................
................
................

................/*l5*/
................
........XXX.....
....XXXXXXXX....
.....XXXXX......
......XXX.......
................
................
......XXX.......
.....XXXXX......
....XXXXXXXX....
........XXX.....
................
................
................
................
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

378

Suffit de stocker l'état de chaque LED dans un bit au lieu d'un octet, tu gagnes un facteur 8.
>= 1; // ici tu mets ton code pour envoyer "bit" sur ton registre à décalagePour "dépacker" c'est facile : tu lis l'octet dans ton buffer, et ensuite : bit = octet & 1; octet > et tu copies-colles 8 fois pour dérouler la boucle (ça chope d'abord le bit 0, puis le 1, etc.).

Y'a même encore mieux, je sais pas quel modèle d'Atmel il y a sur ton Arduino mais il y a probablement un port SPI, qui peut te faire ça directement en hardware (si les broches correspondantes sont pas déjà utilisées).
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

379

y'a un spi, c'est un arduino mega

par contre ce sont les broches du port L que j'utilise pour mon transfert série "home made"
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

380

Regarde si tu peux changer l'affectation des broches sans tout casser dans ton schéma, le SPI hardware c'est un gros gain de vitesse (ça génère l'horloge et les données pour 8 bits d'un coup, t'as juste à charger l'octet et à lancer le truc).
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

381

le branchement sur l'arduino est facile à changer hein... c'est du connecteur he
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

382

Désolé de vous spammer avec mon nouveau jouet grin

https://plus.google.com/112609294154362908352/posts/BDZJKFg612P pour une balle rebondissante
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

383

Elle va un peu vite smile

Ça éclaire bien la pièce en vrai ?
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

384

assez ouais (et encore, la balle est "vide" y'a que l'extérieur de la sphere)
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

385

C'est géant ce truc, belle récompense après tes paquets d'heures passées dessus ^^

386

vince (./384) :
assez ouais (et encore, la balle est "vide" y'a que l'extérieur de la sphere)
un petit "détail" : ça suffit pas comme éclairage hein...

d'après mon super capteur à deux balles intégré dans mon multimètre :
spot hallogène dans l'entrée : 60 LUX
plafonnier du salon : 45 LUX
appliques murales d'ambiance (économie d'énergie mais équivalent incandescent 25W, 3 appliques) : 13 LUX
bouncing ball (l'anim dont j'ai posté la vidéo) : 4 LUX (monte à 16 si on met l'appareil au dessus du cube, dans l'axe des leds)
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

387

T'es sûr qu'il est bien réglé ? Les chiffres que tu donnes semblent faibles par rapport aux tableaux classiques :
https://en.wikipedia.org/wiki/Lux#Illuminance

Après, c'est une unité linéaire alors que la perception de la lumière est logarithmique, donc c'est un peu trompeur.
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

388

dans l'appart, fenêtres ouvertes, j'ai 156 en lumière naturelle là...

et je viens de voir que le capteur a l'air "directionnel" donc en fait je pense que l'orientation a du fausser la mesure...
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

389

On parle en milliers de lux sous une lampe, et même dans un endroit bien éclairé (genre atelier etc...). Tes valeurs semblent vraiment faibles en effet.

390

salon éclairé en plein jour :
LyyY
(et c'est de coté, comme je le disait, l'éclairage des leds part vers le haut principalement)

Pour comparaison, c'est plus brillant que le projo
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