Show Posts
Pages: 1 ... 227 228 [229] 230 231 ... 390
3421  International / Generale / Re: Ram+Seriale+Overflow on: April 29, 2012, 04:47:10 am
niente da fare, nessuno dei due

Scrivo a Massimo ?  smiley-yell
3422  International / Generale / Re: Ram+Seriale+Overflow on: April 29, 2012, 03:53:23 am
Non funziona,

la devo aggiungere alla lista (piccolissima) delle volte in cui Testato batte Astro ? smiley

Code:
unsigned long Tempo;
// unsigned int  ScrollTime; // TUTTO OK
int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);    
}

void loop ()
{

Tempo=millis();

 if ((unsigned long)Tempo > (ScrollTime + 300))
    {
     digitalWrite(13, HIGH);  
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW);  
}
3423  International / Generale / Re: Accedere ad una SRAM parallela on: April 29, 2012, 03:04:22 am
molto interessante  smiley
x iscrizione
3424  International / Generale / Re: Ram+Seriale+Overflow on: April 29, 2012, 02:42:55 am
Usa questo, e vedrai,

con UNSIGNED INT l'IF fa il suo dovere, dopo un minuto overflow e led sempre fisso
con INT niente da fare, l'overflow avviene dopo 30 secondi (giustamente la meta' del tempo di Unsigned Int), ma il led resta spento
Code:
unsigned long Tempo;
unsigned int  ScrollTime; // TUTTO OK
//int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);     
}

void loop ()
{

Tempo=millis();

 if (Tempo > ScrollTime + 300)
    {
     digitalWrite(13, HIGH); 
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW); 
}
3425  International / Generale / Re: Ram+Seriale+Overflow on: April 29, 2012, 02:30:29 am
nono, spetta, la virgola e' un errore di adesso derivato da copia incolla del reference.
nei test non c'e', anche perche' nei test c'e' il nome della variabile.
e' la variabile che inspiegabilmente non fa il suo dovere
io leo e lesto abbiamo provato, il led resta spento.
prova tu e vediamo
3426  International / Generale / Re: dritta su lcd on: April 29, 2012, 02:26:26 am
il tutto scuro o tutto chiaro dipende anche dal tipo di display, l'i2c sul quale sto' lavorando ad esempio e' negativo, cioe' contrasto 0 = tutto nero. (menny lo hai comprato anche tu se ricordo bene)

posta anche il codice esatto del display
3427  International / Generale / Re: Ram+Seriale+Overflow on: April 29, 2012, 01:50:57 am
Grazie uwe e Astro per le spiegazioni, si, sono daccordo, devo imparare cosa e' il cast per capire a fondo le spiegazioni, quindi tutto ok su questi punti.


MENTRE......

@Testato:
resta il fatto che "sulla carta" sembra così ma il mio test (scusa, ti ho rubato il lavoro) al reply #58 dimostra come poi il comportamento sia diverso da quello previsto.

Leo io stanotte ci ho sbattuto la testa, non e' risolto proprio nulla su questa questione, il problema persiste.
Tu leo, quando dici che con unsigned int il risultato e' Inaspettato, sei fuori strada, perche' e' proprio la condizione giusta questa qui.

Cioe', con ScrollTime ad UNSIGNED INT
Code:
unsigned long Tempo;
unsigned int  ScrollTime;

void setup ()
{}

