From 9879351e8e5c12e93eab6b25cd2d9483e37ac793 Mon Sep 17 00:00:00 2001 From: Ole Artz Date: Fri, 19 May 2017 09:32:40 +0200 Subject: [PATCH] 9ch ADC board: add interrupt for periodical sampling --- .../adc_9channel/adc_9ch_1/adc_9ch_1.ino | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 atmega32u4/adc_9channel/adc_9ch_1/adc_9ch_1.ino diff --git a/atmega32u4/adc_9channel/adc_9ch_1/adc_9ch_1.ino b/atmega32u4/adc_9channel/adc_9ch_1/adc_9ch_1.ino new file mode 100644 index 0000000..830af53 --- /dev/null +++ b/atmega32u4/adc_9channel/adc_9ch_1/adc_9ch_1.ino @@ -0,0 +1,56 @@ +const int numPins = 9; +const int analogInPins[] = {A0, A1, A2, A3, A6, A7, A8, A9, A10}; +const float scaling[] = {4.267, 4.267, 4.267, 4.267, 4.267, 4.267, 4.267, 4.267, 4.267}; //potentional divider resistor factor +volatile int sensorValues[numPins]; // 0 - 1023 +float sensorVoltages[numPins]; // actual voltage on analog in pins +float scaledSensorVoltages[numPins]; // corrected (scaled) voltages before voltage divider +volatile int newValues = 0; // volatile: comand using to change variable by interupt + +void setup() { + // initialize serial communications at 11520 bps: + Serial.begin(115200); + analogReference(INTERNAL); + // set clk/interrupt + cli(); // disable global interrupts + + TCCR3A = 0; // Timer/Counter3 Control Register A + TCCR3B = 0; // Timer/Counter3 Control Register B + TIMSK3 = 0; // Timer/Counter3 Interrupt Mask Register + + TCCR3A |= (1< 4000 + // 12.5 Hz -- OCR3A --> 20000 + // 5 Hz -- OCR3A --> 50000 + OCR3A = 50000; + + sei(); +} + +void loop() { + while (newValues == 0) {} + newValues = 0; + for (int i = 0; i < numPins; i++) { + sensorVoltages[i] = sensorValues[i] * 2.56 / 1023.; + scaledSensorVoltages[i] = scaling[i] * sensorVoltages[i]; + //Serial.print(sensorValues[i]); + //Serial.print(" "); + //Serial.print(sensorVoltages[i], 4); + //Serial.print(" "); + Serial.print(scaledSensorVoltages[i], 3); + Serial.print(" "); + } + Serial.println(); +} + +ISR(TIMER3_COMPA_vect) +{ + for (int i = 0; i < numPins; i++) { + sensorValues[i] = analogRead(analogInPins[i]); + } + newValues = 1; +} + -- 2.43.0