diff --git a/MLX90640_test/Makefile b/MLX90640_test/Makefile new file mode 100644 index 0000000..4f2c298 --- /dev/null +++ b/MLX90640_test/Makefile @@ -0,0 +1,58 @@ +# run `make DEF=...` to add extra defines +PROGRAM := mlx +LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all +LDFLAGS += -lusefull_macros -L/usr/local/lib -lm -flto +SRCS := $(wildcard *.c) +DEFINES := $(DEF) -D_GNU_SOURCE -D_XOPEN_SOURCE=1111 +OBJDIR := mk +CFLAGS += -O2 -Wall -Wextra -Wno-trampolines -std=gnu99 -flto +OBJS := $(addprefix $(OBJDIR)/, $(SRCS:%.c=%.o)) +DEPS := $(OBJS:.o=.d) +TARGFILE := $(OBJDIR)/TARGET +CC = gcc +#TARGET := RELEASE + + +ifeq ($(shell test -e $(TARGFILE) && echo -n yes),yes) + TARGET := $(file < $(TARGFILE)) +else + TARGET := RELEASE +endif + +ifeq ($(TARGET), DEBUG) + .DEFAULT_GOAL := debug +endif + +release: $(PROGRAM) + +debug: CFLAGS += -DEBUG -Werror +debug: TARGET := DEBUG +debug: $(PROGRAM) + +$(TARGFILE): $(OBJDIR) + @echo -e "\t\tTARGET: $(TARGET)" + @echo "$(TARGET)" > $(TARGFILE) + +$(PROGRAM) : $(TARGFILE) $(OBJS) + @echo -e "\t\tLD $(PROGRAM)" + $(CC) $(OBJS) $(LDFLAGS) -o $(PROGRAM) + +$(OBJDIR): + @mkdir $(OBJDIR) + +ifneq ($(MAKECMDGOALS),clean) +-include $(DEPS) +endif + +$(OBJDIR)/%.o: %.c + @echo -e "\t\tCC $<" + $(CC) -MD -c $(LDFLAGS) $(CFLAGS) $(DEFINES) -o $@ $< + +clean: + @echo -e "\t\tCLEAN" + @rm -rf $(OBJDIR) 2>/dev/null || true + +xclean: clean + @rm -f $(PROGRAM) + +.PHONY: clean xclean diff --git a/MLX90640_test/Readme b/MLX90640_test/Readme new file mode 100644 index 0000000..a76849d --- /dev/null +++ b/MLX90640_test/Readme @@ -0,0 +1,2 @@ +device-independent MLX90640 processing & test +based on data example from melexis \ No newline at end of file diff --git a/MLX90640_test/alpha.csv b/MLX90640_test/alpha.csv new file mode 100644 index 0000000..82a4341 --- /dev/null +++ b/MLX90640_test/alpha.csv @@ -0,0 +1 @@ +0.0000000364125298802, 0.0000000368781911675, 0.0000000379259290639, 0.0000000383915903512, 0.0000000408363121096, 0.0000000415348040406, 0.0000000416512193624, 0.0000000422332959715, 0.0000000440959411208, 0.0000000446780177299, 0.0000000447944330517, 0.0000000445616024081, 0.0000000460750015918, 0.0000000467734935228, 0.0000000456093403045, 0.0000000456093403045, 0.0000000456093403045, 0.0000000453765096609, 0.0000000443287717644, 0.0000000443287717644, 0.0000000438631104771, 0.0000000432810338680, 0.0000000411855580751, 0.0000000406034814660, 0.0000000393229129259, 0.0000000390900822822, 0.0000000358304532710, 0.0000000355976226274, 0.0000000336185621563, 0.0000000323379936162, 0.0000000291947799269, 0.0000000283798726741, 0.0000000369946064893, 0.0000000375766830985, 0.0000000386244209949, 0.0000000390900822822, 0.0000000414183887187, 0.0000000421168806497, 0.0000000424661266152, 0.0000000428153725807, 0.0000000447944330517, 0.0000000454929249827, 0.0000000454929249827, 0.0000000453765096609, 0.0000000466570782010, 0.0000000474719854537, 0.0000000464242475573, 0.0000000463078322355, 0.0000000463078322355, 0.0000000461914169136, 0.0000000451436790172, 0.0000000450272636954, 0.0000000447944330517, 0.0000000439795257989, 0.0000000420004653279, 0.0000000413019733969, 0.0000000401378201786, 0.0000000399049895350, 0.0000000367617758457, 0.0000000362961145584, 0.0000000345498847309, 0.0000000330364855472, 0.0000000298932718579, 0.0000000290783646051, 0.0000000386244209949, 0.0000000388572516385, 0.0000000403706508223, 0.0000000408363121096, 0.0000000432810338680, 0.0000000436302798335, 0.0000000444451870862, 0.0000000447944330517, 0.0000000464242475573, 0.0000000465406628791, 0.0000000466570782010, 0.0000000474719854537, 0.0000000479376467410, 0.0000000493346306030, 0.0000000478212314192, 0.0000000475884007756, 0.0000000478212314192, 0.0000000477048160974, 0.0000000473555701319, 0.0000000463078322355, 0.0000000461914169136, 0.0000000456093403045, 0.0000000433974491898, 0.0000000438631104771, 0.0000000422332959715, 0.0000000413019733969, 0.0000000387408363167, 0.0000000378095137421, 0.0000000366453605238, 0.0000000352483766619, 0.0000000319887476508, 0.0000000309410097543, 0.0000000390900822822, 0.0000000393229129259, 0.0000000409527274314, 0.0000000414183887187, 0.0000000438631104771, 0.0000000442123564426, 0.0000000450272636954, 0.0000000452600943390, 0.0000000470063241664, 0.0000000472391548101, 0.0000000471227394883, 0.0000000480540620629, 0.0000000482868927065, 0.0000000499167072121, 0.0000000482868927065, 0.0000000481704773847, 0.0000000482868927065, 0.0000000482868927065, 0.0000000479376467410, 0.0000000468899088446, 0.0000000468899088446, 0.0000000463078322355, 0.0000000440959411208, 0.0000000445616024081, 0.0000000428153725807, 0.0000000420004653279, 0.0000000394393282477, 0.0000000385080056731, 0.0000000374602677766, 0.0000000359468685929, 0.0000000326872395817, 0.0000000316395016853, 0.0000000397885742132, 0.0000000404870661441, 0.0000000418840500060, 0.0000000422332959715, 0.0000000456093403045, 0.0000000454929249827, 0.0000000466570782010, 0.0000000464242475573, 0.0000000482868927065, 0.0000000486361386720, 0.0000000484033080284, 0.0000000489853846375, 0.0000000501495378558, 0.0000000494510459248, 0.0000000496838765685, 0.0000000495674612466, 0.0000000498002918903, 0.0000000495674612466, 0.0000000486361386720, 0.0000000481704773847, 0.0000000482868927065, 0.0000000480540620629, 0.0000000460750015918, 0.0000000458421709482, 0.0000000443287717644, 0.0000000439795257989, 0.0000000402542355005, 0.0000000401378201786, 0.0000000386244209949, 0.0000000374602677766, 0.0000000337349774782, 0.0000000330364855472, 0.0000000401378201786, 0.0000000408363121096, 0.0000000424661266152, 0.0000000426989572588, 0.0000000459585862700, 0.0000000460750015918, 0.0000000471227394883, 0.0000000467734935228, 0.0000000486361386720, 0.0000000491017999593, 0.0000000488689693157, 0.0000000494510459248, 0.0000000506151991431, 0.0000000499167072121, 0.0000000501495378558, 0.0000000500331225339, 0.0000000502659531776, 0.0000000499167072121, 0.0000000491017999593, 0.0000000485197233502, 0.0000000487525539938, 0.0000000484033080284, 0.0000000465406628791, 0.0000000463078322355, 0.0000000449108483735, 0.0000000444451870862, 0.0000000407198967878, 0.0000000407198967878, 0.0000000393229129259, 0.0000000379259290639, 0.0000000342006387655, 0.0000000336185621563, 0.0000000418840500060, 0.0000000421168806497, 0.0000000437466951553, 0.0000000442123564426, 0.0000000466570782010, 0.0000000472391548101, 0.0000000472391548101, 0.0000000477048160974, 0.0000000482868927065, 0.0000000495674612466, 0.0000000503823684994, 0.0000000502659531776, 0.0000000514301063959, 0.0000000514301063959, 0.0000000508480297867, 0.0000000509644451085, 0.0000000516629370395, 0.0000000511972757522, 0.0000000502659531776, 0.0000000496838765685, 0.0000000501495378558, 0.0000000491017999593, 0.0000000473555701319, 0.0000000467734935228, 0.0000000464242475573, 0.0000000451436790172, 0.0000000422332959715, 0.0000000414183887187, 0.0000000397885742132, 0.0000000390900822822, 0.0000000352483766619, 0.0000000343170540873, 0.0000000423497112934, 0.0000000425825419370, 0.0000000440959411208, 0.0000000446780177299, 0.0000000471227394883, 0.0000000477048160974, 0.0000000478212314192, 0.0000000480540620629, 0.0000000487525539938, 0.0000000500331225339, 0.0000000507316144649, 0.0000000506151991431, 0.0000000516629370395, 0.0000000516629370395, 0.0000000511972757522, 0.0000000514301063959, 0.0000000520121830050, 0.0000000516629370395, 0.0000000506151991431, 0.0000000500331225339, 0.0000000504987838212, 0.0000000494510459248, 0.0000000477048160974, 0.0000000471227394883, 0.0000000466570782010, 0.0000000454929249827, 0.0000000428153725807, 0.0000000418840500060, 0.0000000402542355005, 0.0000000395557435695, 0.0000000357140379492, 0.0000000346663000528, 0.0000000423497112934, 0.0000000426989572588, 0.0000000444451870862, 0.0000000452600943390, 0.0000000474719854537, 0.0000000475884007756, 0.0000000482868927065, 0.0000000486361386720, 0.0000000504987838212, 0.0000000502659531776, 0.0000000509644451085, 0.0000000515465217177, 0.0000000518957676832, 0.0000000527106749360, 0.0000000515465217177, 0.0000000517793523613, 0.0000000524778442923, 0.0000000523614289705, 0.0000000508480297867, 0.0000000511972757522, 0.0000000503823684994, 0.0000000503823684994, 0.0000000487525539938, 0.0000000480540620629, 0.0000000468899088446, 0.0000000464242475573, 0.0000000436302798335, 0.0000000424661266152, 0.0000000404870661441, 0.0000000399049895350, 0.0000000361796992365, 0.0000000353647919837, 0.0000000426989572588, 0.0000000430482032243, 0.0000000447944330517, 0.0000000456093403045, 0.0000000477048160974, 0.0000000479376467410, 0.0000000486361386720, 0.0000000491017999593, 0.0000000507316144649, 0.0000000506151991431, 0.0000000513136910740, 0.0000000517793523613, 0.0000000520121830050, 0.0000000530599209014, 0.0000000517793523613, 0.0000000522450136486, 0.0000000528270902578, 0.0000000524778442923, 0.0000000511972757522, 0.0000000515465217177, 0.0000000508480297867, 0.0000000508480297867, 0.0000000489853846375, 0.0000000485197233502, 0.0000000473555701319, 0.0000000467734935228, 0.0000000439795257989, 0.0000000429317879025, 0.0000000408363121096, 0.0000000402542355005, 0.0000000365289452020, 0.0000000355976226274, 0.0000000425825419370, 0.0000000436302798335, 0.0000000450272636954, 0.0000000458421709482, 0.0000000474719854537, 0.0000000485197233502, 0.0000000494510459248, 0.0000000494510459248, 0.0000000506151991431, 0.0000000517793523613, 0.0000000513136910740, 0.0000000523614289705, 0.0000000521285983268, 0.0000000527106749360, 0.0000000525942596141, 0.0000000524778442923, 0.0000000527106749360, 0.0000000523614289705, 0.0000000508480297867, 0.0000000516629370395, 0.0000000508480297867, 0.0000000508480297867, 0.0000000491017999593, 0.0000000488689693157, 0.0000000477048160974, 0.0000000470063241664, 0.0000000439795257989, 0.0000000436302798335, 0.0000000410691427533, 0.0000000403706508223, 0.0000000366453605238, 0.0000000362961145584, 0.0000000429317879025, 0.0000000438631104771, 0.0000000452600943390, 0.0000000459585862700, 0.0000000477048160974, 0.0000000487525539938, 0.0000000496838765685, 0.0000000498002918903, 0.0000000508480297867, 0.0000000520121830050, 0.0000000516629370395, 0.0000000524778442923, 0.0000000523614289705, 0.0000000530599209014, 0.0000000529435055796, 0.0000000527106749360, 0.0000000529435055796, 0.0000000525942596141, 0.0000000511972757522, 0.0000000520121830050, 0.0000000510808604304, 0.0000000510808604304, 0.0000000494510459248, 0.0000000492182152811, 0.0000000479376467410, 0.0000000472391548101, 0.0000000440959411208, 0.0000000437466951553, 0.0000000411855580751, 0.0000000406034814660, 0.0000000369946064893, 0.0000000364125298802, 0.0000000428153725807, 0.0000000436302798335, 0.0000000460750015918, 0.0000000457257556263, 0.0000000477048160974, 0.0000000488689693157, 0.0000000492182152811, 0.0000000491017999593, 0.0000000509644451085, 0.0000000513136910740, 0.0000000515465217177, 0.0000000514301063959, 0.0000000524778442923, 0.0000000527106749360, 0.0000000534091668669, 0.0000000528270902578, 0.0000000523614289705, 0.0000000529435055796, 0.0000000521285983268, 0.0000000520121830050, 0.0000000513136910740, 0.0000000514301063959, 0.0000000487525539938, 0.0000000489853846375, 0.0000000474719854537, 0.0000000475884007756, 0.0000000436302798335, 0.0000000432810338680, 0.0000000411855580751, 0.0000000401378201786, 0.0000000371110218111, 0.0000000360632839147, 0.0000000429317879025, 0.0000000438631104771, 0.0000000463078322355, 0.0000000459585862700, 0.0000000479376467410, 0.0000000489853846375, 0.0000000493346306030, 0.0000000493346306030, 0.0000000511972757522, 0.0000000514301063959, 0.0000000518957676832, 0.0000000515465217177, 0.0000000527106749360, 0.0000000528270902578, 0.0000000537584128324, 0.0000000529435055796, 0.0000000527106749360, 0.0000000532927515451, 0.0000000522450136486, 0.0000000521285983268, 0.0000000513136910740, 0.0000000515465217177, 0.0000000491017999593, 0.0000000492182152811, 0.0000000474719854537, 0.0000000474719854537, 0.0000000437466951553, 0.0000000433974491898, 0.0000000413019733969, 0.0000000402542355005, 0.0000000372274371330, 0.0000000361796992365, 0.0000000423497112934, 0.0000000433974491898, 0.0000000443287717644, 0.0000000457257556263, 0.0000000480540620629, 0.0000000486361386720, 0.0000000486361386720, 0.0000000489853846375, 0.0000000501495378558, 0.0000000509644451085, 0.0000000514301063959, 0.0000000510808604304, 0.0000000521285983268, 0.0000000524778442923, 0.0000000522450136486, 0.0000000524778442923, 0.0000000524778442923, 0.0000000520121830050, 0.0000000509644451085, 0.0000000515465217177, 0.0000000504987838212, 0.0000000507316144649, 0.0000000487525539938, 0.0000000485197233502, 0.0000000465406628791, 0.0000000460750015918, 0.0000000433974491898, 0.0000000423497112934, 0.0000000410691427533, 0.0000000402542355005, 0.0000000364125298802, 0.0000000358304532710, 0.0000000423497112934, 0.0000000433974491898, 0.0000000444451870862, 0.0000000458421709482, 0.0000000481704773847, 0.0000000487525539938, 0.0000000487525539938, 0.0000000491017999593, 0.0000000503823684994, 0.0000000510808604304, 0.0000000516629370395, 0.0000000511972757522, 0.0000000522450136486, 0.0000000525942596141, 0.0000000523614289705, 0.0000000525942596141, 0.0000000524778442923, 0.0000000520121830050, 0.0000000510808604304, 0.0000000516629370395, 0.0000000507316144649, 0.0000000507316144649, 0.0000000489853846375, 0.0000000485197233502, 0.0000000464242475573, 0.0000000459585862700, 0.0000000433974491898, 0.0000000423497112934, 0.0000000410691427533, 0.0000000402542355005, 0.0000000364125298802, 0.0000000357140379492, 0.0000000410691427533, 0.0000000423497112934, 0.0000000436302798335, 0.0000000444451870862, 0.0000000467734935228, 0.0000000473555701319, 0.0000000480540620629, 0.0000000477048160974, 0.0000000502659531776, 0.0000000504987838212, 0.0000000509644451085, 0.0000000510808604304, 0.0000000516629370395, 0.0000000514301063959, 0.0000000511972757522, 0.0000000514301063959, 0.0000000518957676832, 0.0000000513136910740, 0.0000000502659531776, 0.0000000502659531776, 0.0000000503823684994, 0.0000000496838765685, 0.0000000480540620629, 0.0000000470063241664, 0.0000000458421709482, 0.0000000456093403045, 0.0000000422332959715, 0.0000000422332959715, 0.0000000397885742132, 0.0000000390900822822, 0.0000000352483766619, 0.0000000346663000528, 0.0000000408363121096, 0.0000000423497112934, 0.0000000435138645116, 0.0000000444451870862, 0.0000000466570782010, 0.0000000474719854537, 0.0000000481704773847, 0.0000000478212314192, 0.0000000502659531776, 0.0000000506151991431, 0.0000000509644451085, 0.0000000510808604304, 0.0000000517793523613, 0.0000000514301063959, 0.0000000513136910740, 0.0000000515465217177, 0.0000000520121830050, 0.0000000513136910740, 0.0000000502659531776, 0.0000000501495378558, 0.0000000503823684994, 0.0000000498002918903, 0.0000000478212314192, 0.0000000468899088446, 0.0000000457257556263, 0.0000000454929249827, 0.0000000421168806497, 0.0000000421168806497, 0.0000000396721588913, 0.0000000388572516385, 0.0000000351319613401, 0.0000000345498847309, 0.0000000402542355005, 0.0000000414183887187, 0.0000000433974491898, 0.0000000436302798335, 0.0000000466570782010, 0.0000000464242475573, 0.0000000477048160974, 0.0000000471227394883, 0.0000000496838765685, 0.0000000501495378558, 0.0000000493346306030, 0.0000000495674612466, 0.0000000511972757522, 0.0000000514301063959, 0.0000000503823684994, 0.0000000503823684994, 0.0000000507316144649, 0.0000000509644451085, 0.0000000496838765685, 0.0000000491017999593, 0.0000000492182152811, 0.0000000486361386720, 0.0000000463078322355, 0.0000000458421709482, 0.0000000449108483735, 0.0000000440959411208, 0.0000000411855580751, 0.0000000403706508223, 0.0000000378095137421, 0.0000000378095137421, 0.0000000344334694091, 0.0000000326872395817, 0.0000000401378201786, 0.0000000411855580751, 0.0000000431646185461, 0.0000000432810338680, 0.0000000464242475573, 0.0000000463078322355, 0.0000000475884007756, 0.0000000471227394883, 0.0000000498002918903, 0.0000000500331225339, 0.0000000492182152811, 0.0000000496838765685, 0.0000000513136910740, 0.0000000514301063959, 0.0000000503823684994, 0.0000000504987838212, 0.0000000507316144649, 0.0000000510808604304, 0.0000000496838765685, 0.0000000491017999593, 0.0000000489853846375, 0.0000000485197233502, 0.0000000459585862700, 0.0000000457257556263, 0.0000000446780177299, 0.0000000438631104771, 0.0000000409527274314, 0.0000000400214048568, 0.0000000375766830985, 0.0000000375766830985, 0.0000000340842234436, 0.0000000324544089381, 0.0000000385080056731, 0.0000000392064976040, 0.0000000408363121096, 0.0000000421168806497, 0.0000000443287717644, 0.0000000450272636954, 0.0000000449108483735, 0.0000000456093403045, 0.0000000474719854537, 0.0000000481704773847, 0.0000000473555701319, 0.0000000486361386720, 0.0000000486361386720, 0.0000000489853846375, 0.0000000486361386720, 0.0000000489853846375, 0.0000000493346306030, 0.0000000498002918903, 0.0000000481704773847, 0.0000000475884007756, 0.0000000468899088446, 0.0000000464242475573, 0.0000000443287717644, 0.0000000433974491898, 0.0000000425825419370, 0.0000000414183887187, 0.0000000390900822822, 0.0000000382751750294, 0.0000000366453605238, 0.0000000354812073056, 0.0000000322215782944, 0.0000000312902557198, 0.0000000381587597076, 0.0000000389736669604, 0.0000000404870661441, 0.0000000417676346842, 0.0000000438631104771, 0.0000000446780177299, 0.0000000445616024081, 0.0000000452600943390, 0.0000000473555701319, 0.0000000480540620629, 0.0000000473555701319, 0.0000000484033080284, 0.0000000484033080284, 0.0000000488689693157, 0.0000000485197233502, 0.0000000488689693157, 0.0000000492182152811, 0.0000000494510459248, 0.0000000479376467410, 0.0000000473555701319, 0.0000000464242475573, 0.0000000461914169136, 0.0000000439795257989, 0.0000000431646185461, 0.0000000422332959715, 0.0000000410691427533, 0.0000000388572516385, 0.0000000378095137421, 0.0000000362961145584, 0.0000000351319613401, 0.0000000319887476508, 0.0000000310574250761, 0.0000000369946064893, 0.0000000373438524548, 0.0000000392064976040, 0.0000000392064976040, 0.0000000417676346842, 0.0000000421168806497, 0.0000000433974491898, 0.0000000437466951553, 0.0000000458421709482, 0.0000000452600943390, 0.0000000460750015918, 0.0000000452600943390, 0.0000000479376467410, 0.0000000478212314192, 0.0000000471227394883, 0.0000000470063241664, 0.0000000475884007756, 0.0000000471227394883, 0.0000000454929249827, 0.0000000445616024081, 0.0000000446780177299, 0.0000000444451870862, 0.0000000418840500060, 0.0000000411855580751, 0.0000000400214048568, 0.0000000397885742132, 0.0000000364125298802, 0.0000000360632839147, 0.0000000344334694091, 0.0000000337349774782, 0.0000000301261025015, 0.0000000290783646051, 0.0000000367617758457, 0.0000000371110218111, 0.0000000389736669604, 0.0000000389736669604, 0.0000000415348040406, 0.0000000418840500060, 0.0000000430482032243, 0.0000000432810338680, 0.0000000456093403045, 0.0000000450272636954, 0.0000000456093403045, 0.0000000449108483735, 0.0000000475884007756, 0.0000000474719854537, 0.0000000467734935228, 0.0000000466570782010, 0.0000000472391548101, 0.0000000466570782010, 0.0000000452600943390, 0.0000000442123564426, 0.0000000442123564426, 0.0000000439795257989, 0.0000000415348040406, 0.0000000408363121096, 0.0000000397885742132, 0.0000000395557435695, 0.0000000361796992365, 0.0000000357140379492, 0.0000000340842234436, 0.0000000335021468345, 0.0000000297768565360, 0.0000000287291186396 diff --git a/MLX90640_test/eeprom.csv b/MLX90640_test/eeprom.csv new file mode 100644 index 0000000..e6e55af --- /dev/null +++ b/MLX90640_test/eeprom.csv @@ -0,0 +1 @@ +0x00AE,0x499A,0x0000,0x2061,0x0005,0x0320,0x03E0,0x1710,0xA224,0x0185,0x0499,0x0000,0x1901,0x0000,0x0000,0xB533,0x4210,0xFFC2,0x0202,0x0202,0xF202,0xF1F2,0xD1E1,0xAFC0,0xFF00,0xF002,0xF103,0xE103,0xE1F5,0xD1E4,0xC1D5,0x91C2,0x8895,0x30D9,0xEDCB,0x110F,0x3322,0x2233,0x0011,0xCCEE,0xFFED,0x1100,0x2222,0x3333,0x2233,0x0022,0xDEF0,0x9ACC,0x15CC,0x2FA4,0x2555,0x9C78,0x7666,0x01C8,0x3B38,0x3534,0x2452,0x0463,0x13BB,0x0623,0xEC00,0x9797,0x9797,0x2AFB,0x00AE,0xFBE0,0x1B70,0xF3BE,0x000E,0xF86E,0x1B7E,0xF3CE,0xFFCE,0xF41E,0x102E,0xEC0E,0xFFDE,0xEC3E,0x139E,0xEF9E,0xFB9E,0xF77E,0x13E0,0xE7EE,0xF7AE,0xF750,0x0C30,0xEBEE,0xF730,0xF010,0x0B50,0xE430,0xF420,0xF370,0x07C0,0xE450,0x0470,0xFBCE,0xFF5C,0x0F90,0x07D0,0xFC3E,0xFF6C,0x0F90,0x03A0,0xFC0E,0xF40C,0x0BF0,0x03A0,0xF41E,0xF78C,0x0B70,0xFF72,0xFF6E,0xF7DE,0x07C0,0xFFA2,0x0330,0xF42E,0x0BC0,0xFF22,0xFC00,0xF75E,0x0410,0x0022,0x0350,0xF3A0,0x0832,0x04DE,0xFBF0,0x1BCE,0xF00E,0xFC5E,0xFC80,0x1BF0,0xF02E,0x0002,0xF81E,0x142E,0xEC9E,0x07DE,0xF09E,0x17CE,0xF3AE,0xFFC0,0xFBB0,0x1080,0xEBFE,0xFFE0,0xFF90,0x1460,0xE4AE,0xFBC0,0xF840,0x0FE0,0xE860,0xF8C0,0xF400,0x0842,0xE4B0,0x0890,0x03BE,0xFF9C,0x0FD0,0x0020,0x0450,0xFFCC,0x0FE0,0x07D0,0x03FE,0xFBEE,0x0C60,0x0B80,0xF86E,0xFB8E,0x1370,0x0782,0x038E,0xF85E,0x0FC2,0x07C2,0x037E,0xF84E,0x0880,0x0392,0x0420,0xF7CE,0x0C42,0xFCB2,0xFFE0,0xF020,0x0490,0x107E,0x03D0,0x1F90,0xFBCE,0x089E,0x0080,0x1820,0xF40E,0x0800,0xFC30,0x141E,0xF06E,0x0400,0xFFA0,0x17CE,0xF7B0,0x07D0,0xFFB0,0x1830,0xF3FE,0x0002,0xFFE0,0x14D0,0xECB0,0xFBE2,0xFCB0,0x13B0,0xECA0,0xF8DE,0xF432,0x0832,0xE8D0,0x1420,0xFF8E,0xFF6E,0x1380,0x0840,0x005E,0xFBEC,0x0FB0,0x0BB2,0xFFFE,0xFBDE,0x0820,0x0BC0,0x0360,0xFB8C,0x0F70,0x0794,0x036E,0xFBFE,0x0FA0,0x0BC4,0x0390,0xF89E,0x0C72,0xFFB2,0xFC70,0xFB7E,0x0470,0xFCB0,0xFFF0,0xF3F0,0x04A0,0x049E,0x03B0,0x1F90,0xF7D0,0x042E,0x0070,0x1F70,0xFBBE,0x0F00,0x03B0,0x142E,0xF01E,0x07B0,0xFFB0,0x1B60,0xF37E,0xFBD0,0xFF90,0x1410,0xF3C0,0xFC00,0x0370,0x1482,0xF030,0xF800,0xFC50,0x13C2,0xF050,0x0070,0xF812,0x0C02,0xEC80,0x00D0,0xFBFE,0xFBCC,0x0810,0xFC60,0xFCB0,0xFBCE,0x0FE0,0x0B40,0xFFFE,0xF05C,0x0840,0x07D0,0xFFD0,0xF79E,0x0FB0,0xF802,0xFFD0,0xF44E,0x0BF0,0xFC32,0x07A0,0xF4BE,0x0C60,0xF822,0x0080,0xF01E,0x0892,0x00B4,0xF850,0xF040,0x04B2,0x085E,0x0782,0x1F70,0xFBEE,0x001E,0x0420,0x1F80,0xFBB0,0x03B0,0x0390,0x17F0,0xF04E,0x0770,0xFFE0,0x1B40,0xF76E,0xFFC0,0xFFB0,0x17E0,0xEC1E,0x03A0,0x03A0,0x10C0,0xEC60,0xFBC2,0xFC80,0x0C00,0xEC60,0x0050,0xF800,0x0802,0xEC90,0x0080,0xF7B0,0xF7AE,0x0410,0xFC32,0xFC50,0xF7BE,0x07F0,0xFFD2,0xFBC0,0xF02E,0x0460,0x0382,0xF410,0xF36E,0x0BA0,0xFBF2,0xFBC0,0xF01C,0x0440,0xFFE2,0xFBE0,0xF0EE,0x08A2,0xF804,0xFCB0,0xEC3E,0x04A2,0x0082,0xF830,0xE830,0x04B2,0x13F0,0x0380,0x1F40,0xFBB0,0x0F90,0x0420,0x17A0,0xF7AE,0x0F40,0xFFE2,0x13AE,0xF03E,0x0F12,0xFF60,0x0F50,0xF340,0x0362,0xFF30,0x1760,0xEFD0,0x0762,0x0360,0x1072,0xEC50,0xF7B2,0xF852,0x07B0,0xE480,0xF820,0xF7C2,0x03C2,0xE490,0x1422,0x03AE,0x036E,0x13C2,0x13B2,0x0440,0xFFCE,0x13D2,0x1362,0x0002,0xFBDE,0x0C40,0x1732,0x0390,0xFF8E,0x1760,0x0B82,0x0750,0x039E,0x1000,0x0F82,0x0B80,0xFCAE,0x1080,0x0BD4,0x0470,0xFBCE,0x0C92,0x0832,0x07E0,0xF7FE,0x0CA2,0x0010,0x0380,0x13D0,0xF7A0,0xFFBE,0x0052,0x1380,0xF770,0xFF70,0xFFA0,0x0FC0,0xF3BE,0x0340,0xFF60,0x0FC0,0xF370,0xFB30,0xFB80,0x0C10,0xE40E,0xFBA0,0xFBB0,0x0C42,0xE860,0xFB92,0xF4A2,0x0B82,0xE850,0xF832,0xFBA2,0x0002,0xE470,0x0022,0xF7A0,0xEFFE,0x0BC0,0x03D2,0xF860,0xF79E,0x0F92,0x0390,0xFFB0,0xF3FE,0x0FC0,0x0762,0xFF70,0xEFFE,0x1380,0x0362,0xFFB0,0xF42E,0x0810,0x07A2,0x07C0,0xF87E,0x0C82,0x0B94,0x0490,0xFB90,0x1062,0x0842,0x07B0,0xEC10,0x0C82,0x0850,0x13E2,0x2360,0x0420,0x0460,0x10B0,0x1FB0,0x03E0,0x0B80,0x0BF0,0x1430,0xFC00,0x0F90,0x0BC2,0x1BA0,0xFFC0,0x07C2,0x0B82,0x1BF0,0xF44E,0x0BB2,0x0FD2,0x14C2,0xF8A0,0x0792,0x0852,0x13E2,0xF850,0x00A0,0x0032,0x0C22,0xF0D0,0xF452,0xEFE0,0xEF7E,0xFC32,0xF072,0xF4C0,0xEBCE,0x03F0,0xFBA2,0xF400,0xE45E,0x0410,0xFFA2,0xF7D0,0xEBBE,0x0BD0,0xFBC2,0xFB80,0xF00E,0x0050,0x03D2,0x03D0,0xF0E0,0x0CA0,0x0384,0x0440,0xF3EE,0x0C52,0x00A2,0x0030,0xEC20,0x04C0,0x1022,0x0FD2,0x1F80,0x03F0,0x0830,0x0C82,0x17E0,0xFFB0,0x0410,0x0432,0x0870,0xF48E,0x0BD0,0x07B2,0x0F90,0xFBB0,0xFFF0,0x07A2,0x1410,0xF410,0x0022,0x0BC2,0x0CE0,0xF850,0xFFB2,0x0490,0x0BC0,0xECC0,0xFC70,0x0012,0x0400,0xF0B2,0x0402,0xF7D0,0xF37E,0x0BF2,0x0022,0xFC90,0xEFFE,0x0FC2,0xFC12,0xF84E,0xE87E,0x0480,0x07E2,0xFFB0,0xF7AE,0x0FC0,0x0002,0x07A0,0xF81E,0x1002,0x0422,0x0FD0,0xF8CE,0x1842,0x07A4,0x0880,0xFBB0,0x0CB0,0x0C62,0x0BF0,0xFBF0,0x10A0,0xF030,0x07D2,0x0BE0,0xF800,0xECA0,0x0482,0x0830,0xFBE0,0xF040,0xFC80,0x0810,0xF030,0xF410,0xF830,0x0BA0,0xF7A0,0xF3D2,0xFFF2,0x0840,0xEFF0,0xF400,0x03B2,0x0872,0xF030,0xEFB2,0x0042,0x03B2,0xEC40,0xFFE0,0xFFE2,0x0012,0xF420,0xF422,0xF7B0,0xE7CE,0x0BD2,0xF080,0x0070,0xEC2E,0x0FE2,0xF850,0x0070,0xF00E,0x0C42,0x0020,0x0030,0xF7AE,0x17B2,0x03D2,0x0400,0xF84E,0x17F0,0x0BE2,0x13A0,0xFC4E,0x1820,0x0792,0x1020,0xFB9E,0x1C10,0x1BC2,0x13C0,0xFBE0,0x2002,0xF040,0x13A2,0x0F80,0xFC30,0xF46E,0x0CC2,0x17B2,0x0010,0xFC10,0x0872,0x1000,0xF8B0,0x07BE,0x0BE2,0x13B0,0xFFE0,0xF410,0x0450,0x0C70,0xF420,0x03C0,0x0F82,0x1060,0xFFE0,0xFB70,0x13D2,0x0F90,0xF820,0xFC40,0x0FA2,0x0BE2,0xFC60,0xF012,0xFB80,0xEB5E,0x0802,0xF420,0x0090,0xF78E,0x13E2,0xFC02,0x0060,0xF40E,0x1090,0x0F90,0x0BD0,0xFBAE,0x1FD2,0x0002,0x0820,0xF85E,0x1800,0x0F82,0x1B60,0xFC3E,0x23C2,0x0B42,0x1BA0,0xFF7E,0x27E0,0x1012,0x1B70,0xFFC0,0x2040,0xFC70,0x1BA2,0x0FA0,0x0BA0,0x0002,0x1432,0x0FE0,0x0010,0xF83E,0x13E0,0x085E,0x07E0,0x005E,0x0842,0x0FEE,0x03D0,0xFC20,0x0FE2,0x1400,0x0780,0x0B90,0x1772,0x1410,0x07B0,0xFB10,0x17F2,0x0B20,0x03F0,0xFC1E,0x17B2,0x07CE,0x0830,0xE050,0xEF80,0xD38E,0x0382,0xEBE0,0xF810,0xDFBE,0x07D0,0xEC10,0xFFC0,0xE01E,0x0BB0,0xF820,0xF810,0xEBBE,0x0BA0,0xFBF0,0x07A0,0xF3EE,0x1B50,0x0752,0x0F30,0xF7EE,0x1B80,0x02F2,0x0FD0,0xF70E,0x13C0,0x0BE0,0x1390,0xF79E,0x1C00 diff --git a/MLX90640_test/frame0.csv b/MLX90640_test/frame0.csv new file mode 100644 index 0000000..fddb302 --- /dev/null +++ b/MLX90640_test/frame0.csv @@ -0,0 +1 @@ +0xFFB3,0xFFAC,0xFFB4,0xFFAA,0xFFB3,0xFFAC,0xFFB6,0xFFA9,0xFFB2,0xFFA8,0xFFB4,0xFFA6,0xFFB1,0xFFA5,0xFFB4,0xFFA2,0xFFB4,0xFFA5,0xFFB4,0xFFA4,0xFFB6,0xFFA7,0xFFB5,0xFFA4,0xFFBA,0xFFA6,0xFFB8,0xFFA5,0xFFB6,0xFFAA,0xFFBD,0xFFA4,0xFFA9,0xFFA8,0xFFA6,0xFFA8,0xFFA9,0xFFA6,0xFFA6,0xFFA5,0xFFAA,0xFFA2,0xFFA5,0xFFA2,0xFFA9,0xFF9F,0xFFA5,0xFFA1,0xFFAD,0xFFA0,0xFFA6,0xFFA2,0xFFAB,0xFFA3,0xFFA8,0xFFA4,0xFFB2,0xFFA2,0xFFAB,0xFFA3,0xFFB0,0xFFA4,0xFFAF,0xFFA3,0xFFB2,0xFFAC,0xFFB4,0xFFAB,0xFFB1,0xFFAC,0xFFB1,0xFFA8,0xFFB1,0xFFA9,0xFFB3,0xFFA5,0xFFB2,0xFFA5,0xFFB1,0xFFA3,0xFFB5,0xFFA5,0xFFB1,0xFFA3,0xFFB6,0xFFA7,0xFFB5,0xFFA2,0xFFB8,0xFFA7,0xFFB7,0xFFA3,0xFFB6,0xFFA8,0xFFB9,0xFFA2,0xFFA7,0xFFA7,0xFFA4,0xFFA7,0xFFA9,0xFFA5,0xFFA4,0xFFA6,0xFFA8,0xFFA3,0xFFA4,0xFFA2,0xFFAC,0xFF9F,0xFFA2,0xFFA3,0xFFAD,0xFFA0,0xFFA4,0xFFA2,0xFFAC,0xFFA2,0xFFA8,0xFFA1,0xFFB1,0xFFA3,0xFFA8,0xFFA3,0xFFAD,0xFFA1,0xFFAC,0xFFA1,0xFFB3,0xFFAD,0xFFB5,0xFFA9,0xFFB2,0xFFAB,0xFFB2,0xFFA8,0xFFB4,0xFFA9,0xFFB1,0xFFA4,0xFFB1,0xFFA6,0xFFB3,0xFFA2,0xFFB5,0xFFA7,0xFFB2,0xFFA3,0xFFB2,0xFFA5,0xFFB4,0xFFA2,0xFFB6,0xFFA5,0xFFB8,0xFFA5,0xFFB4,0xFFA7,0xFFB9,0xFFA0,0xFFAA,0xFFA5,0xFFA4,0xFFA6,0xFFAA,0xFFA4,0xFFA2,0xFFA4,0xFFA9,0xFFA1,0xFFA2,0xFFA3,0xFFAA,0xFFA1,0xFFA3,0xFFA0,0xFFAD,0xFF9F,0xFFA4,0xFFA3,0xFFAB,0xFFA0,0xFFA3,0xFFA1,0xFFAD,0xFF9E,0xFFA9,0xFFA1,0xFFAB,0xFFA0,0xFFAA,0xFF9D,0xFFB0,0xFFAD,0xFFB2,0xFFAA,0xFFB2,0xFFAB,0xFFB3,0xFFA9,0xFFB8,0xFFAA,0xFFB6,0xFFA4,0xFFB2,0xFFA6,0xFFB1,0xFFA4,0xFFB2,0xFFA4,0xFFB2,0xFFA4,0xFFB2,0xFFA7,0xFFB5,0xFFA4,0xFFB2,0xFFA5,0xFFB4,0xFFA2,0xFFB4,0xFFA6,0xFFB9,0xFFA2,0xFFA5,0xFFA4,0xFFA1,0xFFA4,0xFFA6,0xFFA0,0xFFA1,0xFFA3,0xFFA8,0xFFA7,0xFFA1,0xFFAA,0xFFA6,0xFFA1,0xFFA1,0xFFA1,0xFFA8,0xFF9D,0xFFA2,0xFF9F,0xFFA8,0xFF9F,0xFFA2,0xFF9F,0xFFAB,0xFF9E,0xFFA4,0xFFA0,0xFFAB,0xFF9F,0xFFA8,0xFF9B,0xFFAF,0xFFAE,0xFFB3,0xFFA9,0xFFAF,0xFFAB,0xFFB4,0xFFA8,0xFFBB,0xFFAA,0xFFC6,0xFFA6,0xFFC0,0xFFA8,0xFFB6,0xFFA2,0xFFB0,0xFFA5,0xFFB1,0xFFA2,0xFFB3,0xFFA6,0xFFB2,0xFFA2,0xFFB4,0xFFA2,0xFFB4,0xFFA2,0xFFB4,0xFFA6,0xFFB7,0xFFA1,0xFFA3,0xFFA2,0xFF9F,0xFFA1,0xFFA5,0xFFA2,0xFFA2,0xFFA4,0xFFAA,0xFFB2,0xFFA4,0xFFB4,0xFFA8,0xFFAD,0xFFA1,0xFFA6,0xFFA8,0xFF9D,0xFFA2,0xFF9D,0xFFAB,0xFF9D,0xFFA3,0xFF9F,0xFFAD,0xFF9C,0xFFA3,0xFF9F,0xFFAB,0xFF9D,0xFFA6,0xFF9C,0xFFB3,0xFFAD,0xFFB3,0xFFA9,0xFFB4,0xFFAC,0xFFB5,0xFFA9,0xFFC8,0xFFAE,0xFFC8,0xFFAB,0xFFC9,0xFFAE,0xFFC2,0xFFA6,0xFFBD,0xFFA9,0xFFB5,0xFFA8,0xFFB2,0xFFAC,0xFFB0,0xFFA4,0xFFB3,0xFFA4,0xFFB2,0xFFA1,0xFFB2,0xFFA4,0xFFB4,0xFF9C,0xFFA4,0xFFA1,0xFF9F,0xFFA2,0xFFA7,0xFFA1,0xFFA2,0xFFAA,0xFFAD,0xFFB7,0xFFA7,0xFFB8,0xFFAD,0xFFB5,0xFFA3,0xFFB1,0xFFAF,0xFFA8,0xFFAA,0xFFA0,0xFFB2,0xFF9B,0xFFA5,0xFF9D,0xFFAC,0xFF9A,0xFFA4,0xFF9D,0xFFAB,0xFF9C,0xFFA5,0xFF9A,0xFFAE,0xFFAD,0xFFAD,0xFFA8,0xFFB1,0xFFAD,0xFFBB,0xFFAE,0xFFCB,0xFFB2,0xFFCE,0xFFAE,0xFFCB,0xFFB0,0xFFC5,0xFFAB,0xFFC6,0xFFB2,0xFFBD,0xFFB0,0xFFB2,0xFFB1,0xFFB0,0xFFA8,0xFFB3,0xFFAA,0xFFB1,0xFFA4,0xFFB1,0xFFA5,0xFFB4,0xFF9D,0xFF9F,0xFF9E,0xFF98,0xFF9F,0xFFA3,0xFFA0,0xFFA2,0xFFB3,0xFFAC,0xFFBB,0xFFA7,0xFFBF,0xFFAE,0xFFB7,0xFFA5,0xFFB3,0xFFB4,0xFFB0,0xFFAE,0xFFA6,0xFFB6,0xFF9B,0xFFAB,0xFF99,0xFFB4,0xFF9A,0xFFA7,0xFF9D,0xFFAC,0xFF9D,0xFFA5,0xFF9A,0xFFAC,0xFFAD,0xFFB0,0xFFA8,0xFFB1,0xFFAD,0xFFC3,0xFFAF,0xFFCA,0xFFB3,0xFFCD,0xFFAD,0xFFCA,0xFFB0,0xFFC8,0xFFAD,0xFFC6,0xFFB8,0xFFB9,0xFFB1,0xFFB2,0xFFB5,0xFFAF,0xFFAD,0xFFB3,0xFFAF,0xFFB0,0xFFA9,0xFFB0,0xFFA6,0xFFB4,0xFF9D,0xFF9E,0xFF9C,0xFF9C,0xFF9F,0xFFA1,0xFFA4,0xFFA0,0xFFB3,0xFFAB,0xFFB5,0xFFA4,0xFFB9,0xFFAC,0xFFB3,0xFFA7,0xFFB2,0xFFB5,0xFFAF,0xFFB1,0xFF9D,0xFFB7,0xFF9B,0xFFAD,0xFF9A,0xFFB6,0xFF9A,0xFFA8,0xFF9C,0xFFAA,0xFF9B,0xFFA5,0xFF9A,0xFFAE,0xFFAC,0xFFB0,0xFFAB,0xFFB6,0xFFAE,0xFFC0,0xFFAD,0xFFC3,0xFFB0,0xFFC2,0xFFAB,0xFFC4,0xFFB0,0xFFC2,0xFFB0,0xFFC4,0xFFB8,0xFFB2,0xFFB3,0xFFAE,0xFFB4,0xFFAE,0xFFAF,0xFFB0,0xFFAF,0xFFAF,0xFFA5,0xFFB2,0xFFA4,0xFFB3,0xFF9D,0xFF9E,0xFF9A,0xFF9A,0xFF9F,0xFFA1,0xFFA4,0xFF9D,0xFFAF,0xFFA7,0xFFAC,0xFF9F,0xFFAD,0xFFAA,0xFFB0,0xFFA7,0xFFAF,0xFFB5,0xFFA6,0xFFAF,0xFF9A,0xFFB5,0xFF98,0xFFAA,0xFF9B,0xFFB3,0xFF99,0xFFA5,0xFF9A,0xFFAA,0xFF9F,0xFFA5,0xFF9A,0xFFA7,0xFFAC,0xFFAA,0xFFA8,0xFFAA,0xFFAD,0xFFB0,0xFFAB,0xFFB9,0xFFAD,0xFFBF,0xFFAB,0xFFBD,0xFFAF,0xFFC0,0xFFB0,0xFFBA,0xFFB4,0xFFAE,0xFFAF,0xFFAC,0xFFB0,0xFFAC,0xFFAC,0xFFB0,0xFFAE,0xFFB0,0xFFA6,0xFFBB,0xFFA5,0xFFBC,0xFFA0,0xFF96,0xFF96,0xFF92,0xFF99,0xFF99,0xFF98,0xFF97,0xFF9E,0xFFA0,0xFFA0,0xFF9E,0xFFA7,0xFFA5,0xFFA8,0xFFA3,0xFFA9,0xFFAE,0xFF9A,0xFFA5,0xFF97,0xFFAE,0xFF95,0xFFA6,0xFF99,0xFFAF,0xFF98,0xFFA2,0xFFA0,0xFFAB,0xFFA9,0xFFA3,0xFFA6,0xFFA4,0xFFAE,0xFFA7,0xFFA5,0xFFA7,0xFFA7,0xFFA9,0xFFA6,0xFFAC,0xFFA6,0xFFB0,0xFFA3,0xFFB7,0xFFAD,0xFFB7,0xFFA9,0xFFAF,0xFFAB,0xFFA8,0xFFA8,0xFFAC,0xFFAD,0xFFAB,0xFFAA,0xFFAF,0xFFAE,0xFFB6,0xFFA7,0xFFBC,0xFFAB,0xFFC4,0xFFA4,0xFF93,0xFF95,0xFF90,0xFF94,0xFF94,0xFF93,0xFF92,0xFF96,0xFF99,0xFF93,0xFF96,0xFF97,0xFFA0,0xFF9E,0xFF9B,0xFF9E,0xFFA4,0xFF93,0xFF9D,0xFF94,0xFFA9,0xFF96,0xFF9F,0xFF96,0xFFAB,0xFF97,0xFFA1,0xFFA5,0xFFA9,0xFFAA,0xFFA4,0xFFA6,0xFFA4,0xFFAC,0xFFA4,0xFFA6,0xFFA6,0xFFA7,0xFFA6,0xFFA1,0xFFA5,0xFFA6,0xFFA4,0xFFA3,0xFFA7,0xFFA4,0xFFA7,0xFF9F,0xFFAB,0xFFA3,0xFFA9,0xFFA3,0xFFAA,0xFFA7,0xFFAB,0xFFA6,0xFFAE,0xFFAA,0xFFB7,0xFFA6,0xFFBB,0xFFAA,0xFFBB,0xFFA3,0xFF87,0xFF8A,0xFF84,0xFF8C,0xFF8A,0xFF8B,0xFF86,0xFF8B,0xFF8B,0xFF89,0xFF85,0xFF8B,0xFF8F,0xFF89,0xFF8A,0xFF8B,0xFF91,0xFF8A,0xFF8C,0xFF8D,0xFF9A,0xFF8B,0xFF95,0xFF8E,0xFF9E,0xFF93,0xFF98,0xFF9D,0xFF9E,0xFF9D,0xFF9A,0xFF99,0x4DFA,0x1A56,0x7FFF,0x1A56,0x7FFF,0x1A55,0x7FFF,0x1A55,0xFFB9,0xCE07,0x1584,0xD653,0xFFF9,0x0009,0x0000,0xFFFD,0x1976,0x03FD,0x0297,0x7FFF,0x1976,0x03FD,0x0297,0x7FFF,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0695,0x7FFF,0x1A56,0x7FFF,0x1A56,0x7FFF,0x1A55,0x7FFF,0xFFBD,0xF57A,0xCEF2,0xD8E0,0x0009,0xFFFD,0xFFFC,0x0000,0x00ED,0x0046,0x2AD6,0x0035,0x00EE,0x0046,0x2AD6,0x0035,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x1901,0x0000 diff --git a/MLX90640_test/frame1.csv b/MLX90640_test/frame1.csv new file mode 100644 index 0000000..137b0cf --- /dev/null +++ b/MLX90640_test/frame1.csv @@ -0,0 +1 @@ +0xFFB3,0xFFAD,0xFFB4,0xFFAA,0xFFB3,0xFFAD,0xFFB6,0xFFA8,0xFFB2,0xFFA9,0xFFB4,0xFFA4,0xFFB1,0xFFA6,0xFFB4,0xFFA1,0xFFB4,0xFFA8,0xFFB4,0xFFA1,0xFFB6,0xFFA8,0xFFB5,0xFFA2,0xFFBA,0xFFA7,0xFFB8,0xFFA3,0xFFB6,0xFFAA,0xFFBD,0xFFA3,0xFFAC,0xFFA8,0xFFA5,0xFFA8,0xFFAC,0xFFA6,0xFFA5,0xFFA5,0xFFAA,0xFFA2,0xFFA2,0xFFA2,0xFFAB,0xFF9F,0xFFA0,0xFFA1,0xFFAB,0xFFA0,0xFFA4,0xFFA2,0xFFAB,0xFFA3,0xFFA6,0xFFA4,0xFFB1,0xFFA2,0xFFA9,0xFFA3,0xFFB0,0xFFA4,0xFFAD,0xFFA3,0xFFB2,0xFFAF,0xFFB4,0xFFA8,0xFFB1,0xFFAE,0xFFB1,0xFFA5,0xFFB1,0xFFAA,0xFFB3,0xFFA3,0xFFB2,0xFFA7,0xFFB1,0xFFA3,0xFFB5,0xFFA6,0xFFB1,0xFFA0,0xFFB6,0xFFA7,0xFFB5,0xFFA0,0xFFB8,0xFFA7,0xFFB7,0xFFA2,0xFFB6,0xFFA8,0xFFB9,0xFF9F,0xFFAA,0xFFA7,0xFFA4,0xFFA7,0xFFA9,0xFFA5,0xFFA3,0xFFA6,0xFFA9,0xFFA3,0xFFA3,0xFFA2,0xFFAA,0xFF9F,0xFFA2,0xFFA3,0xFFAD,0xFFA0,0xFFA2,0xFFA2,0xFFAD,0xFFA2,0xFFA6,0xFFA1,0xFFB1,0xFFA3,0xFFA7,0xFFA3,0xFFAD,0xFFA1,0xFFA9,0xFFA1,0xFFB3,0xFFAF,0xFFB5,0xFFAA,0xFFB2,0xFFAD,0xFFB2,0xFFA6,0xFFB4,0xFFAB,0xFFB1,0xFFA4,0xFFB1,0xFFA8,0xFFB3,0xFFA0,0xFFB5,0xFFA6,0xFFB2,0xFFA3,0xFFB2,0xFFA8,0xFFB4,0xFFA1,0xFFB6,0xFFA6,0xFFB8,0xFFA2,0xFFB4,0xFFA7,0xFFB9,0xFF9C,0xFFAB,0xFFA5,0xFFA3,0xFFA6,0xFFAA,0xFFA4,0xFFA4,0xFFA4,0xFFB0,0xFFA1,0xFFA4,0xFFA3,0xFFA9,0xFFA1,0xFFA0,0xFFA0,0xFFAE,0xFF9F,0xFFA2,0xFFA3,0xFFAD,0xFFA0,0xFFA4,0xFFA1,0xFFAE,0xFF9E,0xFFA8,0xFFA1,0xFFAC,0xFFA0,0xFFA8,0xFF9D,0xFFB0,0xFFAE,0xFFB2,0xFFA8,0xFFB2,0xFFAC,0xFFB3,0xFFA9,0xFFB8,0xFFB8,0xFFB6,0xFFAB,0xFFB2,0xFFAA,0xFFB1,0xFFA1,0xFFB2,0xFFA5,0xFFB2,0xFFA0,0xFFB2,0xFFA5,0xFFB5,0xFFA1,0xFFB2,0xFFA6,0xFFB4,0xFFA3,0xFFB4,0xFFA5,0xFFB9,0xFF9B,0xFFA6,0xFFA4,0xFFA2,0xFFA4,0xFFA7,0xFFA0,0xFFA2,0xFFA3,0xFFBB,0xFFA7,0xFFAF,0xFFAA,0xFFAF,0xFFA1,0xFFA1,0xFFA1,0xFFA9,0xFF9D,0xFFA0,0xFF9F,0xFFA8,0xFF9F,0xFFA2,0xFF9F,0xFFAC,0xFF9E,0xFFA4,0xFFA0,0xFFAC,0xFF9F,0xFFA6,0xFF9B,0xFFAF,0xFFAF,0xFFB3,0xFFA9,0xFFAF,0xFFAF,0xFFB4,0xFFB0,0xFFBB,0xFFC0,0xFFC6,0xFFB7,0xFFC0,0xFFB7,0xFFB6,0xFFA7,0xFFB0,0xFFA6,0xFFB1,0xFFA0,0xFFB3,0xFFA4,0xFFB2,0xFFA0,0xFFB4,0xFFA4,0xFFB4,0xFFA0,0xFFB4,0xFFA5,0xFFB7,0xFF9A,0xFFA6,0xFFA2,0xFF9F,0xFFA1,0xFFA8,0xFFA2,0xFFAA,0xFFA4,0xFFBE,0xFFB2,0xFFB6,0xFFB4,0xFFBE,0xFFAD,0xFFAC,0xFFA6,0xFFAC,0xFF9D,0xFFA0,0xFF9D,0xFFA9,0xFF9D,0xFFA0,0xFF9F,0xFFAA,0xFF9C,0xFFA1,0xFF9F,0xFFAC,0xFF9D,0xFFA2,0xFF9C,0xFFB3,0xFFAF,0xFFB3,0xFFAA,0xFFB4,0xFFB1,0xFFB5,0xFFBB,0xFFC8,0xFFC4,0xFFC8,0xFFBC,0xFFC9,0xFFBF,0xFFC2,0xFFB5,0xFFBD,0xFFB0,0xFFB5,0xFFA0,0xFFB2,0xFFA6,0xFFB0,0xFF9E,0xFFB3,0xFFA3,0xFFB2,0xFF9E,0xFFB2,0xFFA4,0xFFB4,0xFF9B,0xFFA8,0xFFA1,0xFF9D,0xFFA2,0xFFAC,0xFFA1,0xFFB1,0xFFAA,0xFFC7,0xFFB7,0xFFB9,0xFFB8,0xFFC0,0xFFB5,0xFFB2,0xFFB1,0xFFBB,0xFFA8,0xFFA5,0xFFA0,0xFFA7,0xFF9B,0xFF9C,0xFF9D,0xFFA9,0xFF9A,0xFFA1,0xFF9D,0xFFA9,0xFF9C,0xFFA5,0xFF9A,0xFFAE,0xFFAD,0xFFAD,0xFFA7,0xFFB1,0xFFB8,0xFFBB,0xFFC0,0xFFCB,0xFFCA,0xFFCE,0xFFC1,0xFFCB,0xFFBF,0xFFC5,0xFFB6,0xFFC6,0xFFB6,0xFFBD,0xFFA0,0xFFB2,0xFFA4,0xFFB0,0xFF9E,0xFFB3,0xFFA1,0xFFB1,0xFF9F,0xFFB1,0xFFA4,0xFFB4,0xFF9C,0xFFA3,0xFF9E,0xFF9A,0xFF9F,0xFFAE,0xFFA0,0xFFB1,0xFFB3,0xFFC1,0xFFBB,0xFFB9,0xFFBF,0xFFBF,0xFFB7,0xFFB1,0xFFB3,0xFFB8,0xFFB0,0xFFA0,0xFFA6,0xFFA7,0xFF9B,0xFF9E,0xFF99,0xFFAB,0xFF9A,0xFFA0,0xFF9D,0xFFAA,0xFF9D,0xFFA2,0xFF9A,0xFFAC,0xFFAF,0xFFB0,0xFFA9,0xFFB1,0xFFBD,0xFFC3,0xFFBA,0xFFCA,0xFFC2,0xFFCD,0xFFBC,0xFFCA,0xFFBE,0xFFC8,0xFFB7,0xFFC6,0xFFB1,0xFFB9,0xFFA0,0xFFB2,0xFFA5,0xFFAF,0xFF9D,0xFFB3,0xFFA4,0xFFB0,0xFFA0,0xFFB0,0xFFA3,0xFFB4,0xFF9B,0xFF9E,0xFF9C,0xFF9C,0xFF9F,0xFFAE,0xFFA4,0xFFAE,0xFFB3,0xFFB8,0xFFB5,0xFFAF,0xFFB9,0xFFBA,0xFFB3,0xFFAF,0xFFB2,0xFFB4,0xFFAF,0xFF9D,0xFF9D,0xFFA5,0xFF9B,0xFF9D,0xFF9A,0xFFA9,0xFF9A,0xFFA1,0xFF9C,0xFFA8,0xFF9B,0xFFA3,0xFF9A,0xFFAE,0xFFAF,0xFFB0,0xFFA8,0xFFB6,0xFFB5,0xFFC0,0xFFB5,0xFFC3,0xFFBC,0xFFC2,0xFFB6,0xFFC4,0xFFBD,0xFFC2,0xFFB0,0xFFC4,0xFFA9,0xFFB2,0xFF9E,0xFFAE,0xFFA3,0xFFAE,0xFF9E,0xFFB0,0xFFA3,0xFFAF,0xFFA1,0xFFB2,0xFFA6,0xFFB3,0xFF9E,0xFF9E,0xFF9A,0xFF98,0xFF9F,0xFFA4,0xFFA4,0xFFA2,0xFFAF,0xFFB0,0xFFAC,0xFFAA,0xFFAD,0xFFB6,0xFFB0,0xFFAA,0xFFAF,0xFFAB,0xFFA6,0xFF99,0xFF9A,0xFFA3,0xFF98,0xFF99,0xFF9B,0xFFA7,0xFF99,0xFFA2,0xFF9A,0xFFAE,0xFF9F,0xFFA3,0xFF9A,0xFFA7,0xFFAC,0xFFAA,0xFFA5,0xFFAA,0xFFAA,0xFFB0,0xFFA8,0xFFB9,0xFFB1,0xFFBF,0xFFB2,0xFFBD,0xFFB8,0xFFC0,0xFFA7,0xFFBA,0xFFA4,0xFFAE,0xFF9D,0xFFAC,0xFFA3,0xFFAC,0xFF9D,0xFFB0,0xFFA4,0xFFB0,0xFFAA,0xFFBB,0xFFB3,0xFFBC,0xFFA3,0xFF99,0xFF96,0xFF8F,0xFF99,0xFF97,0xFF98,0xFF93,0xFF9E,0xFF9E,0xFFA0,0xFF9E,0xFFA7,0xFFAC,0xFFA8,0xFF9F,0xFFA9,0xFFA1,0xFF9A,0xFF94,0xFF97,0xFFA0,0xFF95,0xFF98,0xFF99,0xFFA6,0xFF98,0xFFA5,0xFFA0,0xFFB8,0xFFA9,0xFFAD,0xFFA6,0xFFA4,0xFFAC,0xFFA7,0xFFA3,0xFFA7,0xFFA7,0xFFA9,0xFFA3,0xFFAC,0xFFA6,0xFFB0,0xFFA4,0xFFB7,0xFFAD,0xFFB7,0xFFA1,0xFFAF,0xFF9F,0xFFA8,0xFF9C,0xFFAC,0xFFA3,0xFFAB,0xFF9E,0xFFAF,0xFFAA,0xFFB6,0xFFAE,0xFFBC,0xFFBA,0xFFC4,0xFFA9,0xFF95,0xFF95,0xFF8E,0xFF94,0xFF96,0xFF93,0xFF91,0xFF96,0xFF99,0xFF93,0xFF94,0xFF97,0xFF9E,0xFF9E,0xFF94,0xFF9E,0xFF9D,0xFF93,0xFF91,0xFF94,0xFF9F,0xFF96,0xFF95,0xFF96,0xFFA8,0xFF97,0xFFA6,0xFFA5,0xFFB6,0xFFAA,0xFFAB,0xFFA6,0xFFA4,0xFFAA,0xFFA4,0xFFA2,0xFFA6,0xFFA7,0xFFA6,0xFF9E,0xFFA5,0xFFA4,0xFFA4,0xFF9F,0xFFA7,0xFFA1,0xFFA7,0xFF9B,0xFFAB,0xFFA0,0xFFA9,0xFF9D,0xFFAA,0xFFA1,0xFFAB,0xFF9F,0xFFAE,0xFFAE,0xFFB7,0xFFAD,0xFFBB,0xFFB5,0xFFBB,0xFFA3,0xFF87,0xFF8A,0xFF80,0xFF8C,0xFF8B,0xFF8B,0xFF83,0xFF8B,0xFF8B,0xFF89,0xFF86,0xFF8B,0xFF8E,0xFF89,0xFF86,0xFF8B,0xFF93,0xFF8A,0xFF87,0xFF8D,0xFF95,0xFF8B,0xFF8D,0xFF8E,0xFFA6,0xFF93,0xFFA0,0xFF9D,0xFFA9,0xFF9D,0xFF9C,0xFF99,0x4DFA,0x1A58,0x7FFF,0x1A58,0x7FFF,0x1A57,0x7FFF,0x1A57,0xFFB9,0xCE35,0x1584,0xD64E,0xFFF9,0x000B,0x0000,0xFFFE,0x1976,0x03FD,0x0297,0x7FFF,0x1976,0x03FD,0x0297,0x7FFF,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0696,0x7FFF,0x1A58,0x7FFF,0x1A58,0x7FFF,0x1A57,0x7FFF,0xFFBF,0xF57A,0xCF18,0xD8E0,0x000A,0xFFFD,0xFFFE,0x0000,0x00F1,0x0046,0x2AC3,0x0035,0x00F1,0x0046,0x2AC3,0x0035,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x1901,0x0001 diff --git a/MLX90640_test/kta.csv b/MLX90640_test/kta.csv new file mode 100644 index 0000000..110b88a --- /dev/null +++ b/MLX90640_test/kta.csv @@ -0,0 +1 @@ +0.00671387,0.00646973,0.00720215,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00720215,0.00598145,0.00671387,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00585938,0.00585938,0.00634766,0.00732422,0.00585938,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00683594,0.00683594,0.00671387,0.00646973,0.00671387,0.00598145,0.00671387,0.00646973,0.00720215,0.00598145,0.00769043,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00671387,0.00598145,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00634766,0.00585938,0.00634766,0.00683594,0.00585938,0.00634766,0.00634766,0.00683594,0.00585938,0.00634766,0.00634766,0.00732422,0.00585938,0.00634766,0.00683594,0.00732422,0.00585938,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00683594,0.00634766,0.00671387,0.00646973,0.00720215,0.00598145,0.00671387,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00671387,0.00598145,0.00720215,0.00646973,0.00671387,0.00646973,0.00720215,0.00646973,0.00720215,0.00598145,0.00769043,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00646973,0.00671387,0.00695801,0.00769043,0.00646973,0.00683594,0.00585938,0.00634766,0.00634766,0.00683594,0.00585938,0.00585938,0.00634766,0.00732422,0.00585938,0.00634766,0.00634766,0.00683594,0.00634766,0.00585938,0.00634766,0.00781250,0.00585938,0.00634766,0.00634766,0.00781250,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00683594,0.00634766,0.00671387,0.00646973,0.00720215,0.00646973,0.00671387,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00671387,0.00598145,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766,0.00683594,0.00585938,0.00585938,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00781250,0.00634766,0.00683594,0.00683594,0.00671387,0.00695801,0.00720215,0.00598145,0.00671387,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00683594,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00585938,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00781250,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00683594,0.00683594,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00695801,0.00671387,0.00598145,0.00769043,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00646973,0.00769043,0.00646973,0.00769043,0.00646973,0.00769043,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00732422,0.00585938,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00683594,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00781250,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00683594,0.00720215,0.00646973,0.00720215,0.00646973,0.00671387,0.00695801,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00598145,0.00720215,0.00646973,0.00769043,0.00646973,0.00769043,0.00695801,0.00769043,0.00646973,0.00769043,0.00695801,0.00769043,0.00646973,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00781250,0.00634766,0.00683594,0.00683594,0.00732422,0.00634766,0.00683594,0.00683594,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00769043,0.00695801,0.00720215,0.00598145,0.00769043,0.00695801,0.00769043,0.00646973,0.00769043,0.00695801,0.00769043,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00683594,0.00634766,0.00781250,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00683594,0.00634766,0.00769043,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00598145,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00769043,0.00695801,0.00720215,0.00646973,0.00769043,0.00646973,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00695801,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00585938,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00683594,0.00781250,0.00634766,0.00683594,0.00634766,0.00732422,0.00634766,0.00683594,0.00634766,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00769043,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00769043,0.00695801,0.00769043,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00732422,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00683594,0.00683594,0.00720215,0.00695801,0.00720215,0.00646973,0.00671387,0.00695801,0.00769043,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00671387,0.00695801,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00769043,0.00646973,0.00732422,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00683594,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00683594,0.00634766,0.00720215,0.00695801,0.00720215,0.00646973,0.00769043,0.00695801,0.00720215,0.00646973,0.00671387,0.00646973,0.00671387,0.00646973,0.00671387,0.00695801,0.00671387,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00720215,0.00695801,0.00720215,0.00646973,0.00671387,0.00695801,0.00671387,0.00646973,0.00683594,0.00634766,0.00634766,0.00683594,0.00683594,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00732422,0.00634766,0.00634766,0.00634766,0.00683594,0.00634766,0.00634766,0.00634766 diff --git a/MLX90640_test/kv.csv b/MLX90640_test/kv.csv new file mode 100644 index 0000000..22da24f --- /dev/null +++ b/MLX90640_test/kv.csv @@ -0,0 +1 @@ +0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.43750000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000,0.37500000 diff --git a/MLX90640_test/main.c b/MLX90640_test/main.c new file mode 100644 index 0000000..f88d6e3 --- /dev/null +++ b/MLX90640_test/main.c @@ -0,0 +1,41 @@ +/* + * This file is part of the mlxtest project. + * Copyright 2022 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +#include "mlx90640.h" +#include "testdata.h" + +int main (int _U_ argc, char _U_ **argv){ + sl_init(); + MLX90640_params p; + if(!get_parameters(EEPROM, &p)) ERRX("Can't get parameters from test data"); + dump_parameters(&p, &extracted_parameters); + for(int i = 0; i < 2; ++i){ + printf("Process subpage %d\n", i); + fp_t *sp = process_subpage(&p, FRAME0, i, 2); + if(!sp) ERRX("WTF?"); + dumpIma(sp); + chkImage(sp, ToFrame[i]); + } + return 0; +} diff --git a/MLX90640_test/mlx90640.c b/MLX90640_test/mlx90640.c new file mode 100644 index 0000000..6a665e0 --- /dev/null +++ b/MLX90640_test/mlx90640.c @@ -0,0 +1,487 @@ +/* + * This file is part of the mlxtest project. + * Copyright 2022 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +#include "mlx90640.h" +#include "mlx90640_regs.h" + +// tolerance of floating point comparison +#define FP_TOLERANCE (1e-3) + +static fp_t mlx_image[MLX_PIXNO] = {0}; // ready image + +#ifdef EBUG +static double Tlast = 0.; +#define chstate() do{Tlast = sl_dtime(); DBG("chstate()");}while(0) +#endif + +void dumpIma(const fp_t im[MLX_PIXNO]){ + for(int row = 0; row < MLX_H; ++row){ + for(int col = 0; col < MLX_W; ++col){ + printf("%5.1f ", *im++); + } + printf("\n"); + } +} + +static void chki(const char *name, int16_t param, int16_t standard){ + printf("%*s | %-16d | %-16d - ", -16, name, param, standard); + if(param != standard){ + red("NOT equal!\n"); exit(1); + } + printf("OK\n"); +} +static void chkf(const char *name, fp_t param, fp_t standard){ + printf("%*s | %-16g | %-16g - ", -16, name, param, standard); + fp_t diff = (fabs(param) + fabs(standard)) * FP_TOLERANCE; + if(fabs(param - standard) > diff){ +// DBG("diff = %g", diff); + red("NOT equal!\n"); exit(1); + } + printf("OK\n"); +} +static void chkfa(const char *name, const fp_t *ap, const fp_t *as, int n){ + char buf[16]; + snprintf(buf, 15, "(size %d)", n); + printf("%*s | %-16s | %-16s - ", -16, name, "(array)", buf); + for(int i = 0; i < n; ++i){ + fp_t diff = (fabs(as[i]) + fabs(ap[i])) * FP_TOLERANCE; + if(fabs(ap[i] - as[i]) > diff){ +// DBG("diff = %g", diff); + red("NOT equal on index %d (%g and %g)\n", i, ap[i], as[i]); + exit(1); + } + } + printf("OK"); + if(n < 10){ + for(int i = 0; i < n; ++i) printf(" %g", as[i]); + } + printf("\n"); +} +static void chku8a(const char *name, const uint8_t *ap, const uint8_t *as, int n){ + char buf[16]; + snprintf(buf, 15, "(size %d)", n); + printf("%*s | %-16s | %-16s - ", -16, name, "(array)", buf); + for(int i = 0; i < n; ++i){ + if(ap[i] != as[i]){ + red("NOT equal on index %d (%d and %d)\n", i, ap[i], as[i]); + exit(1); + } + } + printf("OK"); + if(n < 10){ + for(int i = 0; i < n; ++i) printf(" %d", as[i]); + } + printf("\n"); +} +void chkImage(const fp_t Image[MLX_PIXNO], const fp_t ToFrame[MLX_PIXNO]){ + chkfa("Image", Image, ToFrame, MLX_PIXNO); +} + +void dump_parameters(MLX90640_params *params, const MLX90640_params *standard){ + printf("###########################################################\n"); + printf("%*s | %*s | %*s\n###########################################################\n", + -16, "# name", -16, "value", -16, "standard"); +#define CHKI(f) do{chki(#f, params->f, standard->f);}while(0) +#define CHKF(f) do{chkf(#f, params->f, standard->f);}while(0) +#define CHKFA(f, n) do{chkfa(#f, params->f, standard->f, n);}while(0) +#define CHKU8A(f, n) do{chku8a(#f, params->f, standard->f, n);}while(0) + CHKI(kVdd); + CHKI(vdd25); + CHKF(KvPTAT); + CHKI(vPTAT25); + CHKF(alphaPTAT); + CHKI(gainEE); + CHKF(tgc); + CHKF(cpKv); + CHKF(cpKta); + CHKF(KsTa); + CHKFA(CT, 3); + CHKFA(KsTo, 4); + CHKFA(alpha, MLX_PIXNO); + CHKFA(offset, MLX_PIXNO); + CHKFA(kta, MLX_PIXNO); + CHKFA(kv, 4); + CHKFA(cpAlpha, 2); + CHKI(resolEE); + CHKI(cpOffset[0]); CHKI(cpOffset[1]); + CHKU8A(outliers, MLX_PIXNO); +#if 0 + printf("kVdd=%d\nvdd25=%d\nKvPTAT=%g\nKtPTAT=%g\nvPTAT25=%d\n", params->kVdd, params->vdd25, params->KvPTAT, params->KtPTAT, params->vPTAT25); + printf("alphaPTAT=%g\ngainEE=%d\ntgc=%g\ncpKv=%g\ncpKta=%g\n", params->alphaPTAT, params->gainEE, params->tgc, params->cpKv, params->cpKta); + printf("KsTa=%g\nCT[]={%g, %g, %g}\n", params->KsTa, params->CT[0], params->CT[1], params->CT[2]); + printf("KsTo[]={"); for(int i = 0; i < 4; ++i) printf("%s%g", (i) ? ", " : "", params->KsTo[i]); printf("}\n"); + printf("alphacorr[]={"); for(int i = 0; i < 4; ++i) printf("%s%g", (i) ? ", " : "", params->alphacorr[i]); printf("}\n"); + printf("alpha[]=\n"); dumpIma(params->alpha); + printf("offset[]=\n"); dumpIma(params->offset); + printf("kta[]=\n"); dumpIma(params->kta); + printf("kv[]={"); for(int i = 0; i < 4; ++i) printf("%s%g", (i) ? ", " : "", params->kv[i]); printf("}\n"); + printf("cpAlpha[]={%g, %g}\n", params->cpAlpha[0], params->cpAlpha[1]); + printf("cpOffset[]={%d, %d}\n", params->cpOffset[0], params->cpOffset[1]); + printf("outliers[]=\n"); + uint8_t *o = params->outliers; + for(int row = 0; row < MLX_H; ++row){ + for(int col = 0; col < MLX_W; ++col){ + printf("%d ", *o++); + } + printf("\n"); + } +#endif +#undef CHKI +#undef CHKF +} + +/***************************************************************************** + Calculate parameters & values + *****************************************************************************/ + +// fill OCC/ACC row/col arrays +static void occacc(int8_t *arr, int l, const uint16_t *regstart){ + int n = l >> 2; // divide by 4 + int8_t *p = arr; + for(int i = 0; i < n; ++i){ + register uint16_t val = *regstart++; + *p++ = (val & 0x000F) >> 0; + *p++ = (val & 0x00F0) >> 4; + *p++ = (val & 0x0F00) >> 8; + *p++ = (val ) >> 12; + } + for(int i = 0; i < l; ++i, ++arr){ + if(*arr > 0x07) *arr -= 0x10; + } +} + +// get all parameters' values from `dataarray`, return FALSE if something failed +int get_parameters(const uint16_t dataarray[MLX_DMA_MAXLEN], MLX90640_params *params){ + #define CREG_VAL(reg) dataarray[CREG_IDX(reg)] + int8_t i8; + int16_t i16; + uint16_t *pu16; + uint16_t val = CREG_VAL(REG_VDD); + i8 = (int8_t) (val >> 8); + params->kVdd = i8 * 32; // keep sign + if(params->kVdd == 0) return FALSE; + i16 = val & 0xFF; + params->vdd25 = ((i16 - 0x100) * 32) - (1<<13); + val = CREG_VAL(REG_KVTPTAT); + i16 = (val & 0xFC00) >> 10; + if(i16 > 0x1F) i16 -= 0x40; + params->KvPTAT = (fp_t)i16 / (1<<12); + i16 = (val & 0x03FF); + if(i16 > 0x1FF) i16 -= 0x400; + params->KtPTAT = (fp_t)i16 / 8.; + params->vPTAT25 = (int16_t) CREG_VAL(REG_PTAT); + val = CREG_VAL(REG_APTATOCCS) >> 12; + params->alphaPTAT = val / 4. + 8.; + params->gainEE = (int16_t)CREG_VAL(REG_GAIN); + if(params->gainEE == 0) return FALSE; + int8_t occRow[MLX_H]; + int8_t occColumn[MLX_W]; + occacc(occRow, MLX_H, &CREG_VAL(REG_OCCROW14)); + occacc(occColumn, MLX_W, &CREG_VAL(REG_OCCCOL14)); + int8_t accRow[MLX_H]; + int8_t accColumn[MLX_W]; + occacc(accRow, MLX_H, &CREG_VAL(REG_ACCROW14)); + occacc(accColumn, MLX_W, &CREG_VAL(REG_ACCCOL14)); + val = CREG_VAL(REG_APTATOCCS); + // need to do multiplication instead of bitshift, so: + fp_t occRemScale = 1<<(val&0x0F), + occColumnScale = 1<<((val>>4)&0x0F), + occRowScale = 1<<((val>>8)&0x0F); + int16_t offavg = (int16_t) CREG_VAL(REG_OSAVG); + // even/odd column/row numbers are for starting from 1, so for starting from 0 we should swap them: + // even - for 1,3,5,...; odd - for 0,2,4,... etc + int8_t ktaavg[4]; + // 0 - odd row, odd col; 1 - odd row even col; 2 - even row, odd col; 3 - even row, even col + val = CREG_VAL(REG_KTAAVGODDCOL); + ktaavg[2] = (int8_t)(val & 0xFF); // odd col (1,3,..), even row (2,4,..) -> col 0,2,..; row 1,3,.. + ktaavg[0] = (int8_t)(val >> 8); // odd col, odd row -> col 0,2,..; row 0,2,.. + val = CREG_VAL(REG_KTAAVGEVENCOL); + ktaavg[3] = (int8_t)(val & 0xFF); // even col, even row -> col 1,3,..; row 1,3,.. + ktaavg[1] = (int8_t)(val >> 8); // even col, odd row -> col 1,3,..; row 0,2,.. + // so index of ktaavg is 2*(row&1)+(col&1) + val = CREG_VAL(REG_KTAVSCALE); + uint8_t scale1 = ((val & 0xFF)>>4) + 8, scale2 = (val&0xF); + if(scale1 == 0 || scale2 == 0) return FALSE; + fp_t mul = (fp_t)(1<alpha; + uint32_t diva32 = 1 << (val >> 12); + fp_t diva = (fp_t)(diva32); + diva *= (fp_t)(1<<30); // alpha_scale + DBG("diva: %g", diva); + fp_t accRowScale = 1<<((val & 0x0f00)>>8), + accColumnScale = 1<<((val & 0x00f0)>>4), + accRemScale = 1<<(val & 0x0f); + pu16 = (uint16_t*)&CREG_VAL(REG_OFFAK1); + fp_t *kta = params->kta, *offset = params->offset; + uint8_t *ol = params->outliers; + for(int row = 0; row < MLX_H; ++row){ + int idx = (row&1)<<1; + for(int col = 0; col < MLX_W; ++col){ + // offset + register uint16_t rv = *pu16++; + i16 = (rv & 0xFC00) >> 10; + if(i16 > 0x1F) i16 -= 0x40; + *offset++ = (fp_t)offavg + (fp_t)occRow[row]*occRowScale + (fp_t)occColumn[col]*occColumnScale + (fp_t)i16*occRemScale; + // kta + i16 = (rv & 0xF) >> 1; + if(i16 > 0x03) i16 -= 0x08; + *kta++ = (ktaavg[idx|(col&1)] + i16*mul) / div; + // alpha + i16 = (rv & 0x3F0) >> 4; + if(i16 > 0x1F) i16 -= 0x40; + fp_t oft = (fp_t)a_r + accRow[row]*accRowScale + accColumn[col]*accColumnScale +i16*accRemScale; + *a++ = oft / diva; + *ol++ = (rv&1) ? 1 : 0; + } + } + scale1 = (CREG_VAL(REG_KTAVSCALE) >> 8) & 0xF; // kvscale + div = (fp_t)(1<> 12; if(i16 > 0x07) i16 -= 0x10; + ktaavg[0] = (int8_t)i16; // odd col, odd row + i16 = (val & 0xF0) >> 4; if(i16 > 0x07) i16 -= 0x10; + ktaavg[1] = (int8_t)i16; // even col, odd row + i16 = (val & 0x0F00) >> 8; if(i16 > 0x07) i16 -= 0x10; + ktaavg[2] = (int8_t)i16; // odd col, even row + i16 = val & 0x0F; if(i16 > 0x07) i16 -= 0x10; + ktaavg[3] = (int8_t)i16; // even col, even row + for(int i = 0; i < 4; ++i) params->kv[i] = ktaavg[i] / div; + val = CREG_VAL(REG_CPOFF); + params->cpOffset[0] = (val & 0x03ff); + if(params->cpOffset[0] > 0x1ff) params->cpOffset[0] -= 0x400; + params->cpOffset[1] = val >> 10; + if(params->cpOffset[1] > 0x1f) params->cpOffset[1] -= 0x40; + params->cpOffset[1] += params->cpOffset[0]; + val = ((CREG_VAL(REG_KTAVSCALE) & 0xF0) >> 4) + 8; + i8 = (int8_t)(CREG_VAL(REG_KVTACP) & 0xFF); + params->cpKta = (fp_t)i8 / (1<> 8; + i16 = CREG_VAL(REG_KVTACP) >> 8; + if(i16 > 0x7F) i16 -= 0x100; + params->cpKv = (fp_t)i16 / (1< 0x7F) i16 -= 0x100; + params->tgc = (fp_t)i16; + params->tgc /= 32.; + val = (CREG_VAL(REG_SCALEACC)>>12); // alpha_scale_CP + i16 = CREG_VAL(REG_ALPHA)>>10; // cp_P1_P0_ratio + if(i16 > 0x1F) i16 -= 0x40; + div = (fp_t)(1<cpAlpha[0] = (fp_t)(CREG_VAL(REG_ALPHA) & 0x03FF) / div; + div = (fp_t)(1<<7); + params->cpAlpha[1] = params->cpAlpha[0] * (1. + (fp_t)i16/div); + i8 = (int8_t)(CREG_VAL(REG_KSTATGC) >> 8); + params->KsTa = (fp_t)i8/(1<<13); + div = 1<<((CREG_VAL(REG_CT34) & 0x0F) + 8); // kstoscale + DBG("kstoscale=%g (regct34=0x%04x)", div, CREG_VAL(REG_CT34)); + val = CREG_VAL(REG_KSTO12); + DBG("ksto12=0x%04x", val); + i8 = (int8_t)(val & 0xFF); + DBG("To1ee=%d", i8); + params->KsTo[0] = i8 / div; + i8 = (int8_t)(val >> 8); + DBG("To2ee=%d", i8); + params->KsTo[1] = i8 / div; + val = CREG_VAL(REG_KSTO34); + DBG("ksto34=0x%04x", val); + i8 = (int8_t)(val & 0xFF); + DBG("To3ee=%d", i8); + params->KsTo[2] = i8 / div; + i8 = (int8_t)(val >> 8); + DBG("To4ee=%d", i8); + params->KsTo[3] = i8 / div; + // CT1 = -40, CT2 = 0 -> start from zero index, so CT[0] is CT2, CT[1] is CT3, CT[2] is CT4 + params->CT[0] = 0.; // 0degr - between ranges 1 and 2 + val = CREG_VAL(REG_CT34); + mul = ((val & 0x3000)>>12)*10.; // step + params->CT[1] = ((val & 0xF0)>>4)*mul; // CT3 - between ranges 2 and 3 + params->CT[2] = ((val & 0x0F00) >> 8)*mul + params->CT[1]; // CT4 - between ranges 3 and 4 + // alphacorr for each range: 11.1.11 + params->alphacorr[0] = 1./(1. + params->KsTo[0] * 40.); + params->alphacorr[1] = 1.; + params->alphacorr[2] = (1. + params->KsTo[1] * params->CT[1]); + params->alphacorr[3] = (1. + params->KsTo[2] * (params->CT[2] - params->CT[1])) * params->alphacorr[2]; + params->resolEE = (uint8_t)((CREG_VAL(REG_KTAVSCALE) & 0x3000) >> 12); + // Don't forget to check 'outlier' flags for wide purpose + return TRUE; +#undef CREG_VAL +} + +/** + * @brief process_subpage - calculate all parameters from `dataarray` into `mlx_image` + * @param subpageno - number of subpage + * @param simpleimage == 0 - simplest, 1 - narrow range, 2 - extended range + */ +fp_t *process_subpage(MLX90640_params *params, const int16_t Frame[MLX_DMA_MAXLEN], int subpageno, int simpleimage){ +#define IMD_VAL(reg) Frame[IMD_IDX(reg)] + DBG("\nprocess_subpage(%d)", subpageno); +#ifdef EBUG + chstate(); +#endif + // 11.2.2.1. Resolution restore + // temporary: + fp_t resol_corr = (fp_t)(1<resolEE) / (1<<2); // calibrated resol/current resol + DBG("resolEE=%d, resolCur=%d", params->resolEE, 2); + //fp_t resol_corr = (fp_t)(1<resolEE) / (1<<((reg_control_val[subpageno]&0x0C00)>>10)); // calibrated resol/current resol + //DBG("resolEE=%d, resolCur=%d", params->resolEE, ((reg_control_val[subpageno]&0x0C00)>>10)); + // 11.2.2.2. Supply voltage value calculation + int16_t i16a = (int16_t)IMD_VAL(REG_IVDDPIX); + fp_t dvdd = resol_corr*i16a - params->vdd25; + dvdd /= params->kVdd; + fp_t dV = i16a - params->vdd25; // for next step + dV /= params->kVdd; + DBG("ram=%d, vdd25=%d, dvdd=%g, resol=%g", i16a, params->vdd25, dvdd, resol_corr); + DBG("Vd=%g", dvdd+3.3); + // 11.2.2.3. Ambient temperature calculation + i16a = (int16_t)IMD_VAL(REG_ITAPTAT); + int16_t i16b = (int16_t)IMD_VAL(REG_ITAVBE); + fp_t dTa = (fp_t)i16a / (i16a * params->alphaPTAT + i16b); // vptatart + dTa *= (fp_t)(1<<18); + dTa = (dTa / (1. + params->KvPTAT*dV)) - params->vPTAT25; + dTa = dTa / params->KtPTAT; // without 25degr - Ta0 + DBG("Ta=%g", dTa+25.); + // 11.2.2.4. Gain parameter calculation + i16a = (int16_t)IMD_VAL(REG_IGAIN); + fp_t Kgain = params->gainEE / (fp_t)i16a; + DBG("Kgain=%g", Kgain); + fp_t pixOS[2]; // pix_gain_CP_SPx + // 11.2.2.6.1 + pixOS[0] = ((int16_t)IMD_VAL(REG_ICPSP0))*Kgain; // pix_OS_CP_SPx + pixOS[1] = ((int16_t)IMD_VAL(REG_ICPSP1))*Kgain; + DBG("pixGain: %g/%g", pixOS[0], pixOS[1]); + for(int i = 0; i < 2; ++i){ // calc pixOS by gain + // 11.2.2.6.2 + pixOS[i] -= params->cpOffset[i]*(1. + params->cpKta*dTa)*(1. + params->cpKv*dvdd); + } + // now make first approximation to image + uint16_t pixno = 0; // current pixel number - for indexing in parameters etc + for(int row = 0, rowidx = 0; row < MLX_H; ++row, rowidx ^= 2){ + for(int col = 0, idx = rowidx; col < MLX_W; ++col, ++pixno, idx ^= 1){ + uint8_t sp = (row&1)^(col&1); // subpage of current pixel + if(sp != subpageno) continue; + // 11.2.2.5.1 + fp_t curval = (fp_t)(Frame[pixno]) * Kgain; // gain compensation + // 11.2.2.5.3 + curval -= params->offset[pixno] * (1. + params->kta[pixno]*dTa) * + (1. + params->kv[idx]*dvdd); // add offset + // now `curval` is pix_OS == V_IR_emiss_comp + // 11.2.2.7 + fp_t IRcompens = curval - params->tgc * pixOS[subpageno]; // IR_compensated + if(simpleimage == 0){ // ??? + curval = IRcompens; + /* + curval -= params->cpOffset[subpageno] * (1. - params->cpKta * dTa) * + (1. + params->cpKv * dvdd); // CP + curval = IRcompens - params->tgc * curval; // IR gradient compens + */ + }else{ + // 11.2.2.8 + fp_t alphaComp = params->alpha[pixno] - params->tgc * params->cpAlpha[subpageno]; + alphaComp /= 1. + params->KsTa * dTa; + // 11.2.2.9: calculate To for basic range + fp_t Tar = dTa + 273.15 + 25.; // Ta+273.15 + Tar = Tar*Tar*Tar*Tar; // T_aK4 (when \epsilon==1 this is T_{a-r} too) + fp_t ac3 = alphaComp*alphaComp*alphaComp; + fp_t Sx = ac3*IRcompens + alphaComp*ac3*Tar; + Sx = params->KsTo[1] * SQRT(SQRT(Sx)); + fp_t To; + if(simpleimage == 1){ + To = IRcompens / (alphaComp * (1. - 273.15*params->KsTo[1]) + Sx) + Tar; + }else{ // extended range + int idx = 0; // range 1 by default + fp_t ctx = -40.; + if(curval > params->CT[0] && curval < params->CT[1]){ // range 2 + idx = 1; ctx = params->CT[0]; + }else if(curval < params->CT[2]){ // range 3 + idx = 2; ctx = params->CT[1]; + }else{ // range 4 + idx = 3; ctx = params->CT[2]; + } + To = IRcompens / (alphaComp * params->alphacorr[idx] * (1. + params->KsTo[idx]*(curval - ctx))) + Tar; + } + curval = SQRT(SQRT(To)) - 273.15; + } + mlx_image[pixno] = curval; + } + } + DBG("Time: %g", sl_dtime()-Tlast); + return mlx_image; +#undef IMD_VAL +} +#if 0 +// start image acquiring for next subpage +static int process_startima(int subpageno){ + chstate(); + DBG("startima(%d)", subpageno); + uint16_t reg, N; + while(1){ + // write `overwrite` flag twice + if(!write_reg(REG_CONTROL, reg_control_val[subpageno]) || + !write_reg(REG_STATUS, REG_STATUS_OVWEN) || + !write_reg(REG_STATUS, REG_STATUS_OVWEN)) chkerr(); + while(1){ + if(read_reg(REG_STATUS, ®)){ + if(reg & REG_STATUS_NEWDATA){ + DBG("got newdata: %g", sl_dtime() - Tlast); + if(subpageno != (reg & REG_STATUS_SPNO)){ + DBG("wrong subpage number -> M_ERROR"); + return FALSE; + }else{ // all OK, run image reading + chstate(); + write_reg(REG_STATUS, 0); // clear rdy bit + N = MLX_PIXARRSZ; + if(read_data(REG_IMAGEDATA, &N) && N == MLX_PIXARRSZ){ + DBG("got readoutm N=%d: %g", N, sl_dtime() - Tlast); + return TRUE; + }else chkerr(); + } + }else chktmout(); + }else chkerr(); + } + } + return FALSE; +} + +// if state of MLX allows, make an image else return error +// @param simple ==1 for simplest image processing (without T calibration) +int mlx90640_take_image(uint8_t simple, fp_t **image){ + if(I2Cfd < 1) return FALSE; + if(params->kVdd == 0){ // no parameters -> make first run + if(!process_firstrun()) return FALSE; + } + DBG("\n\n\n-> M_STARTIMA"); + for(int sp = 0; sp < 2; ++sp){ + if(!process_startima(sp)) return FALSE; // get first subpage + process_subpage(sp, simple); + } + if(image) *image = mlx_image; + return TRUE; +} + +#endif diff --git a/MLX90640_test/mlx90640.h b/MLX90640_test/mlx90640.h new file mode 100644 index 0000000..b58d06c --- /dev/null +++ b/MLX90640_test/mlx90640.h @@ -0,0 +1,66 @@ +/* + * This file is part of the mlxtest project. + * Copyright 2022 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +// floating type & sqrt operator +typedef double fp_t; +#define SQRT(x) sqrt((x)) + +// amount of pixels +#define MLX_W (32) +#define MLX_H (24) +#define MLX_PIXNO (MLX_W*MLX_H) +// pixels + service data +#define MLX_PIXARRSZ (MLX_PIXNO + 64) + +typedef struct{ + int16_t kVdd; + int16_t vdd25; + fp_t KvPTAT; + fp_t KtPTAT; + int16_t vPTAT25; + fp_t alphaPTAT; + int16_t gainEE; + fp_t tgc; + fp_t cpKv; // K_V_CP + fp_t cpKta; // K_Ta_CP + fp_t KsTa; + fp_t CT[3]; // range borders (0, 160, 320 degrC?) + fp_t KsTo[4]; // K_S_To for each range * 273.15 + fp_t alphacorr[4]; // Alpha_corr for each range + fp_t alpha[MLX_PIXNO]; // full - with alpha_scale + fp_t offset[MLX_PIXNO]; + fp_t kta[MLX_PIXNO]; // full K_ta - with scale1&2 + fp_t kv[4]; // full - with scale; 0 - odd row, odd col; 1 - odd row even col; 2 - even row, odd col; 3 - even row, even col + fp_t cpAlpha[2]; // alpha_CP_subpage 0 and 1 + uint8_t resolEE; // resolution_EE + int16_t cpOffset[2]; + uint8_t outliers[MLX_PIXNO]; // outliers - bad pixels (if == 1) +} MLX90640_params; + +// full amount of IMAGE data + EXTRA data (counts of uint16_t!) +#define MLX_DMA_MAXLEN (834) + +int get_parameters(const uint16_t dataarray[MLX_DMA_MAXLEN], MLX90640_params *params); +void dump_parameters(MLX90640_params *params, const MLX90640_params *standard); +fp_t *process_subpage(MLX90640_params *params, const int16_t Frame[MLX_DMA_MAXLEN], int subpageno, int simpleimage); +void chkImage(const fp_t Image[MLX_PIXNO], const fp_t ToFrame[MLX_PIXNO]); +void dumpIma(const fp_t im[MLX_PIXNO]); diff --git a/MLX90640_test/mlx90640_regs.h b/MLX90640_test/mlx90640_regs.h new file mode 100644 index 0000000..859e69c --- /dev/null +++ b/MLX90640_test/mlx90640_regs.h @@ -0,0 +1,90 @@ +/* + * This file is part of the mlxtest project. + * Copyright 2022 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define REG_STATUS 0x8000 +#define REG_STATUS_OVWEN (1<<4) +#define REG_STATUS_NEWDATA (1<<3) +#define REG_STATUS_SPNO (1<<0) +#define REG_STATUS_SPMASK (3<<0) +#define REG_CONTROL 0x800D +#define REG_CONTROL_CHESS (1<<12) +#define REG_CONTROL_RES16 (0<<10) +#define REG_CONTROL_RES17 (1<<10) +#define REG_CONTROL_RES18 (2<<10) +#define REG_CONTROL_RES19 (3<<10) +#define REG_CONTROL_RESMASK (3<<10) +#define REG_CONTROL_REFR_05HZ (0<<7) +#define REG_CONTROL_REFR_1HZ (1<<7) +#define REG_CONTROL_REFR_2HZ (2<<7) +#define REG_CONTROL_REFR_4HZ (3<<7) +#define REG_CONTROL_REFR_8HZ (4<<7) +#define REG_CONTROL_REFR_16HZ (5<<7) +#define REG_CONTROL_REFR_32HZ (6<<7) +#define REG_CONTROL_REFR_64HZ (7<<7) +#define REG_CONTROL_SUBP1 (1<<4) +#define REG_CONTROL_SUBPMASK (3<<4) +#define REG_CONTROL_SUBPSEL (1<<3) +#define REG_CONTROL_DATAHOLD (1<<2) +#define REG_CONTROL_SUBPEN (1<<0) + +// default value +#define REG_CONTROL_DEFAULT (REG_CONTROL_CHESS|REG_CONTROL_RES18|REG_CONTROL_REFR_2HZ|REG_CONTROL_SUBPEN) + +// calibration data start & len +#define REG_CALIDATA 0x2400 +#define REG_CALIDATA_LEN 832 + +#define REG_APTATOCCS 0x2410 +#define REG_OSAVG 0x2411 +#define REG_OCCROW14 0x2412 +#define REG_OCCCOL14 0x2418 +#define REG_SCALEACC 0x2420 +#define REG_SENSIVITY 0x2421 +#define REG_ACCROW14 0x2422 +#define REG_ACCCOL14 0x2428 +#define REG_GAIN 0x2430 +#define REG_PTAT 0x2431 +#define REG_KVTPTAT 0x2432 +#define REG_VDD 0x2433 +#define REG_KVAVG 0x2434 +#define REG_ILCHESS 0x2435 +#define REG_KTAAVGODDCOL 0x2436 +#define REG_KTAAVGEVENCOL 0x2437 +#define REG_KTAVSCALE 0x2438 +#define REG_ALPHA 0x2439 +#define REG_CPOFF 0x243A +#define REG_KVTACP 0x243B +#define REG_KSTATGC 0x243C +#define REG_KSTO12 0x243D +#define REG_KSTO34 0x243E +#define REG_CT34 0x243F +#define REG_OFFAK1 0x2440 +// index of register in array (from REG_CALIDATA) +#define CREG_IDX(addr) ((addr)-REG_CALIDATA) + +#define REG_IMAGEDATA 0x0400 +#define REG_ITAVBE 0x0700 +#define REG_ICPSP0 0x0708 +#define REG_IGAIN 0x070A +#define REG_ITAPTAT 0x0720 +#define REG_ICPSP1 0x0728 +#define REG_IVDDPIX 0x072A +// index of register in array (from REG_IMAGEDATA) +#define IMD_IDX(addr) ((addr)-REG_IMAGEDATA) diff --git a/MLX90640_test/mlxtest.cflags b/MLX90640_test/mlxtest.cflags new file mode 100644 index 0000000..68d5165 --- /dev/null +++ b/MLX90640_test/mlxtest.cflags @@ -0,0 +1 @@ +-std=c17 \ No newline at end of file diff --git a/MLX90640_test/mlxtest.config b/MLX90640_test/mlxtest.config new file mode 100644 index 0000000..e93f8a9 --- /dev/null +++ b/MLX90640_test/mlxtest.config @@ -0,0 +1,4 @@ +#define GNU_SOURCE 1 +#define _XOPEN_SOURCE 1111 +#define EBUG + diff --git a/MLX90640_test/mlxtest.creator b/MLX90640_test/mlxtest.creator new file mode 100644 index 0000000..e94cbbd --- /dev/null +++ b/MLX90640_test/mlxtest.creator @@ -0,0 +1 @@ +[General] diff --git a/MLX90640_test/mlxtest.creator.user b/MLX90640_test/mlxtest.creator.user new file mode 100644 index 0000000..1aed93b --- /dev/null +++ b/MLX90640_test/mlxtest.creator.user @@ -0,0 +1,218 @@ + + + + + + EnvironmentId + {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + KOI8-R + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + false + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + Builtin.BuildSystem + + true + true + Builtin.DefaultTidyAndClazy + 2 + false + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop + Desktop + {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} + 0 + 0 + 0 + + /tmp/1/home/eddy/MLX90640_wiringPi + + + + all + + true + GenericProjectManager.GenericMakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + GenericProjectManager.GenericMakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + По умолчанию + GenericProjectManager.GenericBuildConfiguration + 0 + 0 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + true + + 1 + + 1 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/MLX90640_test/mlxtest.cxxflags b/MLX90640_test/mlxtest.cxxflags new file mode 100644 index 0000000..6435dfc --- /dev/null +++ b/MLX90640_test/mlxtest.cxxflags @@ -0,0 +1 @@ +-std=c++17 \ No newline at end of file diff --git a/MLX90640_test/mlxtest.files b/MLX90640_test/mlxtest.files new file mode 100644 index 0000000..18c5ace --- /dev/null +++ b/MLX90640_test/mlxtest.files @@ -0,0 +1,5 @@ +main.c +mlx90640.c +mlx90640.h +mlx90640_regs.h +testdata.h diff --git a/MLX90640_test/mlxtest.includes b/MLX90640_test/mlxtest.includes new file mode 100644 index 0000000..774cf29 --- /dev/null +++ b/MLX90640_test/mlxtest.includes @@ -0,0 +1,2 @@ +/usr/local/include +. diff --git a/MLX90640_test/offset.csv b/MLX90640_test/offset.csv new file mode 100644 index 0000000..d79d26b --- /dev/null +++ b/MLX90640_test/offset.csv @@ -0,0 +1 @@ +-54,-56,-50,-60,-50,-56,-48,-60,-49,-57,-48,-61,-49,-59,-48,-63,-46,-59,-48,-65,-49,-61,-49,-66,-47,-64,-50,-69,-53,-66,-51,-75,-61,-64,-65,-61,-57,-63,-63,-61,-56,-63,-63,-62,-56,-65,-63,-64,-53,-65,-63,-65,-55,-66,-63,-66,-53,-69,-63,-69,-58,-70,-64,-74,-53,-56,-50,-60,-51,-55,-48,-60,-48,-56,-47,-61,-47,-58,-47,-62,-45,-58,-48,-64,-47,-59,-47,-67,-46,-62,-49,-68,-52,-65,-50,-75,-60,-62,-65,-61,-58,-61,-63,-61,-55,-62,-62,-61,-54,-64,-62,-62,-51,-64,-62,-63,-53,-66,-62,-66,-52,-67,-63,-67,-59,-71,-64,-75,-50,-54,-49,-58,-48,-54,-48,-59,-46,-55,-47,-60,-47,-55,-47,-61,-43,-57,-46,-62,-46,-59,-47,-65,-46,-61,-48,-67,-52,-65,-50,-74,-57,-63,-65,-60,-56,-62,-64,-61,-54,-63,-62,-62,-54,-62,-62,-63,-51,-64,-62,-63,-52,-66,-62,-65,-53,-69,-62,-69,-59,-71,-64,-75,-53,-54,-49,-59,-49,-54,-47,-58,-45,-54,-47,-60,-47,-55,-46,-62,-46,-57,-47,-62,-47,-58,-47,-64,-46,-61,-48,-66,-50,-64,-49,-73,-62,-64,-66,-62,-59,-63,-64,-61,-54,-63,-64,-62,-55,-63,-63,-63,-54,-65,-63,-64,-55,-65,-63,-65,-54,-68,-64,-68,-58,-72,-64,-75,-52,-53,-49,-58,-50,-53,-47,-58,-48,-54,-47,-60,-47,-55,-46,-61,-45,-57,-47,-63,-46,-58,-48,-65,-46,-61,-49,-67,-50,-64,-50,-73,-62,-65,-67,-63,-59,-63,-65,-63,-57,-64,-64,-63,-56,-65,-64,-64,-54,-66,-64,-65,-55,-68,-64,-66,-54,-69,-65,-69,-58,-72,-66,-75,-50,-54,-49,-58,-47,-53,-49,-59,-45,-55,-48,-60,-45,-55,-49,-62,-44,-57,-47,-63,-45,-58,-48,-65,-47,-62,-51,-69,-52,-65,-52,-75,-61,-66,-68,-64,-58,-65,-67,-64,-56,-66,-66,-65,-55,-66,-65,-65,-54,-67,-64,-66,-55,-68,-65,-68,-54,-71,-66,-71,-60,-73,-67,-77,-54,-54,-52,-59,-51,-54,-50,-59,-49,-55,-49,-60,-48,-55,-49,-62,-46,-58,-49,-65,-48,-60,-49,-66,-46,-63,-50,-68,-52,-64,-52,-75,-66,-69,-73,-66,-62,-68,-69,-65,-60,-67,-68,-65,-59,-67,-69,-66,-56,-69,-67,-68,-57,-69,-66,-69,-54,-71,-66,-70,-60,-73,-69,-77,-56,-54,-52,-59,-53,-54,-51,-60,-50,-56,-51,-61,-49,-56,-50,-63,-47,-58,-50,-65,-48,-59,-51,-66,-47,-62,-52,-68,-54,-66,-53,-76,-69,-71,-73,-69,-66,-69,-72,-68,-62,-69,-71,-67,-61,-69,-70,-68,-58,-70,-68,-70,-58,-70,-68,-69,-56,-71,-68,-71,-62,-74,-69,-79,-54,-55,-53,-60,-52,-55,-53,-61,-51,-57,-54,-63,-50,-57,-53,-64,-49,-59,-51,-65,-50,-60,-53,-66,-49,-63,-54,-71,-55,-66,-55,-76,-69,-73,-76,-70,-66,-71,-75,-69,-65,-72,-74,-71,-63,-71,-71,-71,-60,-71,-70,-70,-61,-71,-70,-70,-59,-74,-70,-75,-63,-76,-70,-80,-62,-57,-58,-62,-59,-57,-56,-62,-56,-59,-54,-64,-55,-60,-54,-65,-52,-61,-54,-67,-53,-62,-54,-68,-53,-64,-56,-71,-55,-67,-56,-75,-77,-77,-83,-74,-74,-74,-79,-73,-70,-74,-76,-73,-68,-74,-75,-73,-64,-75,-74,-73,-64,-74,-73,-74,-63,-76,-74,-75,-64,-78,-74,-80,-66,-58,-61,-65,-61,-59,-57,-64,-57,-60,-56,-66,-55,-60,-56,-67,-55,-63,-57,-69,-54,-63,-56,-69,-54,-64,-57,-72,-59,-67,-58,-77,-82,-80,-86,-78,-77,-78,-81,-76,-73,-78,-79,-76,-69,-76,-78,-75,-68,-78,-78,-76,-67,-76,-77,-76,-66,-78,-77,-77,-70,-80,-77,-84,-67,-60,-65,-66,-62,-61,-63,-68,-62,-62,-62,-67,-60,-64,-61,-70,-57,-65,-59,-69,-56,-65,-59,-71,-58,-67,-62,-74,-63,-69,-63,-78,-94,-91,-100,-88,-88,-88,-95,-87,-85,-87,-92,-86,-82,-88,-90,-88,-78,-87,-88,-84,-77,-87,-87,-86,-76,-89,-87,-90,-80,-90,-87,-93 diff --git a/MLX90640_test/testdata.h b/MLX90640_test/testdata.h new file mode 100644 index 0000000..e99e3fd --- /dev/null +++ b/MLX90640_test/testdata.h @@ -0,0 +1,81 @@ +/* + * This file is part of the mlxtest project. + * Copyright 2025 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// data from MLX documentation for algorithms testing +// this file should be included only once! + +#ifdef _TESTDATA_H__ +#error "Don't include this file several times!" +#endif +#define _TESTDATA_H__ + +#include "mlx90640.h" + +static const uint16_t EEPROM[MLX_DMA_MAXLEN] = { + #include "eeprom.csv" +}; + +static const int16_t FRAME0[MLX_DMA_MAXLEN] = { + #include "frame0.csv" +}; + +static const int16_t FRAME1[MLX_DMA_MAXLEN] = { + #include "frame1.csv" +}; + +static const MLX90640_params extracted_parameters = { + .kVdd = -3200 + ,.vdd25 = -12544 + ,.KvPTAT = 0.002197 + ,.KtPTAT = 42.625000 + ,.vPTAT25 = 12196 + ,.alphaPTAT = 9.0 + ,.gainEE = 5580 + ,.tgc = 0.000000 + ,.cpKv = 0.3750 + ,.cpKta = 0.004272 +// ,.calibrationModeEE = 128 + ,.KsTa = -0.002441 + ,.CT = {0., 300., 500.} + ,.KsTo = {-0.0002, -0.0002, -0.0002, -0.0002} + ,.alphacorr = {} + ,.alpha = { + #include "alpha.csv" + } + ,.offset = { + #include "offset.csv" + } + ,.kta = { + #include "kta.csv" + } + ,.kv = {0.4375, 0.3750, 0.3750, 0.3750} + ,.cpAlpha = {0.0000000028812792152, 0.0000000029037892091} + ,.resolEE = 2 + ,.cpOffset = {-69, -65} + ,.outliers = {0} +}; + +static const fp_t ToFrame[2][MLX_PIXNO] = { + { +#include "to_frame0.csv" + }, + { +#include "to_frame0.csv" + } +}; + diff --git a/MLX90640_test/to_frame0.csv b/MLX90640_test/to_frame0.csv new file mode 100644 index 0000000..d054181 --- /dev/null +++ b/MLX90640_test/to_frame0.csv @@ -0,0 +1 @@ +28.711,0.000,28.178,0.000,28.313,0.000,28.631,0.000,28.295,0.000,28.586,0.000,28.336,0.000,28.683,0.000,28.248,0.000,28.573,0.000,29.127,0.000,28.629,0.000,29.070,0.000,28.894,0.000,28.883,0.000,29.687,0.000,0.000,28.618,0.000,28.134,0.000,28.517,0.000,27.982,0.000,28.092,0.000,27.914,0.000,28.156,0.000,28.261,0.000,28.198,0.000,28.528,0.000,28.837,0.000,28.730,0.000,28.814,0.000,28.558,0.000,28.605,0.000,29.005,28.513,0.000,28.482,0.000,28.428,0.000,27.946,0.000,28.248,0.000,28.387,0.000,28.340,0.000,28.128,0.000,28.544,0.000,28.321,0.000,28.986,0.000,28.445,0.000,28.728,0.000,28.778,0.000,29.035,0.000,28.639,0.000,0.000,28.116,0.000,28.237,0.000,28.173,0.000,28.519,0.000,28.303,0.000,28.049,0.000,28.246,0.000,28.466,0.000,28.247,0.000,28.378,0.000,28.835,0.000,28.480,0.000,28.828,0.000,28.428,0.000,28.528,0.000,29.030,28.163,0.000,28.719,0.000,28.268,0.000,28.439,0.000,28.607,0.000,28.199,0.000,28.440,0.000,28.730,0.000,28.361,0.000,28.256,0.000,28.253,0.000,28.563,0.000,28.593,0.000,28.962,0.000,28.746,0.000,28.917,0.000,0.000,28.112,0.000,27.955,0.000,28.365,0.000,28.291,0.000,28.335,0.000,28.610,0.000,28.281,0.000,28.303,0.000,28.246,0.000,28.710,0.000,28.723,0.000,28.532,0.000,28.493,0.000,28.686,0.000,28.565,0.000,28.197,28.489,0.000,28.295,0.000,28.610,0.000,28.497,0.000,29.183,0.000,29.365,0.000,28.763,0.000,28.320,0.000,28.594,0.000,28.641,0.000,28.629,0.000,28.950,0.000,27.980,0.000,28.349,0.000,28.453,0.000,28.852,0.000,0.000,28.364,0.000,28.244,0.000,28.023,0.000,28.247,0.000,29.572,0.000,30.034,0.000,28.667,0.000,28.642,0.000,28.316,0.000,28.311,0.000,28.444,0.000,28.168,0.000,28.403,0.000,28.438,0.000,28.800,0.000,27.913,28.091,0.000,28.598,0.000,28.313,0.000,28.813,0.000,30.533,0.000,32.362,0.000,31.328,0.000,29.314,0.000,28.126,0.000,28.517,0.000,28.644,0.000,28.679,0.000,28.485,0.000,28.714,0.000,28.549,0.000,28.739,0.000,0.000,28.275,0.000,27.955,0.000,28.448,0.000,28.965,0.000,31.879,0.000,32.094,0.000,31.286,0.000,29.814,0.000,28.593,0.000,28.303,0.000,28.808,0.000,28.596,0.000,28.363,0.000,28.585,0.000,28.420,0.000,28.341,28.595,0.000,28.668,0.000,28.724,0.000,29.526,0.000,32.332,0.000,32.878,0.000,32.587,0.000,32.080,0.000,30.319,0.000,29.259,0.000,28.347,0.000,28.371,0.000,28.591,0.000,28.779,0.000,28.650,0.000,28.577,0.000,0.000,28.330,0.000,28.480,0.000,28.753,0.000,30.412,0.000,33.225,0.000,33.175,0.000,32.848,0.000,31.967,0.000,30.751,0.000,29.090,0.000,28.461,0.000,28.636,0.000,28.437,0.000,28.707,0.000,28.479,0.000,28.493,28.450,0.000,28.205,0.000,28.945,0.000,30.841,0.000,33.628,0.000,34.155,0.000,33.454,0.000,32.621,0.000,32.219,0.000,31.181,0.000,28.945,0.000,28.535,0.000,28.354,0.000,28.338,0.000,28.487,0.000,28.645,0.000,0.000,28.420,0.000,28.235,0.000,29.189,0.000,32.258,0.000,34.054,0.000,34.386,0.000,33.366,0.000,32.502,0.000,32.534,0.000,30.553,0.000,28.703,0.000,28.123,0.000,28.465,0.000,28.435,0.000,28.666,0.000,28.458,28.412,0.000,28.618,0.000,29.437,0.000,32.515,0.000,33.633,0.000,34.348,0.000,33.460,0.000,33.297,0.000,32.441,0.000,30.583,0.000,28.901,0.000,28.751,0.000,28.455,0.000,28.551,0.000,28.674,0.000,28.816,0.000,0.000,28.379,0.000,28.929,0.000,30.135,0.000,32.781,0.000,33.364,0.000,33.703,0.000,33.035,0.000,32.681,0.000,32.508,0.000,29.271,0.000,28.813,0.000,28.176,0.000,28.281,0.000,28.308,0.000,28.441,0.000,28.851,28.266,0.000,28.759,0.000,30.103,0.000,32.329,0.000,32.560,0.000,32.963,0.000,32.587,0.000,32.781,0.000,32.408,0.000,29.431,0.000,28.536,0.000,28.849,0.000,28.187,0.000,28.597,0.000,29.227,0.000,28.880,0.000,0.000,28.259,0.000,28.992,0.000,30.442,0.000,32.244,0.000,32.250,0.000,32.312,0.000,32.854,0.000,32.680,0.000,31.065,0.000,28.621,0.000,28.344,0.000,28.447,0.000,28.667,0.000,28.698,0.000,29.718,0.000,28.963,28.429,0.000,28.570,0.000,29.163,0.000,29.828,0.000,31.671,0.000,32.379,0.000,32.265,0.000,32.592,0.000,31.175,0.000,29.218,0.000,28.587,0.000,28.508,0.000,28.957,0.000,29.226,0.000,31.199,0.000,31.547,0.000,0.000,28.137,0.000,28.463,0.000,28.557,0.000,29.704,0.000,30.460,0.000,31.603,0.000,31.990,0.000,32.004,0.000,29.626,0.000,28.473,0.000,28.220,0.000,28.694,0.000,28.703,0.000,29.831,0.000,32.548,0.000,32.176,28.473,0.000,28.264,0.000,28.662,0.000,28.372,0.000,29.225,0.000,29.797,0.000,30.999,0.000,31.244,0.000,29.575,0.000,28.510,0.000,28.530,0.000,28.449,0.000,28.642,0.000,30.602,0.000,32.418,0.000,34.239,0.000,0.000,28.322,0.000,28.078,0.000,28.183,0.000,28.517,0.000,28.593,0.000,29.005,0.000,30.394,0.000,30.257,0.000,28.746,0.000,28.295,0.000,28.561,0.000,28.250,0.000,28.593,0.000,31.333,0.000,33.254,0.000,33.224,28.516,0.000,28.317,0.000,28.465,0.000,28.845,0.000,28.642,0.000,28.464,0.000,28.858,0.000,28.979,0.000,29.039,0.000,28.832,0.000,28.280,0.000,28.837,0.000,29.056,0.000,31.946,0.000,33.101,0.000,32.988,0.000,0.000,28.161,0.000,28.257,0.000,28.346,0.000,28.301,0.000,28.101,0.000,28.288,0.000,28.615,0.000,28.926,0.000,28.512,0.000,28.178,0.000,28.392,0.000,28.412,0.000,30.166,0.000,32.614,0.000,32.530,0.000,32.028 diff --git a/MLX90640_test/to_frame1.csv b/MLX90640_test/to_frame1.csv new file mode 100644 index 0000000..47b57ce --- /dev/null +++ b/MLX90640_test/to_frame1.csv @@ -0,0 +1 @@ +28.711,27.792,28.178,28.268,28.313,28.450,28.631,28.353,28.295,28.221,28.586,28.024,28.336,28.298,28.683,27.972,28.248,28.537,28.573,28.238,29.127,28.777,28.629,28.172,29.070,28.718,28.894,28.509,28.883,29.076,29.687,29.163,28.942,28.618,28.332,28.134,28.541,28.517,28.394,27.982,28.318,28.092,28.151,27.914,28.753,28.156,27.861,28.261,28.118,28.198,28.582,28.528,28.359,28.837,28.618,28.730,28.610,28.814,28.605,28.558,28.881,28.605,29.019,29.005,28.513,28.605,28.482,28.154,28.428,28.766,27.946,28.048,28.248,28.450,28.387,28.199,28.340,28.594,28.128,28.421,28.544,28.256,28.321,28.073,28.986,28.410,28.445,28.408,28.728,28.530,28.778,28.326,29.035,28.677,28.639,28.351,28.483,28.116,28.430,28.237,28.430,28.173,28.300,28.519,28.179,28.303,28.405,28.049,28.329,28.246,28.347,28.466,28.346,28.247,28.304,28.378,28.597,28.835,28.656,28.480,28.723,28.828,28.500,28.428,28.796,28.528,28.297,29.030,28.163,28.340,28.719,28.336,28.268,28.561,28.439,28.254,28.607,28.734,28.199,28.376,28.440,28.248,28.730,27.926,28.361,28.278,28.256,28.490,28.253,28.898,28.563,28.491,28.593,28.432,28.962,28.417,28.746,28.817,28.917,27.554,28.126,28.112,28.473,27.955,28.466,28.365,28.968,28.291,29.580,28.335,28.803,28.610,28.409,28.281,28.132,28.303,28.803,28.246,28.443,28.710,28.649,28.723,28.537,28.532,28.564,28.493,28.667,28.686,28.746,28.565,28.278,28.197,28.489,28.339,28.295,28.444,28.610,28.566,28.497,28.802,29.183,31.090,29.365,29.834,28.763,28.843,28.320,28.427,28.594,28.279,28.641,28.140,28.629,28.230,28.950,28.392,27.980,28.579,28.349,28.584,28.453,28.300,28.852,27.232,28.490,28.364,28.630,28.244,28.633,28.023,28.703,28.247,31.642,29.572,31.352,30.034,29.809,28.667,28.683,28.642,28.605,28.316,28.433,28.311,28.448,28.444,28.483,28.168,28.580,28.403,28.510,28.438,28.743,28.800,27.995,27.913,28.091,28.460,28.598,28.515,28.313,28.996,28.813,30.302,30.533,32.592,32.362,32.093,31.328,31.273,29.314,29.422,28.126,28.591,28.517,28.460,28.644,28.192,28.679,28.554,28.485,28.324,28.714,28.284,28.549,28.354,28.739,27.168,28.536,28.275,28.361,27.955,28.948,28.448,30.536,28.965,32.884,31.879,32.682,32.094,32.728,31.286,30.920,29.814,29.226,28.593,28.639,28.303,28.674,28.808,28.445,28.596,28.308,28.363,28.237,28.585,28.762,28.420,27.634,28.341,28.595,28.757,28.668,28.844,28.724,29.482,29.526,32.560,32.332,33.558,32.878,32.994,32.587,32.664,32.080,32.187,30.319,30.384,29.259,28.561,28.347,28.620,28.371,28.259,28.591,28.458,28.779,28.458,28.650,28.496,28.577,28.159,28.835,28.330,28.219,28.480,29.530,28.753,32.294,30.412,34.299,33.225,33.583,33.175,32.902,32.848,32.213,31.967,31.870,30.751,29.610,29.090,28.328,28.461,27.930,28.636,28.181,28.437,28.476,28.707,28.600,28.479,28.681,28.493,28.450,28.323,28.205,28.425,28.945,31.092,30.841,33.522,33.628,34.564,34.155,33.856,33.454,32.664,32.621,32.372,32.219,31.654,31.181,28.926,28.945,28.697,28.535,28.474,28.354,28.337,28.338,28.403,28.487,28.216,28.645,28.384,28.889,28.420,28.804,28.235,30.758,29.189,32.667,32.258,33.935,34.054,33.947,34.386,33.459,33.366,32.776,32.502,31.703,32.534,29.363,30.553,28.741,28.703,28.474,28.123,28.522,28.465,28.276,28.435,28.844,28.666,28.557,28.458,28.412,28.779,28.618,28.839,29.437,31.981,32.515,32.602,33.633,33.339,34.348,33.200,33.460,32.708,33.297,32.716,32.441,30.769,30.583,28.879,28.901,28.662,28.751,28.224,28.455,28.549,28.551,28.501,28.674,28.491,28.816,28.358,28.403,28.379,29.006,28.929,31.579,30.135,32.674,32.781,32.740,33.364,32.741,33.703,32.951,33.035,32.577,32.681,31.359,32.508,28.893,29.271,28.502,28.813,28.726,28.176,28.417,28.281,28.839,28.308,28.837,28.441,28.693,28.851,28.266,28.880,28.759,28.696,30.103,30.616,32.329,31.805,32.560,32.485,32.963,32.454,32.587,32.690,32.781,31.630,32.408,29.459,29.431,28.422,28.536,28.365,28.849,28.236,28.187,28.445,28.597,29.407,29.227,29.049,28.880,29.072,28.191,28.259,28.706,28.992,29.507,30.442,30.965,32.244,31.855,32.250,32.388,32.312,32.607,32.854,31.842,32.680,30.104,31.065,28.447,28.621,28.679,28.344,28.156,28.447,28.570,28.667,29.436,28.698,30.319,29.718,28.776,28.963,28.429,28.555,28.570,28.395,29.163,28.748,29.828,29.420,31.671,30.793,32.379,31.911,32.265,32.313,32.592,30.116,31.175,28.890,29.218,28.496,28.587,28.648,28.508,28.310,28.957,28.748,29.226,31.269,31.199,32.328,31.547,29.811,28.888,28.137,28.285,28.463,28.483,28.557,28.797,29.704,29.399,30.460,30.472,31.603,31.694,31.990,30.547,32.004,28.930,29.626,28.220,28.473,28.552,28.220,28.351,28.694,29.062,28.703,30.867,29.831,32.820,32.548,32.478,32.176,28.473,28.493,28.264,28.442,28.662,28.390,28.372,28.661,29.225,28.774,29.797,29.597,30.999,30.204,31.244,29.254,29.575,28.162,28.510,28.532,28.530,28.600,28.449,28.428,28.642,29.765,30.602,32.329,32.418,34.008,34.239,32.016,28.925,28.322,28.395,28.078,28.614,28.183,28.452,28.517,28.848,28.593,28.970,29.005,29.060,30.394,28.891,30.257,28.808,28.746,28.235,28.295,28.682,28.561,28.342,28.250,29.916,28.593,31.676,31.333,33.850,33.254,32.702,33.224,28.516,28.235,28.317,28.028,28.465,28.464,28.845,28.247,28.642,28.392,28.464,28.436,28.858,28.573,28.979,28.471,29.039,28.500,28.832,28.364,28.280,28.374,28.837,28.830,29.056,31.258,31.946,32.501,33.101,33.231,32.988,30.287,28.260,28.161,28.310,28.257,28.417,28.346,28.377,28.301,28.276,28.101,28.675,28.288,28.494,28.615,28.389,28.926,28.616,28.512,27.969,28.178,28.515,28.392,28.549,28.412,31.642,30.166,32.618,32.614,33.084,32.530,31.086,32.028