Sida 2 av 3

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 19:59:15
av TomasL
Men varför svarar du inte på de frågor vi ställt, och nej det du gissade nu sist stämmer inte.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:08:10
av Nerre
Därför att han inte vet?

Frågan är ju hur de fyra bytesen blir värdet längst till höger, enhet har väl inget med det att göra? Det spelar ingen roll om det är 921 elefanter, 0x03ff0864 ska bli 921.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:17:55
av TomasL
Det förenklar ju det hela om man vet vad som faktiskt presenteras.

Problemet är ju också att vi inte vet vilken givare det är.
TS skrev att det troligen är en AMS-givare, då länkas man hit
https://www.sciosense.com/products/envi ... l-sensors/
I databladet för ENS161 kan man läsa

Kod: Markera allt

eTVOC 0 – 65,000 1 ppb 
Och detta stämmer rätt dåligt med de data som presenterats

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:27:56
av Nerre
Det spelar väl ingen som helst roll? Frågan handlar ju om att läsa ut de där 4 bytesen och kunna presentera dem som det värde som står längst till höger. Givaren sitter ju på andra sidan sidan av mikrocontrollern?

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:29:18
av TomasL
Problemet är att givarna bara ger 2 byte.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:31:18
av MadModder
Men han läser ju inte data från givaren skrev han, utan från MCU. Högst troligen har MCU räknat om från 0-65000 till något helt annat, som sen skickas via wifi. Det är den datan som undersöks.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:32:35
av TomasL
Jo, men varför skicka 4 byte, när man bara får två.
Jag tror att TS har tolkat data fel.
Det vore intressant att se hela datapaketet och hans tolkning av det.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:33:27
av Nerre
MCU kan ha gjort nån konvertering, den vet vi inget om, MCU är en black box. Men jag antar att värdet som står till höger är nåt som presenteras av nån annan enhet (som får data via WiFi?), den enheten tolkar alltså dessa 4 byte till det värde som presenteras. Och det är den tolkningen som behöver lösas.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:34:23
av TomasL
Eller också så är det inte alls de 4 byte som presenteras som faktisk tolkas.

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 20:42:25
av rvl
Men OM det var en digital givare så borde det finnas ett vettigt samband mellan värdena. Men kanske givaren är analog och mcun kokar ihop värdet baserat på AD-värden???

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 21:28:39
av sodjan
Det som skickas från mcu till "wifi-nätet" skulle kunna vara ett 32 bit float värde, och då kan bitarna hoppa runt ganska mycket även för små justeringar i värdet.

Vad är det normalt i andra änden av wifi nätet? Vad är det som har tolkat det till det som kallas "values"?

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 21:32:30
av TomasL
Nja, det stämmer inte heller.
921 blir 0x44 66 40 00

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 21:37:32
av sodjan
Nä, vem vet. Vi har ju inte en aning om hur de där 4 bytsen är kodade...

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 21:40:18
av TomasL
Och det hade ju hjälpt om TS ville beskriva hela systemet, vilka data som visas och vad som visar dem osv, samt hela datapaketet

Re: Hitta formel 4byte till värde

Postat: 9 oktober 2023, 21:56:05
av guckrum
Om man leker lite med siffrorna kan man få tex

Kod: Markera allt

computed  actual error
  909.00  909    0.00
  920.72  921   -0.28
  932.43  932    0.43
  940.55  941   -0.45
  951.35  964  -12.65
  898.18  998  -99.82
 1225.35 1226   -0.65
Där bara två värden som sticker ut. Är tabellen rätt?

Kod: Markera allt

data = []
with open('data.txt') as fh:
    for line in fh:
        data.append(tuple(map(int, line.rstrip('\n').split())))
data = sorted(data, key=lambda x: x[4])

print("computed  actual error")
for a, b, c, d, e in data:
    x = (a * 65536 + b * 256 + d) / (3 * 65536 + 242 * 256 + 94) * 909
    print("%8.2f %4d  % 6.2f" % (x, e, x - e))