Progettazione software per cubo led 4x4x4
Moderatore:
Paolino
0
voti
no, ci sta benissimo, ho ancora la metà della ram disponibile, è solo che utilizzare tutta questa memoria per un gioco solo, non è che mi piace molto. Però se è l'unica via, pazienza.
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!
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!
0
voti
La memoria la puoi allocare all'inizio del gioco e liberarla alla fine...
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
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
-

posta10100
5.550 4 10 13 - Master EY

- Messaggi: 4832
- Iscritto il: 5 nov 2006, 0:09
0
voti
posta10100 ha scritto:La memoria la puoi allocare all'inizio del gioco e liberarla alla fine...
Si?? E come? e specialmente, come la considera il compilatore?
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!
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!
0
voti
Se posso permettermi devo farti notare che non hai ragionato molto sulle indicazioni che ti sono state date.
Ti avevo detto di pensare ai dati già in possesso, di generare numeri casuali di volta in volta decrescenti ecc.
Vediamo di fare un po il punto.
- Ti servono 64 char? per cosa? per memorizzare lo stato dei led? ma viene già memorizzato lo stato dei led. Per sapere quali sono già stati modificati di stato (accesi o spenti)? è la stessa informazione di prima.
- Generi un numero casuale da 0 al numero di led ancora da cambiare meno 1. Cerchi il primo led (con numero superiore) ancora da cambiare. Ed il gioco è fatto.
Un esempio?
1) inizi con 64 led da spegnere.
2) Crei un numero da 0 a led-1 (nel primo caso quindi 63).
3) Il led corrispondente al numero generato è acceso? si, allora lo spengo, i led rimanenti diminuiscono di 1 e vado al punto 2
4) il led è già spento, allora cerco il primo led da spegnere aumentando di 1 il numero casuale generato (non genero nuovi numeri ma sommo 1 al numero generato al punto 2) e torno al punto 2.
Cosa ne dici?
Ti avevo detto di pensare ai dati già in possesso, di generare numeri casuali di volta in volta decrescenti ecc.
Vediamo di fare un po il punto.
- Ti servono 64 char? per cosa? per memorizzare lo stato dei led? ma viene già memorizzato lo stato dei led. Per sapere quali sono già stati modificati di stato (accesi o spenti)? è la stessa informazione di prima.
- Generi un numero casuale da 0 al numero di led ancora da cambiare meno 1. Cerchi il primo led (con numero superiore) ancora da cambiare. Ed il gioco è fatto.
Un esempio?
1) inizi con 64 led da spegnere.
2) Crei un numero da 0 a led-1 (nel primo caso quindi 63).
3) Il led corrispondente al numero generato è acceso? si, allora lo spengo, i led rimanenti diminuiscono di 1 e vado al punto 2
4) il led è già spento, allora cerco il primo led da spegnere aumentando di 1 il numero casuale generato (non genero nuovi numeri ma sommo 1 al numero generato al punto 2) e torno al punto 2.
Cosa ne dici?
Fabio
0
voti
E' simile alla mia idea iniziale, solo che il tuo interviene subito al contrario del mio che aspetta qualche tentativo, prima di aumentare/diminuire.
Dimmi se è tutto ok (specialmente per quel -2).
- Codice: Seleziona tutto
//Funzione che accende (stato=1) o spegne (stato=0) tutti i led del cubo
//casualmente.
void fill_empty_led(char stato, char tempo)
{
char n, wrong, xy, led=64;
reset(1-stato);
while (led!=0) //quando led è uguale a 0, finisce.
{
if (wrong) //Controlla se il numero è giusto o meno
{ //se è sbagliato,
n++; //aumenta di 1 n a meno che,
if (n>64) //non sia già arrivato a 65
{ n=0; } //quindi lo riporta a 0.
}
else //altrimenti,
{ n=(rand() & led) -2; } //genera un numero casuale (qui non so
//se è giusto il -2).
z_led=n>>4;
xy=n & 15;
y_led=xy>>2;
x_led=xy & 3 ;
if (cambia_if(x_led,y_led,z_led,stato))
{
--led; //diminuisce led.
wrong=0; //e resetta wrong.
check_led(tempo); //accnede i led.
}
else
{
check_led(1); //accende i led per evitare lampeggii.
wrong=1; // mette a 1 wrong perché il numero è sbagliato.
}
}
}
Dimmi se è tutto ok (specialmente per quel -2).
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!
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!
0
voti
Ciao, l'istruzione
non va bene.
Deve essere
La tua contiene 2 errori:
- il -2 non deve essere applicato al risultato del numero casuale generato (se genera 0 cosa ottieni sottraendo 2?)
- non puoi utilizzare la & al posto della %. Se ricordi cosa abbiamo detto qualche messaggio fa, la & può essere utilizzata in alternativa alla % se il numero per cui dividi è pari ad una potenza del 2 meno 1. Possono andare bene i numeri 1, 3, 7, 15, 31, 63. Ma avendo tu adesso un numero qualsiasi da 0 a 63 (ad esempio 62 o 13) non è sempre pari ad una potenza del 2 meno 1.
La funzione che hai scritto è ottimizzabile in fatto di prestazioni, ma verifica prima il corretto funzionamento, poi pensa ad ottimizzarla.
- Codice: Seleziona tutto
{ n=(rand() & led) -2; }
non va bene.
Deve essere
- Codice: Seleziona tutto
{ n=rand() % (led - 1); }
La tua contiene 2 errori:
- il -2 non deve essere applicato al risultato del numero casuale generato (se genera 0 cosa ottieni sottraendo 2?)
- non puoi utilizzare la & al posto della %. Se ricordi cosa abbiamo detto qualche messaggio fa, la & può essere utilizzata in alternativa alla % se il numero per cui dividi è pari ad una potenza del 2 meno 1. Possono andare bene i numeri 1, 3, 7, 15, 31, 63. Ma avendo tu adesso un numero qualsiasi da 0 a 63 (ad esempio 62 o 13) non è sempre pari ad una potenza del 2 meno 1.
La funzione che hai scritto è ottimizzabile in fatto di prestazioni, ma verifica prima il corretto funzionamento, poi pensa ad ottimizzarla.
Fabio
0
voti
c1b8 ha scritto:La tua contiene 2 errori:
Ops! Pensavo che... ho sbagliato.
Domani lo provo sicuramente (niente scuola, mi sono ammalato
Poi ho provato a fare quella modifica del quarzo, e ho notato che mettendo un quarzo da 19MH (da 20 non c'è l'avevo...) non noto molte differenze, per quanto riguarda la luminosità. Mentre per trovare gli ultimi led, è migliorato di molto! Ora li trova quasi subito (è sempre la versione vecchia). Persiste in ogni caso il problema dell'ultimo led acceso, che è sempre lo stesso e non so bene il perché rimane ogni volta acceso, bloccando il programma (invece che ripetere il tutto come dovrebbe).
Un'ultima cosa: Fabio, come avevi calcolato il tempo che impiegavano i cicli di for a fare un ciclo? (ti ricordi? 200 cicli = +o- 1 sec?)
Grazie,
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!
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!
0
voti
Ho provato il programma e funziona, tutto ok. Ora spegne tutti i led e ricomincia correttamente il ciclo.
Ora direi di ritornare alla fase di ottimizzazione, poiché la luminosità dei led è inaccettabile (ho montato dei led ultraluminosi, che se li guardi direttamente ti accecano, e sul cubo sembrano dei led standard!!!).
Anche perché se dovessi mettere su questo gioco:
Che non sfrutta le "nuove funzioni" avrei una differenza di luminosità incredibile!!
Grazie
Davide.
P.S: Potete rispondere alle domandi che ho fatto nel post precedente? Grazie.
Ora direi di ritornare alla fase di ottimizzazione, poiché la luminosità dei led è inaccettabile (ho montato dei led ultraluminosi, che se li guardi direttamente ti accecano, e sul cubo sembrano dei led standard!!!).
Anche perché se dovessi mettere su questo gioco:
- Codice: Seleziona tutto
//Funzione per accendere casualmente i led del piano x e y e li fa scorrere
//verso il basso.
void pioggia(char effetti, char tempo)
{
for (i=0;i<effetti;i++)
{
random(); //Richiama la funzione random.
for (z_led=4; z_led>0; --z_led) //Ciclo che diminuisce z_led finché
{ //diventa 0.
acc_led(x_led,y_led,z_led-1);
porta=random_16; //Il numero random viene messo su portA.
vdelay_ms(tempo);
portb=0;
}
vdelay_ms(tempo<<1);
porta=0x10;
portb=0;
}
}
Che non sfrutta le "nuove funzioni" avrei una differenza di luminosità incredibile!!
Grazie
Davide.
P.S: Potete rispondere alle domandi che ho fatto nel post precedente? Grazie.
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!
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!
0
voti
Non c'è più nessuno???
Penso di essere arrivato ad una bruttissima conclusione...spero di sbagliarmi...
Stavo migliorando un po’ il programma per aumentare la luminosità dei led e mi sono accorto che anche con il programma "vecchio" la luminosità è bassissima! (prima non me ne ero accorto). Pensandoci un po’ su, in effetti tutto torna. Ci sono 64 led, il PIC ne accende uno alla volta, quindi accendendo tutti i led, ogni led rimane acceso per 1/64 e per gli altri 63/64 rimane spento poiché ci sono gli altri led. Anche se noi aumentiamo la velocità non riusciremo mai a cambiare questa situazione! A questo punto penso che l'uso di un demultiplexer sia impossibile.
Io spero di sbagliarmi, altrimenti tutto il lavoro compiuto fin qui è stato tempo perso.
Penso di essere arrivato ad una bruttissima conclusione...spero di sbagliarmi...
Stavo migliorando un po’ il programma per aumentare la luminosità dei led e mi sono accorto che anche con il programma "vecchio" la luminosità è bassissima! (prima non me ne ero accorto). Pensandoci un po’ su, in effetti tutto torna. Ci sono 64 led, il PIC ne accende uno alla volta, quindi accendendo tutti i led, ogni led rimane acceso per 1/64 e per gli altri 63/64 rimane spento poiché ci sono gli altri led. Anche se noi aumentiamo la velocità non riusciremo mai a cambiare questa situazione! A questo punto penso che l'uso di un demultiplexer sia impossibile.
Io spero di sbagliarmi, altrimenti tutto il lavoro compiuto fin qui è stato tempo perso.
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!
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!
0
voti
Ciao,
scusa la latitanza di questi giorni ma ho avuto alcune difficoltà ad essere attivo nel forum.
I prossimi giorni saranno anche peggio.
Chiedevi come calcolare il tempo di ritardo, sinceramente ricordo solo che si trattava di alcune considerazioni approssimative sui tempi di esecuzione del codice generato dal compilatore c. Ora il codice si è complicato e fare le stesse considerazioni non è semplice. Probabilmente conviene ottenere dei tempi di riferimento per simulazione .
In quanto alla luminosità dei led hai sicuramente ragione. L'accendere un led alla volta tra 64 ti riduce la luminosità anche con il miglior programma possibile.
Diversamente dovresti complicare il circuito da utilizzare.
Devi decidere se il risultato ottenuto è accettabile o meno e quindi decidere come proseguire con il progetto.
Non ritengo comunque che quanto fatto sia tempo sprecato, come minimo ti è servito per fare esperienza di programmazione.
scusa la latitanza di questi giorni ma ho avuto alcune difficoltà ad essere attivo nel forum.
I prossimi giorni saranno anche peggio.
Chiedevi come calcolare il tempo di ritardo, sinceramente ricordo solo che si trattava di alcune considerazioni approssimative sui tempi di esecuzione del codice generato dal compilatore c. Ora il codice si è complicato e fare le stesse considerazioni non è semplice. Probabilmente conviene ottenere dei tempi di riferimento per simulazione .
In quanto alla luminosità dei led hai sicuramente ragione. L'accendere un led alla volta tra 64 ti riduce la luminosità anche con il miglior programma possibile.
Diversamente dovresti complicare il circuito da utilizzare.
Devi decidere se il risultato ottenuto è accettabile o meno e quindi decidere come proseguire con il progetto.
Non ritengo comunque che quanto fatto sia tempo sprecato, come minimo ti è servito per fare esperienza di programmazione.
Fabio
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 7 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


