Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Progettazione software per cubo led 4x4x4

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[201] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 3 mag 2009, 23:42

Forse perché fa prima la somma e poi sposta i bit, è possibile?
Guarda qui, ho modificato la formula in (z<<1)+1; :
Codice: Seleziona tutto
;Cubo_led_v06.c,52 ::       }
$022D   $   L_getIndex_6:
;Cubo_led_v06.c,53 ::       return (z<<1)+1;            //restituisce z*2+1.
$022D   $082D         MOVF   FARG_getIndex+1, 0
$022E   $00C0         MOVWF   STACK_0
$022F   $0DC0         RLF   STACK_0, 1
$0230   $1040         BCF   STACK_0, 0
$0231   $0AC0         INCF   STACK_0, 1
;Cubo_led_v06.c,54 ::       }
$0232   $0008         RETURN


Sposta una volta il bit e dopo, presumo, fa la somma. No?
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[202] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utenteposta10100 » 3 mag 2009, 23:46

:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
SUPERBACO!!!!!

Come era scritto prima il codice
Codice: Seleziona tutto
return z<<1 + 1;

veniva eseguito come
Codice: Seleziona tutto
return z<<(1 + 1);

vale a dire
Codice: Seleziona tutto
return z<<2;


#-o

Codice: Seleziona tutto
    ;Cubo_led_v06.c,52 ::       }
    $022D   $   L_getIndex_6:
    ;Cubo_led_v06.c,53 ::       return (z<<1)+1;            //restituisce z*2+1.
    $022D   $082D         MOVF   FARG_getIndex+1, 0
    $022E   $00C0         MOVWF   STACK_0
    $022F   $0DC0         RLF   STACK_0, 1
    $0230   $1040         BCF   STACK_0, 0
    $0231   $0AC0         INCF   STACK_0, 1
    ;Cubo_led_v06.c,54 ::       }
    $0232   $0008         RETURN


Qui funziona! Sposta a sx di un bit e somma 1!

Fatta così come funziona il gioco?
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[203] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 3 mag 2009, 23:51

posta10100 ha scritto:veniva eseguito come

Codice: Seleziona tutto
return z<<(1 + 1);


ehh la matematica...

comunque non l'ho ancora provato perché non so se è giusto questo: (anche perché tutto oggi non c'ero)
Ho trasformato da così:
Codice: Seleziona tutto
random_64=rand() % 64;
random_16=rand() % 16;

a così:
Codice: Seleziona tutto
random_64=rand() & 16;
random_16=rand() & 4;


E' giusto? Potresti spiegare brevemente cosa fa in pratica?

Sistemato questo, lo provo immediatamente.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[204] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentec1b8 » 4 mag 2009, 0:04

Galaxi93 ha scritto:...
comunque non l'ho ancora provato perché non so se è giusto questo: (anche perché tutto oggi non c'ero)
Ho trasformato da così:
Codice: Seleziona tutto
random_64=rand() % 64;
random_16=rand() % 16;

a così:
Codice: Seleziona tutto
random_64=rand() & 16;
random_16=rand() & 4;


E' giusto? Potresti spiegare brevemente cosa fa in pratica?
...


Non è giusto.
Deve essere trasformato in
Codice: Seleziona tutto
random_64=rand() & 15;
random_16=rand() & 3;


Quando calcoli il resto di una divisione per n il risultato può essere compreso tra 0 e (n-1). Se n è pari ad una potenza del 2 allora puoi, in sostituzione del calcolo del resto, eseguire una AND logica.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[205] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utenteposta10100 » 4 mag 2009, 0:08

Premetto che ho letto velocemente i post precedenti (erano tanti :-" ) e che quindi non so esattamente perché fai quella modifica.
Mi fido di voi e ti dico cosa fanno le due funzioni....

Codice: Seleziona tutto
    random_64=rand() % 64;

La prima delle 2 restituisce il resto della divisione intera per 64. In pratica prende il valore restituito da rand, lo divide per 64, e restituisce il resto della divisione.
In pratica, se si comporta come mi aspetto, per dividere per 64 sposta a dx il valore restituito da rand() di 6 posizioni e restituisce la parte che "è uscita" a dx del numero (binario).

Codice: Seleziona tutto
random_64=rand() & 16;

il numero 16 in binario è 00001111. Fare rand() & 16 significa fare l'AND logico tra il numero restituito da rand() e il numero 16.
In pratica dove il "16" ha degli zeri, il risultato avrà degli zeri, dove il numero 16 ha degli 1, il bit del risultato assumerà il valore del corrispondente bit di rand().

In pratica con quella sostituzione hai velocizzato l'operazione!

Luca.
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[206] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentec1b8 » 4 mag 2009, 0:23

Mi accordo solo rileggendo ora di aver sbagliato a scrivere:

La:
Codice: Seleziona tutto
random_64=rand() % 64;
random_16=rand() % 16;


Deve essere
Codice: Seleziona tutto
random_64=rand() & 63;
random_16=rand() & 15;

Chiedo scusa.

@posta10100:
il numero 16 in binario è 00010000 e non 00001111 che invece è 15.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[207] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utenteposta10100 » 4 mag 2009, 8:37

c1b8 ha scritto:@posta10100:
il numero 16 in binario è 00010000 e non 00001111 che invece è 15.


Ma si uno in piu` o uno in meno :mrgreen:

Hai ragione, ma in questi giorni sono leggermente distratto...
infatti mi sembrava strano il modo di operare... meno male che stiamo lavorando in gruppo!!!!
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[208] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 4 mag 2009, 11:48

Scusate se ieri me ne sono andavo via, senza rispondervi, ma ho ricevuto ordini dai superiori :mrgreen: (superiori: genitori, ordini: "Vai a letto!!!"...) #-o

Grazie, ora ho capito come funziona :wink:

Ora lo provo e vi dico.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[209] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 4 mag 2009, 14:03

In effetti ho notato un miglioramento delle prestazioni, dato che quando mancano pochi led da spegnere ci mette di meno a trovarli.
Però c'è sempre qualcosa che non funziona correttamente e alcune cose che non mi convincono molto.
La più grave è il fatto che quando inizia a spegnere i led, non riesce mai e dico mai a spegne l'ultimo che, non so il perché. è sempre lo stesso. E' il led alla coordinata z=1, y=1, x=4.

Poi, provando più volte il programma, resettando il PIC, ho notato che raramente (mi è capitato una volta sola) fa una fatica bestia a trovare l'ultimo led da accendere e ci impiega anche 20-30 secondo a trovarlo. A questo punto non so se è possibile risolvere il problema, ottimizzando ancora di più la random e il calcolo che ci sta dietro, oppure aumentare la frequenza del quarzo, oppure eliminare il problema, facendo in modo che se dopo tot tentativi non trova l'ultimo led, lo accende/spegne in automatico, terminando la funzione.

Volendo posso provare a cambiare il quarzo, mi serve solo un po’ di tempo perché devo modificare la demo-board (tolgo il quarzo e metto su uno connettore femmina, in maniera da poter cambiare facilmente il quarzo in base all'esigenze).

Ciao,
Davide.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[210] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentephylum » 4 mag 2009, 14:07

ti andrebbe di provare il codice compilato (.hex) su
PIC Simulator :?:

E' il led alla coordinata z=1, y=1, x=4.
:?:
Volevi dire 3 0 0 ? random = 3
o 3 1 1 -> random = 23 :?:

^_^
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.191 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti