Merge pull request #36 from loredan/master
Pulling new changes to EEPROM settings storage and fixing VSCode board fuse settings
This commit is contained in:
commit
d1171549a0
7 changed files with 75 additions and 47 deletions
|
|
@ -22,5 +22,23 @@ upload_flags =
|
|||
upload_port = COM4
|
||||
upload_speed = 19200
|
||||
|
||||
board_build.f_cpu = 1000000L
|
||||
board_build.f_cpu = 8000000L
|
||||
board_fuses.lfuse = "0xE2"
|
||||
board_fuses.hfuse = "0xDF"
|
||||
board_fuses.efuse = "0xF9"
|
||||
|
||||
[env:ATmega328PB]
|
||||
platform = atmelavr
|
||||
board = ATmega328PB
|
||||
framework = arduino
|
||||
upload_protocol = stk500v1
|
||||
; each flag in a new line
|
||||
upload_flags =
|
||||
-P$UPLOAD_PORT
|
||||
-b$UPLOAD_SPEED
|
||||
|
||||
; edit these lines
|
||||
upload_port = COM4
|
||||
upload_speed = 19200
|
||||
|
||||
board_build.f_cpu = 8000000L
|
||||
|
|
@ -82,9 +82,6 @@ update the voltMeterConstant variable in pP_config.h with the correct value
|
|||
|
||||
------------------------------------------------------------*/
|
||||
|
||||
// Debug output toggle. Uncomment to enable
|
||||
#define DEBUG true
|
||||
|
||||
/* Debug output verbose mode will continuously output sensor readings
|
||||
rather than waiting for user input */
|
||||
//#define VERBOSE true
|
||||
|
|
@ -115,20 +112,6 @@ void setup() {
|
|||
Serial.begin(9600);
|
||||
|
||||
attachInterrupt(digitalPinToInterrupt(Z_TRG), pulse, FALLING);
|
||||
|
||||
// Atmega's Secret Voltmeter setup:
|
||||
// set the reference to Vcc and the measurement to the internal 1.1V reference
|
||||
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
||||
ADMUX = _BV(MUX5) | _BV(MUX0);
|
||||
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||||
ADMUX = _BV(MUX3) | _BV(MUX2);
|
||||
#else
|
||||
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#endif
|
||||
|
||||
delay(2); // Wait for vref to settle
|
||||
|
||||
Serial.println("Initializing Pyr0-Piezo Sensor...");
|
||||
|
||||
|
|
@ -166,11 +149,10 @@ void loop() {
|
|||
VComp = analogRead(VCOMP_SENSE_PIN);
|
||||
VFol = analogRead(V_FOLLOW_PIN);
|
||||
|
||||
// Voltage Follower adjustment
|
||||
VLast = VOld - Vin;
|
||||
if (VLast > Hyst || VLast < -Hyst) {
|
||||
// Voltage Follower adjustment
|
||||
adjustFollow();
|
||||
|
||||
// Voltage Comparator adjustment
|
||||
adjustComp();
|
||||
// Alert the user that auto-calibration is ongoing
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ int LOOP_DUR = LOOP_DUR_DEFAULT; // duration of time between ADC checks and othe
|
|||
int TRG_DUR = TRG_DUR_DEFAULT; // duration of the Z-axis pulse sent, in ms
|
||||
int Hyst = HYST_DEFAULT; // Hysteresis value for ADC measurements
|
||||
int Debug = 0;
|
||||
long voltMeterConstant = VM_CONST_DEFAULT;
|
||||
uint8_t pP_i2c_address = 0xa0;
|
||||
|
||||
void resetEEPROM() {
|
||||
resetConfig();
|
||||
|
|
@ -65,6 +67,17 @@ void restoreConfig() {
|
|||
} else {
|
||||
Hyst = temp;
|
||||
}
|
||||
|
||||
long longTemp;
|
||||
EEPROM.get(VM_CONST_DEFAULT, longTemp);
|
||||
if (longTemp < 1000000L || longTemp > 1200000L)
|
||||
{
|
||||
resetEEPROM();
|
||||
}
|
||||
else
|
||||
{
|
||||
voltMeterConstant = longTemp;
|
||||
}
|
||||
}
|
||||
|
||||
void resetConfig() {
|
||||
|
|
@ -74,4 +87,5 @@ void resetConfig() {
|
|||
LOOP_DUR = LOOP_DUR_DEFAULT;
|
||||
TRG_DUR = TRG_DUR_DEFAULT;
|
||||
Hyst = HYST_DEFAULT;
|
||||
voltMeterConstant = VM_CONST_DEFAULT;
|
||||
}
|
||||
|
|
@ -48,14 +48,15 @@
|
|||
#endif
|
||||
|
||||
#define VM_CONST_ADDRESS 28
|
||||
#define VM_CONST_DEFAULT 1125300L
|
||||
#if !(defined(voltMeterConstant))
|
||||
extern long voltMeterConstant = 1125300L; // For fine tuning input voltage sense
|
||||
extern long voltMeterConstant; // For fine tuning input voltage sense
|
||||
#endif
|
||||
|
||||
#ifdef I2C_INPUT
|
||||
#define I2C_SLAVE_ADDRESS 24
|
||||
#if !(defined(pP_i2c_address))
|
||||
extern byte pP_i2c_address = 0xa0; // I2C Bus Address
|
||||
extern uint8_t pP_i2c_address; // I2C Bus Address
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@ void digitalWriteFast(uint8_t pin, uint8_t x) {
|
|||
void pulse() {
|
||||
digitalWriteFast(TRG_OUT, LOW);
|
||||
sensorHReading = 1;
|
||||
#ifdef DEBUG
|
||||
Serial.println("Trig!");
|
||||
#endif
|
||||
delay(TRG_DUR);
|
||||
digitalWriteFast(TRG_OUT, HIGH);
|
||||
}
|
||||
|
|
@ -28,6 +25,21 @@ void pulse() {
|
|||
|
||||
long readVcc() {
|
||||
// Read 1.1V reference against AVcc
|
||||
|
||||
// Atmega's Secret Voltmeter setup:
|
||||
// set the reference to Vcc and the measurement to the internal 1.1V reference
|
||||
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#elif defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
||||
ADMUX = _BV(MUX5) | _BV(MUX0);
|
||||
#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||||
ADMUX = _BV(MUX3) | _BV(MUX2);
|
||||
#else
|
||||
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#endif
|
||||
|
||||
delay(2); // Wait for vref to settle
|
||||
|
||||
ADCSRA |= _BV(ADSC); // Start conversion
|
||||
while (bit_is_set(ADCSRA,ADSC)); // measuring
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ void parseData() {
|
|||
strcpy(serialMessageIn, strtokIndx); // copy it to serialMessageIn
|
||||
|
||||
strtokIndx = strtok(NULL, " "); // this continues where the previous call left off
|
||||
serialInt = atoi(strtokIndx); // convert this part to an integer
|
||||
serialLong = atol(strtokIndx); // convert this part to an integer
|
||||
|
||||
}
|
||||
/*------------------------------------------------*/
|
||||
|
|
@ -18,7 +18,8 @@ void identifyMarkers() {
|
|||
char x = Serial.read();
|
||||
// char y = Wire.read();
|
||||
|
||||
if (x == endMarker) {
|
||||
if (x == '\n' || x == '\r')
|
||||
{
|
||||
serialIncoming = true;
|
||||
inputBuffer[bytesRecvd] = 0;
|
||||
parseData();
|
||||
|
|
@ -59,9 +60,9 @@ void identifyMarkers() {
|
|||
|
||||
void updateGainFactor()
|
||||
{
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
GAIN_FACTOR = serialInt;
|
||||
GAIN_FACTOR = serialLong;
|
||||
adjustGain();
|
||||
EEPROM.put(GAIN_FACTOR_ADDRESS, GAIN_FACTOR);
|
||||
}
|
||||
|
|
@ -70,9 +71,9 @@ void updateGainFactor()
|
|||
/*------------------------------------------------*/
|
||||
|
||||
void updateVFol() {
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
followerThrs = serialInt;
|
||||
followerThrs = serialLong;
|
||||
adjustFollow();
|
||||
EEPROM.put(FOLLOWER_THRESHOLD_ADDRESS, followerThrs);
|
||||
}
|
||||
|
|
@ -80,9 +81,9 @@ void updateVFol() {
|
|||
/*------------------------------------------------*/
|
||||
|
||||
void updateVComp() {
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
compThrs = serialInt;
|
||||
compThrs = serialLong;
|
||||
adjustComp();
|
||||
EEPROM.put(COMP_THRESHOLD_ADDRESS, compThrs);
|
||||
}
|
||||
|
|
@ -92,36 +93,36 @@ void updateVComp() {
|
|||
|
||||
void updateLoopDuration()
|
||||
{
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
LOOP_DUR = serialInt;
|
||||
LOOP_DUR = serialLong;
|
||||
EEPROM.put(LOOP_DUR_ADDRESS, LOOP_DUR);
|
||||
}
|
||||
}
|
||||
/*------------------------------------------------*/
|
||||
|
||||
void updateTrigDuration() {
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
TRG_DUR = serialInt;
|
||||
TRG_DUR = serialLong;
|
||||
EEPROM.put(TRG_DUR_ADDRESS, TRG_DUR);
|
||||
}
|
||||
}
|
||||
/*------------------------------------------------*/
|
||||
|
||||
void updateHysteresis() {
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
Hyst = serialInt;
|
||||
Hyst = serialLong;
|
||||
EEPROM.put(HYST_ADDRESS, Hyst);
|
||||
}
|
||||
}
|
||||
/*------------------------------------------------*/
|
||||
|
||||
void updateConstant() {
|
||||
if (serialInt >= 0)
|
||||
if (serialLong >= 0)
|
||||
{
|
||||
voltMeterConstant = (long) serialInt;
|
||||
voltMeterConstant = (long) serialLong;
|
||||
EEPROM.put(VM_CONST_ADDRESS, voltMeterConstant);
|
||||
}
|
||||
}
|
||||
|
|
@ -129,9 +130,9 @@ void updateConstant() {
|
|||
/*------------------------------------------------*/
|
||||
|
||||
void updateDebug() {
|
||||
if (serialInt > 0) {
|
||||
if (serialLong > 0) {
|
||||
Debug = 1;
|
||||
} else if (serialInt == 0) {
|
||||
} else if (serialLong == 0) {
|
||||
Debug = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -192,11 +193,11 @@ void serialPrintState()
|
|||
Serial.print(",");
|
||||
|
||||
Serial.print("\"VComp\":");
|
||||
Serial.print(VComp);
|
||||
Serial.print((long) VComp * Vin / 1023);
|
||||
Serial.print(",");
|
||||
|
||||
Serial.print("\"VFol\":");
|
||||
Serial.print(VFol);
|
||||
Serial.print((long) VFol * Vin / 1023);
|
||||
Serial.print(",");
|
||||
|
||||
Serial.print("\"Err\":");
|
||||
|
|
@ -217,7 +218,7 @@ void updateParams() {
|
|||
updateVComp();
|
||||
}
|
||||
else if (strcmp(serialMessageIn, "LOOP_D") == 0) {
|
||||
updateTrigDuration();
|
||||
updateLoopDuration();
|
||||
}
|
||||
else if (strcmp(serialMessageIn, "TRG_D") == 0) {
|
||||
updateTrigDuration();
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ char inputBuffer[buffSize];
|
|||
byte bytesRecvd = 0;
|
||||
bool serialIncoming = false;
|
||||
char serialMessageIn[buffSize] = {0};
|
||||
int serialInt = 0;
|
||||
long serialLong = 0;
|
||||
|
||||
//#define LOW 0
|
||||
//#define HIGH 1
|
||||
|
|
|
|||
Loading…
Reference in a new issue