Non so se si ala sezione adatta...al fine di aggiornare la data in una batteria smart in cui ho sostituito le celle, devo inserire la nuova data. Ora leggendo i dato della batteri alegguo quanto segue:
(1B) Manufacture Date = 0x5149 - 2020.10.09
ovvero il valore all'indirizzo 1B è 5149 cui corrisponde 2020.10.09
Non riesco a capire che conversione sia stata applicata. Mi potete aiutare a comprendere?
Ho provato anche degliesempi excel trovati sul web, m apur inserendo gli stessi dati non mi viene il risultato dell'esempio.
https://www.google.com/search?q=excel+c ... sadecimale
Convertire data in esadecimale
Moderatore:
Paolino
10 messaggi
• Pagina 1 di 1
0
voti
Convertendo il valore esadecimale in binario si ottiene il valore [0101 0001 0100 1001]:
I primi 4 Bit in decimale è il valore 10 leggendo, i bit centrali sono il valore 20(l'anno) e gli ultimi quattro sono il valore 9, c'è da capire quale sia il mese e quale sia il giorno, c'è anche da capire il modo in cui si leggono questi bit...
I primi 4 Bit in decimale è il valore 10 leggendo, i bit centrali sono il valore 20(l'anno) e gli ultimi quattro sono il valore 9, c'è da capire quale sia il mese e quale sia il giorno, c'è anche da capire il modo in cui si leggono questi bit...
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
0
voti
non ho idea...ho smanettato un po' con le varie calcolatrici on line ma nulla di fatto, però ragionando in esadecimale sono arrivato ad oggi che è 5B7D ed ho inserito il valore nella locazione.
0
voti
Potrebbe essere un caso ma sembrano a gruppi di 5 bit da destra
2020-10-09 ... A me sembra che sia codificato nel seguente modo
Quindi oggi 2025-11-29
cioè 0x657D
dovrebbe durarti fino al 2063...
2020-10-09 ... A me sembra che sia codificato nel seguente modo
- Codice: Seleziona tutto
-----| 010100 | 01010 | 01001
20 | 20 | 10 | 9
20 | aa | mm | gg
Quindi oggi 2025-11-29
- Codice: Seleziona tutto
-----| 011001 | 01011 | 11101
20 | 25 | 11 | 29
cioè 0x657D
dovrebbe durarti fino al 2063...
0
voti
Se 0x5B7D è oggi allora la mia decodifica non va bene.
il 9/10/2020 era per caso codificato come mi sembrava.
Comunque sembra che
se prendi il numero esadecimale e lo converti in binario hai una serie di bit (prova con la calcolatrice di windows ad es, impostando dal menu il modo programmatore, se clicchi sul formato - HEX, DEC, BIN... - imposti il modo di inserimento del numero)
i primi 5 da destra sono il giorno (preciso preciso da 1 a 31...)
i successivi 4 bit sono il mese
i successivi 3 sembrano l'ultima cifra dell'anno
rimangono 4 bit (di fatto i primi 4 da sinistra) che non capisco
In questo modo si spiegano 0x5149 e 0x5B7D
Ma se metti 0x6B7D oppure 0x4B7D che mostra?
il 9/10/2020 era per caso codificato come mi sembrava.
Comunque sembra che
se prendi il numero esadecimale e lo converti in binario hai una serie di bit (prova con la calcolatrice di windows ad es, impostando dal menu il modo programmatore, se clicchi sul formato - HEX, DEC, BIN... - imposti il modo di inserimento del numero)
i primi 5 da destra sono il giorno (preciso preciso da 1 a 31...)
i successivi 4 bit sono il mese
i successivi 3 sembrano l'ultima cifra dell'anno
rimangono 4 bit (di fatto i primi 4 da sinistra) che non capisco
In questo modo si spiegano 0x5149 e 0x5B7D
Ma se metti 0x6B7D oppure 0x4B7D che mostra?
4
voti
la "regola" veloce per ottenere il decimale dalla data è:
si verifica con la data iniziale che:
2020/10/09 in decimale diventa 20809 e in hex 0x5149
e ieri:
2025/11/29 in decimale diventa 23421 e in hex 0x5B7D
invece ragionando in digitale
:
abbiamo 2 byte, 16 bit, che vanno divisi così: 7bit (anno-1980) / 4bit (mese) / 5bit (giorno)
0x5149 -> 0101000101001001
ricordando di aggiungere 1980
Se invece voglio la data di oggi, 2025/11/30:
ah.. se non sbaglio la data massima dovrebbe essere il 31/12/2107
OT:
chissà poi perché viene usato un sistema così: i controlli per i mesi che non hanno 31gg o per evitare un numero del mese >12 devono essere fatti da qualche parte... no?
Non era più semplice adottare un sistema stile unix time? giorni passati da una data X e fine.

- Codice: Seleziona tutto
(anno–1980) x 512 + mese x 32 + giorno
si verifica con la data iniziale che:
2020/10/09 in decimale diventa 20809 e in hex 0x5149
e ieri:
2025/11/29 in decimale diventa 23421 e in hex 0x5B7D
invece ragionando in digitale
abbiamo 2 byte, 16 bit, che vanno divisi così: 7bit (anno-1980) / 4bit (mese) / 5bit (giorno)
0x5149 -> 0101000101001001
- Codice: Seleziona tutto
0101000 1010 01001
40 10 9
ricordando di aggiungere 1980
- Codice: Seleziona tutto
2020 10 9
Se invece voglio la data di oggi, 2025/11/30:
- Codice: Seleziona tutto
45 11 30
0101101 1011 11110
0101101101111110
0x5B7E
ah.. se non sbaglio la data massima dovrebbe essere il 31/12/2107
OT:
chissà poi perché viene usato un sistema così: i controlli per i mesi che non hanno 31gg o per evitare un numero del mese >12 devono essere fatti da qualche parte... no?
Non era più semplice adottare un sistema stile unix time? giorni passati da una data X e fine.

in /dev/null no one can hear you scream
1
voti
Come ho fatto a non accorgermi che quel 40 rimanente era 2020-1980....
Pensavo ad una codifica il più semplice possibile ma con minime operazioni, al massimo shift.
Se però rileggiamo bene è un campo presumibilmente immutabile, scritto una volta e basta.... "Manufacture Date"... e quante volte mai sarà stato fabbricato?
Pensavo ad una codifica il più semplice possibile ma con minime operazioni, al massimo shift.
Se però rileggiamo bene è un campo presumibilmente immutabile, scritto una volta e basta.... "Manufacture Date"... e quante volte mai sarà stato fabbricato?
0
voti
angus ha scritto:Non era più semplice adottare un sistema stile unix time? giorni passati da una data X e fine.
...ma perché tutto st'ambaradam? O meglio, è una data memorizzata e li rimane senza dover esser più toccata. A che serve st'algoritmo?
Risolto il primo rebus propongo il secondo. Siamo sempre nella stessa smart battery del drone DIJ Mini alle cui batterie ho sostituito tutte le celle interne. bene...la data l'ho inserita nel chip e la leggo correttamente alla locazione 1B.
Alla locazione 17 ho invece il valore "espresso decimalmente" dei cicli di ricarica, quindi un counter che quando la batteria viene sottoposta a ricarica, "dovrebbe" scattare di volta in volta in avanti. Succede che dopo aver resettato il valore, scrivendo nella locazione di memoria il valore 1 e resettato il chip, il contatore NON avanza.
Cosa potrebbe essere successo o cosa potrebbe essere necessario nella logica di funzionamento?
10 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
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)



