From 3d7b301819dfbbf95bb858f12d018c65f2c9c72a Mon Sep 17 00:00:00 2001 From: Timo Denk Date: Sun, 17 Apr 2016 10:39:13 +0200 Subject: [PATCH 1/2] Analog multiplexer notes and schematics draft --- AnalogMux.txt | 30 ++++++++++++++++++++++++++++++ Schmeatics.fzz | Bin 0 -> 4036 bytes 2 files changed, 30 insertions(+) create mode 100644 AnalogMux.txt create mode 100644 Schmeatics.fzz diff --git a/AnalogMux.txt b/AnalogMux.txt new file mode 100644 index 0000000..6d8d93b --- /dev/null +++ b/AnalogMux.txt @@ -0,0 +1,30 @@ +// analog multiplexer control signals +#define analogMuxS0 5 +#define analogMuxS1 6 +#define analogMuxS2 7 + +// analog multiplexer enable signal +#define analogMuxE 8 + +// analog multiplexer data +#define analogMuxData A0 + + +int read4051AnalogPin(int pin) { + // select multiplexer input + digitalWrite(analogMuxS0, pin & 1); + digitalWrite(analogMuxS1, pin & 2 >> 1); + digitalWrite(analogMuxS2, pin & 4 >> 2); + + // enable + digitalWrite(analogMuxE, LOW); + delayMicroseconds(5); + + // read value + int val = analogRead(analogMuxData); + + // disable + digitalWrite(analogMuxE, HIGH); + + return val; +} \ No newline at end of file diff --git a/Schmeatics.fzz b/Schmeatics.fzz new file mode 100644 index 0000000000000000000000000000000000000000..2d9df1b09434ca84c069e5b1acc852989d5baefa GIT binary patch literal 4036 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 Date: Sat, 25 Jun 2016 14:13:52 +0200 Subject: [PATCH 2/2] Battery Voltage --- Display-Teensy/Display-Teensy.ino | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Display-Teensy/Display-Teensy.ino b/Display-Teensy/Display-Teensy.ino index 4c0e2d3..bb04a5e 100644 --- a/Display-Teensy/Display-Teensy.ino +++ b/Display-Teensy/Display-Teensy.ino @@ -47,6 +47,10 @@ int dataLength, bytesAvailable, bytesAvailableAfterDelay; long numberOfBytesAvailableLastTime = 0; +// battery voltage +int vout = 0, vin = 0; +float R1 = 47000.0, R2 = 4700.0; + // display object ILI9341_t3 tft = ILI9341_t3(TFT_CS, TFT_DC); @@ -55,6 +59,7 @@ String sensorUnits[numberOfSensors] = { "A", "A", "A", "V", "A", "C", "C", "C", byte sensorLineOffset[numberOfSensors] = { 0, 0, 0, offsetPerHr, offsetPerHr, 2 * offsetPerHr, 2 * offsetPerHr, 2 * offsetPerHr, 3 * offsetPerHr, 3 * offsetPerHr, 6 * offsetPerHr, 6 * offsetPerHr, 6 * offsetPerHr }; void setup() { + pinMode(batteryVoltagePin, INPUT); Serial.begin(9600); // start tft @@ -181,7 +186,7 @@ void loop() { float val = * sensorValue; if (i == 12) { // battery voltage - val = map((float)analogRead(batteryVoltagePin), 0, 1024, 0, 4.2); + val = getBatteryVoltage(); } logFile.print(","); @@ -287,6 +292,25 @@ String addLeadingZeros(int x, int digits) { return str; } +// battery voltage +long readVcc() { + long result; + ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); + delay(2); + ADCSRA |= _BV(ADSC); + while (bit_is_set(ADCSRA,ADSC)); + result = ADCL; + result |= ADCH<<8; + result = 1126400L / result; + return result; +} + +int getBatteryVoltage() { + vout = (analogRead(batteryVoltagePin) * readVcc() / 1000) / 1024.0; + vin = vout / (R2/(R1+R2)); + return vin; +} + // draw bitmap code