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

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

Messaggioda Foto UtenteGalaxi93 » 17 apr 2009, 22:30

posta10100 ha scritto:
Soprattutto perché il PIC che hai scelto (16F648A) ha solo 256 byte di memoria... bisogna risparmiarla!


No, guarda che quella è la memoria ram! La memoria flash (quella che occupa il programma) è di 4096 byte!
Sbaglio?
Ma cos’è che vorresti realizzare? Sempre per comandare i led? Io ho già fatto tutto per la gestione dei led, date delle coordinate, forse è il modo per accendere più led, che dovrebbe essere semplificato e migliorato.

Dimmi tu.

Ciao,
Davide.
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

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

Messaggioda Foto Utentec1b8 » 17 apr 2009, 22:42

Se interpreto bene il pensiero di posta10100 l'idea è quella di generare un effetto che accenda casualmente i led del cubo, ma senza spegnere quelli precedentemente accesi.
Per realizzare questo è necessario memorizzare lo stato di ogni led, 64 led quindi 64 bit.
All'interno dei soliti cicli for è poi sufficiente verificare i bit per accendere o spegnere il led corrispondente.
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

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

Messaggioda Foto Utenteposta10100 » 17 apr 2009, 22:46

Infatti è la memoria ram a scarseggiare!
Quando crei una variabile, riservi un certo spazio nella memoria ram. Scrivendo in C non ti rendi conto di quanto spazio vai effettivamente ad utilizzare...

Se ad esempio fai un ciclo for
Codice: Seleziona tutto
int i;
for (i = 0; i < 10;i++) {
}


Questo for nullafacente ha in realtà utilizzato per il tempo in cui è stato in esecuzione 2 byte di memoria per contenere la variabile contatore i.

Quando la memoria è poca va usata con parsimonia...

Quello che voglio fare è memorizzare lo stato on/off dei led sulla falsa riga di quanto fatto nel codice contenuto nel file zip in modo da non dover riscrivere in maniera significativa le procedure.
Poi si troverà un modo per scrivere un loop che legge lo stato di ogni singolo led e lo accende se necessario.
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

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

Messaggioda Foto Utenteposta10100 » 17 apr 2009, 22:47

c1b8 hai visto giusto, e hai scritto più veloce! =D>
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

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

Messaggioda Foto UtenteGalaxi93 » 17 apr 2009, 23:14

Purtroppo me ne accorgo di come la memoria si occupa in un attimo (mikro C me lo indica quando compila il codice).
Purtroppo ho a disposizione solo quei due PIC (16f84 e 16f648a).
Ora ho capito quello che vuoi fare, anche se non troppo :( .
C'è, ad esempio, io non riesco a capire che cosa fa questa funzione (è dentro la cartella, file effect.c):
Codice: Seleziona tutto
// Randomly fill or empty the cube with n voxels.
void random_filler (int iterations, int pixels, int delay, int state)
{
   int i;
   int p;
   for (i = 0; i < iterations; i++)
   {
      for (p=0;p<=pixels;p++)
         altervoxel(rand()%4,rand()%4,rand()%4,state);
         
      delay_ms(delay);
   }
}


Se mi spiegate brevemente cosa fa, ve ne sarei molto grato!
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

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

Messaggioda Foto Utenteposta10100 » 17 apr 2009, 23:18

Ho scritto la procedura per memorizzare lo stato dei led.
Queste le dichiari globali
Codice: Seleziona tutto
char map[8];               //Contengono lo stato dei led

E questo è il metodo
Codice: Seleziona tutto
    //Funzione che converte un char numerico in una maschera
    char converti(char c) {
        char a = 1;
        char b;
        for (b = 0; b < c; b++) {
            a << 1;
        }
    }


    //Funzione che codifica lo stato dei led
    void cambiaStato(char x, char y, char z, bool stato) {
        char maschera = converti(x);
        if (!stato) {
           maschera != maschera;
        }
        char index;
        if (y < 2) {
            index = z * 2;
        } else {
            index = (z * 2) + 1;
        }
        if (stato) {
            map[index] |= maschera;
        } else {
            map[index] &= maschera;
        }
    }




Prova a vedere se compila senza fare troppi capricci... poi vediamo come fare l'operazione inversa, dalla mappa alla posizione!

Ciao,
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

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

Messaggioda Foto UtenteGalaxi93 » 17 apr 2009, 23:39

Il brutto di mikroC è che quando c'è un errore nel codice, non te lo indica mai precisamente!!
Il tuo codice da molti errori, che non capisco.
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

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

Messaggioda Foto Utentec1b8 » 17 apr 2009, 23:40

Perdonami ma non mi è molto chiaro.

La converti ok, poteva essere scritta in altra forma (es usare la pow()) ma va bene, attenzione che non torna il valore di a calcolato e che il ciclo è bene comincia da 1, avendo inizializzato a ad 1.

Non capisco la cambiaStato (ps. corretto uso della sintassi per i nomi, se ne vedono pochi sui forum così, complimenti).
Avevo immaginato un piano memorizzato ogni 4 semi-byte, di conseguenza la conversione immaginavo non dovesse dipendere solo da x ma anche da y (bit 0-3 per y=1 o 3, bit 4-7 per y=2 o 4).
Cosa mi sfugge?
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

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

Messaggioda Foto Utenteposta10100 » 18 apr 2009, 0:03

c1b8 ha scritto:attenzione che non torna il valore di a calcolato


Ops. dimenticato! #-o
Codice: Seleziona tutto
//Funzione che converte un char numerico in una maschera
    char converti(char c) {
        char a = 1;
        char b;
        for (b = 0; b < c; b++) {
            a << 1;
        }
        return a;
    }


Ecco fatto!

c1b8 ha scritto:La converti ok, poteva essere scritta in altra forma (es usare la pow()) ma va bene


Si ma dal manuale la pow usa i double, la memoria è poca, meglio tenersela stretta!
Tra l'altro così mi evito un cast con tutti i warning del caso!

c1b8 ha scritto:corretto uso della sintassi per i nomi, se ne vedono pochi sui forum così, complimenti


Grazie!
Immagina un progetto da oltre 1300 file con circa 2000 classi (java) con i nomi scritti a caso...
Scrivere con la sintassi corretta è un obbligo a certi livelli...
c1b8 ha scritto:Avevo immaginato un piano memorizzato ogni 4 semi-byte

E' esattamente quello che ho fatto...
Sono 8 char da 8 bit ciascuno, z definisce quale coppia di byte devo usare, y quale dei 2 byte, e x setta o resetta il bit corrispondente.

c1b8 ha scritto:(bit 0-3 per y=1 o 3, bit 4-7 per y=2 o 4)


Più o meno quello che ho fatto solo che ho disposto diversamente i bit...
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

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

Messaggioda Foto Utenteposta10100 » 18 apr 2009, 0:04

Galaxi93 ha scritto:Il brutto di mikroC è che quando c'è un errore nel codice, non te lo indica mai precisamente!!
Il tuo codice da molti errori, che non capisco.


Quali sono gli errori?
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

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti