PDA

View Full Version : Somma di byte da C a Basic


audley
15-11-2012, 00:32
Ciao a tutti.
Voglio utilizzare il sensore di pressione BMP85 su duinomite (MMBasic), prendendo spunto dai tanti esempi che si trovano in rete per Arduino (C).
Quando col Basic vado a leggere le word di 16 bit memorizzate nel sensore, mi tornano indietro solo dei numeri decimali positivi, valori sbagliati.
Con Arduino, infatti, tornano indietro alcuni di questi numeri decimali positivi, altri negativi (valori corretti). Parlo dei dati di calibrazione.
Il codice che ho scritto, per leggere la prima word:
5 DIM BYTE(2)
10 I2CEN 100,100
20 I2CSEND &H77, 0, 1, &HAA
30 I2CRCV &H77, 0, 2,BYTE(1)
40 A=BYTE(1)*256+BYTE(2)
50 I2CDIS
60 PRINT A

I valori di BYTE(1) e BYTE(2) che leggo sono corretti, il problema sta nella somma di questi due byte. Come posso risolvere?
Devo convertire BYTE(1) e BYte(2) in binario, fare la somma, poi riconvertire in decimale con complemento a due, o c'è un modo più rapido?
Poi, credo avrò problemi analoghi anche nel leggere il valore di temperatura e di pressione. Grazie!

audley
17-11-2012, 23:36
Risolto:

se A > 32767, allora A=A-65536

Così funziona. Ma perchè? Qualcuno lo sa?

lorenzo001
18-11-2012, 08:31
Risolto:

se A > 32767, allora A=A-65536

Così funziona. Ma perchè? Qualcuno lo sa?

Proprio perché è un valore in complemento a due e non binario puro.

In complemento a due, un valore a 16 bit va da -32768 a 32767 mentre in binario puro da 0 a 65535. L'aggiustamento serve proprio a determinare il corretto valore negativo in complemento a due che non esiste in binario puro.

audley
18-11-2012, 19:52
Ti ringrazio molto per la delucidazione!
Nel frattempo ho completato il codice e devo dire che sono molto contento di questo trasduttore Bosh, funziona molto bene. Un saluto a tutti, anche a quelli che hanno "perso tempo" a leggere il mio post.