mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-01-11 13:21:01 +01:00
ADC config
This commit is contained in:
parent
7312951b2b
commit
5ccef35074
@ -101,7 +101,6 @@ void setup()
|
|||||||
|
|
||||||
// Invoke any DCC++EX commands in the form "SETUP("xxxx");"" found in optional file mySetup.h.
|
// Invoke any DCC++EX commands in the form "SETUP("xxxx");"" found in optional file mySetup.h.
|
||||||
// This can be used to create turnouts, outputs, sensors etc. through the normal text commands.
|
// This can be used to create turnouts, outputs, sensors etc. through the normal text commands.
|
||||||
// PMA - how to handle __has_include??
|
|
||||||
#if __has_include ( "mySetup.h")
|
#if __has_include ( "mySetup.h")
|
||||||
#define SETUP(cmd) DCCEXParser::parse(F(cmd))
|
#define SETUP(cmd) DCCEXParser::parse(F(cmd))
|
||||||
#include "mySetup.h"
|
#include "mySetup.h"
|
||||||
|
@ -37,8 +37,33 @@ INTERRUPT_CALLBACK interruptHandler=0;
|
|||||||
void DCCTimer::begin(INTERRUPT_CALLBACK callback) {
|
void DCCTimer::begin(INTERRUPT_CALLBACK callback) {
|
||||||
interruptHandler=callback;
|
interruptHandler=callback;
|
||||||
|
|
||||||
|
// PMA - SAMC used on Firebox has 2 ADCs, so choose which to set up based on pin being used
|
||||||
|
// TODO: this code will need to be fixed - ADCpin is not in scope... as this is stolen from
|
||||||
|
// the abandoned rf24 branch
|
||||||
|
#if defined(ARDUINO_ARCH_SAMC)
|
||||||
|
Adc* ADC;
|
||||||
|
if ( (g_APinDescription[ADCpin].ulPeripheralAttribute & PER_ATTR_ADC_MASK) == PER_ATTR_ADC_STD ) {
|
||||||
|
ADC = ADC0;
|
||||||
|
} else {
|
||||||
|
ADC = ADC1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// PMA - Set up ADC to do faster reads... default for Arduino Zero platform configs is 436uS,
|
||||||
|
// and we need sub-100uS. This code sets it to a read speed of around 21uS, and enables 12-bit
|
||||||
|
ADC->CTRLA.bit.ENABLE = 0; // disable ADC
|
||||||
|
while( ADC->STATUS.bit.SYNCBUSY == 1 ); // wait for synchronization
|
||||||
|
|
||||||
|
ADC->CTRLB.reg &= 0b1111100011111111; // mask PRESCALER bits
|
||||||
|
ADC->CTRLB.reg |= ADC_CTRLB_PRESCALER_DIV64 | // divide Clock by 64
|
||||||
|
ADC_CTRLB_RESSEL_12BIT; // Result on 12 bits
|
||||||
|
|
||||||
|
ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_1 | // take 1 sample at a time
|
||||||
|
ADC_AVGCTRL_ADJRES(0x00ul); // adjusting result by 0
|
||||||
|
ADC->SAMPCTRL.reg = 0x00; // sampling Time Length = 0
|
||||||
|
|
||||||
|
ADC->CTRLA.bit.ENABLE = 1; // enable ADC
|
||||||
|
while(ADC->STATUS.bit.SYNCBUSY == 1); // wait for synchronization
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,9 +46,17 @@
|
|||||||
// (HIGH == release brake)
|
// (HIGH == release brake)
|
||||||
//
|
//
|
||||||
// Arduino standard Motor Shield
|
// Arduino standard Motor Shield
|
||||||
|
#if defined(ARDUINO_ARCH_SAMD)
|
||||||
|
// PMA - senseFactor for 3.3v systems is 1.95 as calculated when using 10-bit A/D samples,
|
||||||
|
// and for 12-bit samples it's more like 0.488, but we probably need to tweak both these
|
||||||
|
#define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), \
|
||||||
|
new MotorDriver(3, 12, UNUSED_PIN, 9, A0, 0.488, 2000, UNUSED_PIN), \
|
||||||
|
new MotorDriver(11, 13, UNUSED_PIN, 8, A1, 0.488, 2000, UNUSED_PIN)
|
||||||
|
#else
|
||||||
#define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), \
|
#define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), \
|
||||||
new MotorDriver(3, 12, UNUSED_PIN, 9, A0, 2.99, 2000, UNUSED_PIN), \
|
new MotorDriver(3, 12, UNUSED_PIN, 9, A0, 2.99, 2000, UNUSED_PIN), \
|
||||||
new MotorDriver(11, 13, UNUSED_PIN, 8, A1, 2.99, 2000, UNUSED_PIN)
|
new MotorDriver(11, 13, UNUSED_PIN, 8, A1, 2.99, 2000, UNUSED_PIN)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Pololu Motor Shield
|
// Pololu Motor Shield
|
||||||
#define POLOLU_MOTOR_SHIELD F("POLOLU_MOTOR_SHIELD"), \
|
#define POLOLU_MOTOR_SHIELD F("POLOLU_MOTOR_SHIELD"), \
|
||||||
|
Loading…
Reference in New Issue
Block a user