void loop ()
{

Tempo=millis();

 if (Tempo > ScrollTime + 300)
    {
    accendi_LED13();
    ScrollTime = millis();
    }
}
Il led resta fisso acceso dopo l'overflow (cosa precedentemente da me verificata tramite il display che scrollava a razzo) ed e' la condizione normale, quella che anche lesto ieri ha capito, infatti matematicamente all'overflow dell'Unsigned Int, l'IF diventa:
Code:
if (Tempo > ScrollTime + 300)
if (65536 > (0+ 300)) (SARA' SEMPRE VERA, QUINDI LED FISSO ACCESO)

Il problema invece che nessuno sa spiegare, e prego Astro a svelare il segreto se veramente c'e' una soluzione semplice come da lui dichiarato, e' che con ScrollTime dichiarata INT, all'owerflow della stessa l'IF si blocca, eppure matematicamente non dovrebbe, l'IF dovrebbe verificarsi sempre, allo stesso modo della Unsigned Int, perche' matematicamente diventa:
Code:
if (Tempo > ScrollTime + 300)
if (32768 > (-32768+300)) DOVREBBE ESSERE SEMPRE VERA, INVECE NON LO E', IL LED E' SPENTO
3428  International / Generale / Re: Ram+Seriale+Overflow on: April 28, 2012, 05:19:19 pm
In realta' non e' tutto banale o chiarissimo dai,
perche' non dovrei aspettarmi normali overflow dalle variabili ?

guardate che anche la mia seconda domanda e' verificabile tranquillamente, assegnate

ScrollTime=100000;

1- l'ide non da nessun errore (lesto prova pure tu, io su 1.0 non ho errori)
2- stampate ScrollTime ed avete -31072

e' normale ?

Io mi aspetterei:
1- che l'ide non me lo lasci fare
2- se proprio me lo lascia fare la variabile deve prendere il valore di overflow che mi aspetterei essere -32,768 per una INT
3429  International / Generale / Re: Per esperti: posso farcela? on: April 28, 2012, 03:04:41 pm
ottimo risultato, complimenti

se hai altri test da fare ricordati di me, cosi' mi fai qualche pcb, te li pago  smiley

o.t. su questo forum si trova di tutto, tranne un tizio che faccia pcb a pagamento, cioe' roba come la tua, senza serigrafia, solo pcb e fori
3430  International / Generale / Re: Ram+Seriale+Overflow on: April 28, 2012, 02:52:12 pm
grazie uwe, dovro' leggerlo a mente fresca, la matematica non e' il mio forte  smiley

x lesto: Astro lo aveva gia' notato e ci sta' ridendo addosso ?  smiley
Leo tu nemmeno te ne eri accorto pero', e' stata una bella sfida  smiley

Quindi non avevo scoperto nessun bug, ma il tutto mi ha insegnato molto e spero anche al resto della community.

Resta in piedi una vecchia domanda, ed una nuova nuova.

la vecchia: nessuno ha risposto sul perche' una Float quando va in overflow si blocca restituendo 0,00 in eterno
la nuova: perche' l'arduino IDE 1.0 accetta una dichiarazione del genere ?
Code:
int  ScrollTime=10000;
Non sarebbe corretto che avvisasse in fase di compilazione ? gli altri compilatori come si comportano ?

3431  International / Megatopic / Re: swRTC on: April 28, 2012, 02:29:19 pm
ho testato la 1.0.2, tutto ok con il time stamp

ricordati di rtc.getWeekDay quando ci rimetterai mano.

Inoltre credo sarebbe comodo e bello che nello sketch di esempio ci inserissi tutte le funzioni, quindi includere timestamp e weekday

non so se e' una svista, ma nel primo post del topic sono inserite due versioni, perche' non lasci solo l'ultima ?
3432  International / Generale / Re: Ram+Seriale+Overflow on: April 28, 2012, 09:42:13 am
grazie uwe per la segnalazione, questo spiega almeno un dubbio.

pero' e domande sono tutte li'.
Leo pero' una variabile a 32bit se e' unsigned va da 0 a 4Giga, se e' signed va da -2Giga a +2Giga

Questo Float invece va da -2G a +4G, perche' ?

le domande restano tutte in piedi, e se lanci il mio sketch lo verifichi tu stesso:
Quote
Con questo codice:
- Parte da -2miliardi
- Inizia a crescere verso il positivo sbagliando tutte le somme
- Passa per lo zero continuando verso numeri positivi
- A +4 miliardi si schianta su 0,00


come vedi il comportamento e' diverso da tutte le altre variabili. infine si schianta, le altre no, ripartono sempre  smiley
3433  International / Hardware / Re: Modulo SIM908: GSM+GPRS + GPS a 48 euro! on: April 28, 2012, 08:19:17 am
x iscrizione
3434  International / Generale / Re: Ram e Seriale on: April 28, 2012, 05:30:40 am
Inoltre come mai come minimo numero accetta -2Miliardi, ma come massimo numero +4miliardi ?

essendo un Signed a 32bit mi aspettavo -2Giga/+2Giga di escursione

inoltre sbaglia alla grande i risultati di semplici somme, avevo letto che fosse impreciso, ma credevo solo sulla parte decimale.

provate a lanciare:
Code:
float Tempo;  

void setup () {
    Serial.begin(19200);
    Serial.print('\n');
    Serial.println("Partito");
   Tempo=-2000000000;
}

void loop () {
  
    Tempo+=1000000;

       Serial.println(Tempo);
    
 }

Con questo codice:
- Parte da -2miliardi
- Inizia a crescere verso il positivo sbagliando tutte le somme
- Passa per lo zero continuando verso numeri positivi
- A +4 miliardi si schianta su 0,00
3435  International / Generale / Re: Ram e Seriale on: April 28, 2012, 04:58:40 am
ma la Float dopo l'overflow non riparte, e' normale ?

Code:
float Tempo;

void setup () {
    Serial.begin(19200);
    Serial.println("Partito");
}

void loop () {
   
    Tempo+=1000000;

       Serial.println(Tempo);
 
}

Appena superato i 4 miliardi e dispari, diventa 0,00 e li' resta
Pages: 1 ... 227 228 [229] 230 231 ... 390