increase depression resolution to 16 bits(incomplete), add debugging setup

This commit is contained in:
peepeetee 2024-06-02 00:38:59 -05:00
parent 9b985746fc
commit 21fef7962b
4 changed files with 54 additions and 20 deletions

View File

@ -22,8 +22,8 @@ extern analog_config g_config;
typedef struct {
/* For individual analog key data */
uint8_t value;
uint8_t extremum;
uint16_t value;
uint16_t extremum;
int16_t offset;
bool is_analog;
bool dynamic_actuation_bool;

View File

@ -0,0 +1,11 @@
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
#include "lut.h"
int main() {
__builtin_trap();
return 0;
}

View File

@ -1,31 +1,54 @@
/* Copyright 2023 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee)
SPDX-License-Identifier: GPL-2.0-or-later */
#include <math.h>
#include "scanfunctions.h"
#include "util.h"
#include <stdint.h>
// #include "scanfunctions.h"
// #include "util.h"
#if !defined(MIN)
# define MIN(x, y) (((x) < (y)) ? (x) : (y))
#endif
#if !defined(MAX)
# define MAX(x, y) (((x) > (y)) ? (x) : (y))
#endif
// /* Equation parameters for the sensor-magnet linearity mapping */
// const double a = 0.200347177016;
// const double b = 0.00955994866154;
// const double c = 6.01110636956;
// const double d = 1966.74076381;
/* Equation parameters for the sensor-magnet linearity mapping */
const double a = 0.200347177016;
const double b = 0.00955994866154;
const double c = 6.01110636956;
const double d = 1966.74076381;
// const double a = 1;
// const double b = 0.0061787;
// const double c = 4.34;
// const double d = 1935.43;
uint16_t distance_to_adc(uint8_t distance) {
double intermediate = a * exp(b * distance + c) + d;
const double a = 0.00609446727442;
const double b = 4.40340283615;
const double c = 2122.25923605;
uint16_t distance_to_adc(uint16_t distance) {
// double intermediate = a * exp(b * distance + c) + d;
double intermediate = ((-exp(a*distance + b)) + c);
uint16_t adc = (uint16_t) MAX(0, MIN(intermediate, 4095));
return adc;
}
uint8_t adc_to_distance(uint16_t adc) {
if (adc <= d) {
return 0;
}
double intermediate = (log((adc - d) / a) - c) / b;
uint8_t distance = (uint8_t) MAX(0, MIN(intermediate, 255));
uint16_t adc_to_distance(uint16_t adc) {
// if (adc <= d) {
// return 0;
// }
// double intermediate = ((log((adc - d) / a)) - c) / b;
double intermediate = ((log(c-adc)-b)/a);
uint16_t distance = (uint16_t) MAX(0, MIN(intermediate, 255));
return distance;
}
uint8_t lut[ADC_RESOLUTION_MAX] = {0};
uint16_t lut[ADC_RESOLUTION_MAX] = {0};
void generate_lut(void) {
for (uint16_t i = 0; i < ADC_RESOLUTION_MAX; i++) {

View File

@ -3,10 +3,10 @@ SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include <stdint.h>
extern uint8_t lut[4096];
extern uint16_t lut[4096];
uint16_t distance_to_adc(uint8_t distance);
uint16_t distance_to_adc(uint16_t distance);
uint8_t adc_to_distance(uint16_t adc);
uint16_t adc_to_distance(uint16_t adc);
void generate_lut(void);