do jednego typu DOUBLE, próbowałem na shiftach i nic komplilator wawala jakieś błędy. Chodzi o to że ten rejestr przechowuje wartość 40 bit i jak je wydostać z tego kawałka krzemu i scalić w jedeną zmienną.
Zapodaję ostatnią moją próbę, ale kompilator wywala błąd error - 31. Bardzo bym prosił o pomoc w tej programistycznej matmie.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Dim Charge_1 As Byte ' Tablica przechowująca 5 bajtów rejestru CHARGE
- Dim Charge_2 As Byte
- Dim Charge_3 As Byte
- Dim Charge_4 As Byte
- Dim Charge_5 As Byte
- Dim Charge_40bit As Double ' Surowa wartość z rejestru CHARGE (40 bitów)
- Dim Charge_ah As Dword ' Wynik w amperogodzinach (Ah)
- Dim Text_ah As String * 8
- Dim Dane1 As Double
- Dim Dane2 As Double
- Dim Dane3 As Double
- Dim Dane4 As Double
- Dim Dane5 As Double
- ' Funkcja odczytu rejestru CHARGE
- ' Funkcja łączenia bajtów w 40-bitową liczbę
- Sub Read_charge_ina228
- ' Local Temp1 As String * 3
- ' Local Temp2 As String * 3
- ' Local Temp3 As String * 3
- ' Local Temp4 As String * 3
- ' Local Temp5 As String * 3
- ' Local Temp As String * 40
- ' Odczyt 5 bajtów z rejestru CHARGE (adres = 0x0A)
- I2cstart #6
- I2cwbyte Ina228_aaddress_write , #6 ' Adres urządzenia + Write
- I2cwbyte Ina228_charge , #6 ' Adres rejestru CHARGE
- I2crepstart #6
- I2cwbyte Ina228_aaddress_read , #6 ' Adres urządzenia + Read
- ' Pobierz 5 bajtów
- I2crbyte Charge_1 , Ack , #6
- I2crbyte Charge_2 , Ack , #6
- I2crbyte Charge_3 , Ack , #6
- I2crbyte Charge_4 , Ack , #6
- I2crbyte Charge_5 , Nack , #6
- I2cstop #6
- Dane1 = 4294967296 * Charge_1
- Charge_40bit = Dane1
- Dane2 = 16777216 * Charge_2
- Charge_40bit = Charge_40bit + Dane2
- Dane3 = 65536 * Charge_3
- Charge_40bit = Charge_40bit + Dane3
- Dane4 = 256 * Charge_4
- Charge_40bit = Charge_40bit + Dane4
- Dane5 = Charge_5
- Charge_40bit = Charge_40bit + Dane5
- ' Połączenie wszystkich bajtów za pomocą operacji OR
- ' Charge_40bit = Charge_raw(1)
- ' Połącz 5 bajtów w jedną liczbę 40-bitową
- ' Temp1 = Str(charge_raw(1))
- ' Temp2 = Str(charge_raw(2))
- ' Temp3 = Str(charge_raw(3))
- ' Temp4 = Str(charge_raw(4))
- ' Temp5 = Str(charge_raw(5))
- ' Temp = Temp1 + Temp2
- ' Temp = Temp + Temp3
- ' Temp = Temp + Temp4
- ' Temp = Temp + Temp5
- ' Text_40bit = Temp
- ' Charge_40bit = Val(temp)
- ' Charge_40bit = Charge_40bit * 0.000038147 ' Charge_40bit=double
- End Sub
