blob: 6b90d93f4eb6f37d4807dde9c51566e96c7d44bb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#include "project.h"
#define PRESSURE GPIO0
#define PRESSURE_PORT GPIOA
#define PRESSURE_CHANNEL ADC_CHANNEL0
#define VREF_CHANNEL ADC_CHANNEL17
static unsigned poke;
static int pressure;
uint16_t pressure_ch (void)
{
return pressure;
}
void pressure_tick (void)
{
static unsigned ticker;
ticker++;
if (ticker < MS_TO_TICKS (2500))
return;
ticker = 0;
poke = 1;
}
void pressure_dispatch (void)
{
int v, r;
if (!poke) return;
poke = 0;
if (adc_calibrate()) {
pressure = 0;
return;
}
v = adc_convert (PRESSURE_CHANNEL);
r = adc_convert (VREF_CHANNEL);
/* r is 1.25 volts, transducer is 0.5V -> 0 psi 4.5V -> 100psi */
/* 100psi is 6.8947573 bar, and we want 256ths of bar */
if (!r) {
pressure = 0;
return;
}
pressure = ((v * 552) / r) - 221;
if (pressure < 0) pressure = 0;
printf ("QP: %d %d %d\r\n", v, r, (pressure * 100) / 256);
}
void pressure_init (void)
{
MAP_ANALOG (PRESSURE);
}
|