diff --git a/AnalogReadFast.h b/AnalogReadFast.h
new file mode 100644
index 0000000..3cd6041
--- /dev/null
+++ b/AnalogReadFast.h
@@ -0,0 +1,101 @@
+/*
+ * AnalogReadFast.h
+ *
+ * Copyright (C) 2016 Albert van Dalen http://www.avdweb.nl
+ *
+ * This file is part of CommandStation.
+ *
+ * CommandStation is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * CommandStation is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with CommandStation. If not, see .
+ */
+
+#ifndef COMMANDSTATION_DCC_ANALOGREADFAST_H_
+#define COMMANDSTATION_DCC_ANALOGREADFAST_H_
+
+#include
+
+int inline analogReadFast(uint8_t ADCpin);
+
+#if defined(ARDUINO_ARCH_SAMD)
+int inline analogReadFast(uint8_t ADCpin)
+{ ADC->CTRLA.bit.ENABLE = 0; // disable ADC
+ while( ADC->STATUS.bit.SYNCBUSY == 1 ); // wait for synchronization
+
+ int CTRLBoriginal = ADC->CTRLB.reg;
+ int AVGCTRLoriginal = ADC->AVGCTRL.reg;
+ int SAMPCTRLoriginal = ADC->SAMPCTRL.reg;
+
+ ADC->CTRLB.reg &= 0b1111100011111111; // mask PRESCALER bits
+ ADC->CTRLB.reg |= ADC_CTRLB_PRESCALER_DIV64; // divide Clock by 64
+ ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_1 | // take 1 sample
+ 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
+
+ int adc = analogRead(ADCpin);
+
+ ADC->CTRLB.reg = CTRLBoriginal;
+ ADC->AVGCTRL.reg = AVGCTRLoriginal;
+ ADC->SAMPCTRL.reg = SAMPCTRLoriginal;
+
+ return adc;
+}
+
+#elif defined(ARDUINO_ARCH_SAMC)
+
+int inline analogReadFast(uint8_t ADCpin)
+{
+ Adc* ADC;
+ if ( (g_APinDescription[ADCpin].ulPeripheralAttribute & PER_ATTR_ADC_MASK) == PER_ATTR_ADC_STD ) {
+ ADC = ADC0;
+ } else {
+ ADC = ADC1;
+ }
+
+ ADC->CTRLA.bit.ENABLE = 0; // disable ADC
+ while( ADC->SYNCBUSY.bit.ENABLE == 1 ); // wait for synchronization
+
+ int CTRLBoriginal = ADC->CTRLB.reg;
+ int AVGCTRLoriginal = ADC->AVGCTRL.reg;
+ int SAMPCTRLoriginal = ADC->SAMPCTRL.reg;
+
+ ADC->CTRLB.reg &= 0b1111100011111111; // mask PRESCALER bits
+ ADC->CTRLB.reg |= ADC_CTRLB_PRESCALER_DIV64; // divide Clock by 64
+ ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_1 | // take 1 sample
+ 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->SYNCBUSY.bit.ENABLE == 1); // wait for synchronization
+
+ int adc = analogRead(ADCpin);
+
+ ADC->CTRLB.reg = CTRLBoriginal;
+ ADC->AVGCTRL.reg = AVGCTRLoriginal;
+ ADC->SAMPCTRL.reg = SAMPCTRLoriginal;
+
+ return adc;
+}
+
+#else
+int inline analogReadFast(uint8_t ADCpin)
+{ byte ADCSRAoriginal = ADCSRA;
+ ADCSRA = (ADCSRA & B11111000) | 4;
+ int adc = analogRead(ADCpin);
+ ADCSRA = ADCSRAoriginal;
+ return adc;
+}
+#endif
+#endif // COMMANDSTATION_DCC_ANALOGREADFAST_H_
\ No newline at end of file
diff --git a/Hardware.cpp b/Hardware.cpp
index 91e475d..65cebeb 100644
--- a/Hardware.cpp
+++ b/Hardware.cpp
@@ -19,7 +19,7 @@
#include
//#include // use IDE menu Tools..Manage Libraries to locate and install TimerOne
#include // use IDE menu Tools..Manage Libraries to locate and install TimerOne
-#include "avdweb_AnalogReadFast.h"
+#include "AnalogReadFast.h"
#include "Hardware.h"
#include "Config.h"
#include "DIAG.h"
diff --git a/avdweb_AnalogReadFast.h b/avdweb_AnalogReadFast.h
deleted file mode 100644
index ae68432..0000000
--- a/avdweb_AnalogReadFast.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Copyright (C) 2016 Albert van Dalen http://www.avdweb.nl
-This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License at http://www.gnu.org/licenses .
-
-AUTHOR: Albert van Dalen
-WEBSITE: http://www.avdweb.nl/arduino/libraries/fast-10-bit-adc.html
-UPDATE: https://www.avdweb.nl/arduino/adc-dac/fast-10-bit-adc
-HISTORY:
-1.0.0 7-3-2018 analogReadFast for SAMD21 (10/12bit) and AVR (10bit)
-*/
-
-#ifndef analogReadFast_H
-#define analogReadFast_H
-
-int inline analogReadFast(byte ADCpin);
-
-#if defined(__arm__)
-int inline analogReadFast(byte ADCpin) // inline library functions must be in header
-{ ADC->CTRLA.bit.ENABLE = 0; // disable ADC
- while( ADC->STATUS.bit.SYNCBUSY == 1 ); // wait for synchronization
-
- int CTRLBoriginal = ADC->CTRLB.reg;
- int AVGCTRLoriginal = ADC->AVGCTRL.reg;
- int SAMPCTRLoriginal = ADC->SAMPCTRL.reg;
-
- ADC->CTRLB.reg &= 0b1111100011111111; // mask PRESCALER bits
- ADC->CTRLB.reg |= ADC_CTRLB_PRESCALER_DIV64; // divide Clock by 64
- ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_1 | // take 1 sample
- 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
-
- int adc = analogRead(ADCpin);
-
- ADC->CTRLB.reg = CTRLBoriginal;
- ADC->AVGCTRL.reg = AVGCTRLoriginal;
- ADC->SAMPCTRL.reg = SAMPCTRLoriginal;
-
- return adc;
-}
-#else
-int inline analogReadFast(byte ADCpin)
-{ byte ADCSRAoriginal = ADCSRA;
- ADCSRA = (ADCSRA & B11111000) | 4;
- int adc = analogRead(ADCpin);
- ADCSRA = ADCSRAoriginal;
- return adc;
-}
-#endif
-#endif