aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/adc-calibration.h64
-rw-r--r--arch/delay.h4
-rw-r--r--arch/mcu.h4
-rw-r--r--arch/random.h14
-rw-r--r--arch/voltage.h178
5 files changed, 4 insertions, 260 deletions
diff --git a/arch/adc-calibration.h b/arch/adc-calibration.h
deleted file mode 100644
index f0b05ab..0000000
--- a/arch/adc-calibration.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// tk-calibration.h: Attiny calibration header.
-// Copyright (C) 2015-2023 Selene ToyKeeper
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-// This allows using a single set of hardcoded values across multiple projects.
-
-/********************** Voltage ADC calibration **************************/
-// These values were measured using RMM's FET+7135.
-// See battcheck/readings.txt for reference values.
-// the ADC values we expect for specific voltages
-#define ADC_44 194
-#define ADC_43 189
-#define ADC_42 184
-#define ADC_41 178
-#define ADC_40 173
-#define ADC_39 168
-#define ADC_38 163
-#define ADC_37 158
-#define ADC_36 152
-#define ADC_35 147
-#define ADC_34 142
-#define ADC_33 137
-#define ADC_32 131
-#define ADC_31 126
-#define ADC_30 121
-#define ADC_29 116
-#define ADC_28 111
-#define ADC_27 105
-#define ADC_26 100
-#define ADC_25 95
-#define ADC_24 90
-#define ADC_23 84
-#define ADC_22 79
-#define ADC_21 74
-#define ADC_20 69
-
-#define ADC_100p ADC_42 // the ADC value for 100% full (resting)
-#define ADC_75p ADC_40 // the ADC value for 75% full (resting)
-#define ADC_50p ADC_38 // the ADC value for 50% full (resting)
-#define ADC_25p ADC_35 // the ADC value for 25% full (resting)
-#define ADC_0p ADC_30 // the ADC value for 0% full (resting)
-#define ADC_LOW ADC_30 // When do we start ramping down
-#define ADC_CRIT ADC_27 // When do we shut the light off
-
-
-/********************** Offtime capacitor calibration ********************/
-// Values are between 1 and 255, and can be measured with offtime-cap.c
-// See battcheck/otc-readings.txt for reference values.
-// These #defines are the edge boundaries, not the center of the target.
-#ifdef OFFTIM3
-// The OTC value 0.5s after being disconnected from power
-// (anything higher than this is a "short press")
-#define CAP_SHORT 190
-// The OTC value 1.5s after being disconnected from power
-// Between CAP_MED and CAP_SHORT is a "medium press"
-#define CAP_MED 94
-// Below CAP_MED is a long press
-#else
-// The OTC value 1.0s after being disconnected from power
-// Anything higher than this is a short press, lower is a long press
-#define CAP_SHORT 115
-#endif
-
diff --git a/arch/delay.h b/arch/delay.h
index 502e6ab..487291f 100644
--- a/arch/delay.h
+++ b/arch/delay.h
@@ -1,10 +1,10 @@
-// tk-delay.h: Smaller, more flexible _delay_ms() functions.
+// delay.h: Smaller, more flexible _delay_ms() functions.
// Copyright (C) 2015-2023 Selene ToyKeeper
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#ifdef OWN_DELAY
-#include "tk-attiny.h"
+#include "arch/mcu.h"
#include <util/delay_basic.h>
#ifdef USE_DELAY_MS
// Having own _delay_ms() saves some bytes AND adds possibility to use variables as input
diff --git a/arch/mcu.h b/arch/mcu.h
index 9532ed5..5de6ea9 100644
--- a/arch/mcu.h
+++ b/arch/mcu.h
@@ -1,4 +1,4 @@
-// tk-attiny.h: Attiny portability header.
+// arch/mcu.h: Attiny portability header.
// Copyright (C) 2014-2023 Selene ToyKeeper
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
@@ -79,7 +79,7 @@
/******************** I/O pin and register layout ************************/
#ifdef HWDEFFILE
-#include "tk.h"
+#include "fsm/tk.h"
#include incfile(HWDEFFILE)
#endif
diff --git a/arch/random.h b/arch/random.h
deleted file mode 100644
index ad65660..0000000
--- a/arch/random.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// tk-random.h: Smaller pseudo-random function(s).
-// Copyright (C) 2015-2023 Selene ToyKeeper
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-uint8_t pgm_rand() {
- static uint16_t offset = 255;
- // loop through ROM space, but avoid the first 256 bytes
- // because the beginning tends to have a big ramp which
- // doesn't look very random at all
- offset = ((offset + 1) & 0x3ff) | 0x0100;
- return pgm_read_byte(offset);
-}
-
diff --git a/arch/voltage.h b/arch/voltage.h
deleted file mode 100644
index 36ce9c8..0000000
--- a/arch/voltage.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// tk-voltage.h: Voltage / battcheck functions.
-// Copyright (C) 2015-2023 Selene ToyKeeper
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-#include "tk-attiny.h"
-#include "tk-calibration.h"
-
-#if defined(TEMPERATURE_MON) || defined(THERMAL_REGULATION)
-#ifdef TEMP_10bit
-#define NEED_ADC_10bit
-#define get_temperature read_adc_10bit
-#else
-#define get_temperature read_adc_8bit
-#endif
-
-inline void ADC_on_temperature() {
- // TODO: (?) enable ADC Noise Reduction Mode, Section 17.7 on page 128
- // (apparently can only read while the CPU is in idle mode though)
- // select ADC4 by writing 0b00001111 to ADMUX
- // 1.1v reference, left-adjust, ADC4
- #ifdef TEMP_10bit
- ADMUX = (1 << V_REF) | (0 << ADLAR) | TEMP_CHANNEL;
- #else
- ADMUX = (1 << V_REF) | (1 << ADLAR) | TEMP_CHANNEL;
- #endif
- // disable digital input on ADC pin to reduce power consumption
- //DIDR0 |= (1 << TEMP_DIDR);
- // enable, start, prescale
- ADCSRA = (1 << ADEN ) | (1 << ADSC ) | ADC_PRSCL;
-}
-#endif // TEMPERATURE_MON
-
-#ifdef VOLTAGE_MON
-#define NEED_ADC_8bit
-inline void ADC_on() {
- // disable digital input on ADC pin to reduce power consumption
- DIDR0 |= (1 << ADC_DIDR);
- // 1.1v reference, left-adjust, ADC1/PB2
- ADMUX = (1 << V_REF) | (1 << ADLAR) | ADC_CHANNEL;
- // enable, start, prescale
- ADCSRA = (1 << ADEN ) | (1 << ADSC ) | ADC_PRSCL;
-}
-
-#define get_voltage read_adc_8bit
-#else
-inline void ADC_off() {
- ADCSRA &= ~(1<<7); //ADC off
-}
-#endif
-
-#ifdef NEED_ADC_8bit
-uint8_t read_adc_8bit() {
- // Start conversion
- ADCSRA |= (1 << ADSC);
- // Wait for completion
- while (ADCSRA & (1 << ADSC));
- // Send back the result
- return ADCH;
-}
-#endif
-
-#ifdef NEED_ADC_10bit
-uint16_t read_adc_10bit() {
- // Start conversion
- ADCSRA |= (1 << ADSC);
- // Wait for completion
- while (ADCSRA & (1 << ADSC));
- // Send back the result
- //return (ADCH<<8) | (ADCL); // ADLAR=0
- //return (ADCH<<2) | (ADCL>>6); // ADLAR=1
- ADCSRA |= 0x10; // clear ADIF flag, else only first reading works
- return ADC; // ADLAR=0
-}
-#endif
-
-#ifdef USE_BATTCHECK
-#ifdef BATTCHECK_4bars
-PROGMEM const uint8_t voltage_blinks[] = {
- // 0 blinks for less than 1%
- ADC_0p, // 1 blink for 1%-25%
- ADC_25p, // 2 blinks for 25%-50%
- ADC_50p, // 3 blinks for 50%-75%
- ADC_75p, // 4 blinks for 75%-100%
- ADC_100p, // 5 blinks for >100%
- 255, // Ceiling, don't remove (6 blinks means "error")
-};
-#endif // BATTCHECK_4bars
-#ifdef BATTCHECK_8bars
-PROGMEM const uint8_t voltage_blinks[] = {
- // 0 blinks for less than 1%
- ADC_30, // 1 blink for 1%-12.5%
- ADC_33, // 2 blinks for 12.5%-25%
- ADC_35, // 3 blinks for 25%-37.5%
- ADC_37, // 4 blinks for 37.5%-50%
- ADC_38, // 5 blinks for 50%-62.5%
- ADC_39, // 6 blinks for 62.5%-75%
- ADC_40, // 7 blinks for 75%-87.5%
- ADC_41, // 8 blinks for 87.5%-100%
- ADC_42, // 9 blinks for >100%
- 255, // Ceiling, don't remove (10 blinks means "error")
-};
-#endif // BATTCHECK_8bars
-#ifdef BATTCHECK_VpT
-/*
-PROGMEM const uint8_t v_whole_blinks[] = {
- // 0 blinks for (shouldn't happen)
- 0, // 1 blink for (shouldn't happen)
- ADC_20, // 2 blinks for 2V
- ADC_30, // 3 blinks for 3V
- ADC_40, // 4 blinks for 4V
- 255, // Ceiling, don't remove
-};
-PROGMEM const uint8_t v_tenth_blinks[] = {
- // 0 blinks for less than 1%
- ADC_30,
- ADC_33,
- ADC_35,
- ADC_37,
- ADC_38,
- ADC_39,
- ADC_40,
- ADC_41,
- ADC_42,
- 255, // Ceiling, don't remove
-};
-*/
-PROGMEM const uint8_t voltage_blinks[] = {
- // 0 blinks for (shouldn't happen)
- ADC_25,(2<<5)+5,
- ADC_26,(2<<5)+6,
- ADC_27,(2<<5)+7,
- ADC_28,(2<<5)+8,
- ADC_29,(2<<5)+9,
- ADC_30,(3<<5)+0,
- ADC_31,(3<<5)+1,
- ADC_32,(3<<5)+2,
- ADC_33,(3<<5)+3,
- ADC_34,(3<<5)+4,
- ADC_35,(3<<5)+5,
- ADC_36,(3<<5)+6,
- ADC_37,(3<<5)+7,
- ADC_38,(3<<5)+8,
- ADC_39,(3<<5)+9,
- ADC_40,(4<<5)+0,
- ADC_41,(4<<5)+1,
- ADC_42,(4<<5)+2,
- ADC_43,(4<<5)+3,
- ADC_44,(4<<5)+4,
- 255, (1<<5)+1, // Ceiling, don't remove
-};
-inline uint8_t battcheck() {
- // Return an composite int, number of "blinks", for approximate battery charge
- // Uses the table above for return values
- // Return value is 3 bits of whole volts and 5 bits of tenths-of-a-volt
- uint8_t i, voltage;
- voltage = get_voltage();
- // figure out how many times to blink
- for (i=0;
- voltage > pgm_read_byte(voltage_blinks + i);
- i += 2) {}
- return pgm_read_byte(voltage_blinks + i + 1);
-}
-#else // #ifdef BATTCHECK_VpT
-inline uint8_t battcheck() {
- // Return an int, number of "blinks", for approximate battery charge
- // Uses the table above for return values
- uint8_t i, voltage;
- voltage = get_voltage();
- // figure out how many times to blink
- for (i=0;
- voltage > pgm_read_byte(voltage_blinks + i);
- i ++) {}
- return i;
-}
-#endif // BATTCHECK_VpT
-#endif
-