Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16461
Don't know what I do
|
 |
« Reply #15 on: September 12, 2012, 01:51:54 pm » |
Leggi il mio mega post, è tutto scritto lì. Per scomporre un numero di 4 byte (32 bit) devi usare diversi AND a livello di bit. 1) Prendi il numero e fai un AND con 255 (binario 0b11111111): ottieni i primo 8 bit a destra; 2) sposti il numero di 8 bit a destra (operazione numero>>  e poi fai un altro AND con 255: ottieni i secondi 8 bit ecc... 3) ogni volta ottieni un byte (8 bit) e lo salvi in una cella
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #16 on: September 12, 2012, 03:07:27 pm » |
ho scritto questo breve codice guardando i serial print quello che ricompone senza passare per la memoria (Z) da valore corretto invece quello che prende i dati dalla memoria (P) da valore sbagliato  #include <EEPROM.h>
long K = 444456699;
long A; long B; long C; long D;
long Z;
long p;
void setup(){ Serial.begin(9600);
A= (K >> 24) & 0b11111111; B= (K >> 16) & 0b11111111; B= (K >> 8) & 0b11111111; D= K & 0b11111111; EEPROM.write(1, A); EEPROM.write(2, B); EEPROM.write(3, C); EEPROM.write(4, D);
}
void loop(){
Z = (A << 24) | (B <<16) | ( B <<8) | D;
p = (EEPROM.read(1)<<24) | (EEPROM.read(2)<<16) | (EEPROM.read(3)<<8) | EEPROM.read(4);
Serial.println (Z); Serial.println (p); }
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16461
Don't know what I do
|
 |
« Reply #17 on: September 12, 2012, 03:16:13 pm » |
Intanto fai assegnazione a A-B-B-D e non ad A-B- C-D  Perché poi dichiari A, B, C e D di tipo long? Esse devono contenere 8 bit, quindi devono essere di tipo byte.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #18 on: September 12, 2012, 03:45:08 pm » |
 azz che svista la doppia B domani "aggiusto" e riprovo
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16461
Don't know what I do
|
 |
« Reply #19 on: September 12, 2012, 03:56:06 pm » |
Ho riguardato il tuo codice, non ti funzionava anche per via del casting dei tipi. Questo funziona. #include <EEPROM.h>
unsigned long K = 0xA0B0C0D0;
byte A; byte B; byte C; byte D;
unsigned long Z;
unsigned long p;
void setup(){ delay(2000); Serial.begin(9600);
A = (K >> 24) & 0b11111111; B = (K >> 16) & 0b11111111; C = (K >> 8) & 0b11111111; D = K & 0b11111111; Serial.println(A, HEX); Serial.println(B, HEX); Serial.println(C, HEX); Serial.println(D, HEX); EEPROM.write(1, A); EEPROM.write(2, B); EEPROM.write(3, C); EEPROM.write(4, D); Z = ((unsigned long)(A) << 24) | ((unsigned long)(B) << 16) | ((unsigned long)(C) << 8) | (unsigned long)(D); p = ((unsigned long)(EEPROM.read(1)) << 24) | ((unsigned long)(EEPROM.read(2)) << 16) | ((unsigned long)(EEPROM.read(3)) << 8) | (unsigned long)(EEPROM.read(4));
Serial.println(Z, HEX); Serial.println(p, HEX); }
void loop(){
} Te l'ho messo in esadecimale così vedi come vengono scomposte le variabili.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #20 on: September 13, 2012, 09:04:42 am » |
ALLORA, il codice l'ho aggiustato cosi visto che per il nostro progetto serve una cosa max 5 cifre da -99999 a 99999, cosi fa quello che voglio ,  #include <EEPROM.h>
long K = -99999;
byte A; byte B; byte C; byte D; long p;
void setup(){ Serial.begin(9600);
A = (K >> 24) & 0b11111111; B = (K >> 16) & 0b11111111; C = (K >> 8) & 0b11111111; D = K & 0b11111111;
EEPROM.write(1, A); EEPROM.write(2, B); EEPROM.write(3, C); EEPROM.write(4, D);
p = ((unsigned long)(EEPROM.read(1)) << 24) | ((unsigned long)(EEPROM.read(2)) << 16) | ((unsigned long)(EEPROM.read(3)) << 8) | (unsigned long)(EEPROM.read(4)); Serial.println(p); }
void loop(){
}
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #21 on: September 13, 2012, 09:17:44 am » |
è vero che non cambia niente, ma perchè quando fai le letture da eeprom fai il cast a unsigned long e non a long?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16461
Don't know what I do
|
 |
« Reply #22 on: September 13, 2012, 09:43:50 am » |
2 piccole cose: La prima: è vero che non cambia niente, ma perchè quando fai le letture da eeprom fai il cast a unsigned long e non a long?
Se devi gestire numeri negativi, non serve fare il casting con l'unsigned. La seconda: ALLORA, il codice l'ho aggiustato (....) cosi fa quello che voglio ,  Un "grazie" ci poteva anche stare, visto che te l'ho scritto io
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #23 on: September 13, 2012, 10:36:46 am » |
si appunto basta e avanza il casting a long.. ALLORA, il codice l'ho aggiustato (....) cosi fa quello che voglio ,  Un "grazie" ci poteva anche stare, visto che te l'ho scritto io dov'è il bottone "mi piace"? 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #24 on: September 13, 2012, 10:55:12 am » |
Un "grazie" ci poteva anche stare, visto che te l'ho scritto io
il grazie era sottinteso  anzi tu fai parte del progetto (sei la seconda anima) visto che sei sempre disponibile e quasi completo manca solo qualche piccolo ritocco sia al codice (tastini da premere che memorizzano) che all'ardware poi publichiamo tutto magari prima faccio un video privato su youtube e sento la tua opinione
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #25 on: September 13, 2012, 11:00:28 am » |
che progetto stai facendo,tra l'altro?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16461
Don't know what I do
|
 |
« Reply #26 on: September 13, 2012, 12:47:20 pm » |
Un "grazie" ci poteva anche stare, visto che te l'ho scritto io
il grazie era sottinteso   anzi tu fai parte del progetto (sei la seconda anima) visto che sei sempre disponibile
Cos'è, un "abile: arruolato"? Di tempo non ne ho per i miei, di progetti... 
|
|
|
|
|
Logged
|
|
|
|
|
|