Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Convertire data in esadecimale

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Convertire data in esadecimale

Messaggioda Foto Utentevince59 » 29 nov 2025, 20:30

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
Avatar utente
Foto Utentevince59
664 2 3 6
Sostenitore
Sostenitore
 
Messaggi: 1062
Iscritto il: 17 giu 2019, 19:32

0
voti

[2] Re: convertire data in esadecimale

Messaggioda Foto Utentedaniele1996 » 29 nov 2025, 21:14

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...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[3] Re: convertire data in esadecimale

Messaggioda Foto Utentevince59 » 29 nov 2025, 21:25

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.
Avatar utente
Foto Utentevince59
664 2 3 6
Sostenitore
Sostenitore
 
Messaggi: 1062
Iscritto il: 17 giu 2019, 19:32

0
voti

[4] Re: convertire data in esadecimale

Messaggioda Foto UtenteGioArca67 » 29 nov 2025, 22:34

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
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...
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4587
Iscritto il: 12 mar 2021, 9:36

0
voti

[5] Re: convertire data in esadecimale

Messaggioda Foto Utentevince59 » 29 nov 2025, 22:57

..forse la stanchezza ma non seguo. Il problema pratico è risolto perché, come detto, pensando in esadecimale ho aumentato pian piano. Ma mi piacrebbe capire l'algoritmo.
Avatar utente
Foto Utentevince59
664 2 3 6
Sostenitore
Sostenitore
 
Messaggi: 1062
Iscritto il: 17 giu 2019, 19:32

0
voti

[6] Re: convertire data in esadecimale

Messaggioda Foto UtenteGioArca67 » 29 nov 2025, 23:35

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?
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4587
Iscritto il: 12 mar 2021, 9:36

4
voti

[7] Re: Convertire data in esadecimale

Messaggioda Foto Utenteangus » 30 nov 2025, 1:30

la "regola" veloce per ottenere il decimale dalla data è:
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 :mrgreen: :
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? :roll:
Non era più semplice adottare un sistema stile unix time? giorni passati da una data X e fine.
O_/
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25

1
voti

[8] Re: Convertire data in esadecimale

Messaggioda Foto UtenteGioArca67 » 30 nov 2025, 9:35

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? :mrgreen:
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4587
Iscritto il: 12 mar 2021, 9:36

0
voti

[9] Re: Convertire data in esadecimale

Messaggioda Foto Utentevince59 » 30 nov 2025, 12:49

angus ha scritto:Non era più semplice adottare un sistema stile unix time? giorni passati da una data X e fine.
O_/



...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?
Avatar utente
Foto Utentevince59
664 2 3 6
Sostenitore
Sostenitore
 
Messaggi: 1062
Iscritto il: 17 giu 2019, 19:32

0
voti

[10] Re: Convertire data in esadecimale

Messaggioda Foto Utenteangus » 30 nov 2025, 18:00

questo ti può servire?
Screenshot 2025-11-30 at 17-00-09 bq3050 (Rev. A) - sluu485a.pdf.png
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti