add temperature reading on adc channels
parent
e8d73df01d
commit
c5b6ba8043
@ -0,0 +1,33 @@
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <stdint.h>
|
||||
|
||||
volatile float ADC_reading[5] = {0,0,0,0,0};
|
||||
|
||||
void initADC(void)
|
||||
{
|
||||
ADMUX = 1 << REFS0 | 0 << REFS1; //Select external Vref
|
||||
ADCSRA = _BV(ADEN) | _BV(ADIE); // enable adc, enable interrupt
|
||||
ADCSRA |= 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0; // set clock-prescaler to 128
|
||||
ADCSRA |= 1 << ADSC; // start conversion
|
||||
}
|
||||
|
||||
void adc_set_channel(uint8_t ch){
|
||||
ADMUX = (ADMUX & 0xE0) | (ch & 0x1F);
|
||||
}
|
||||
|
||||
ISR(ADC_vect)
|
||||
{
|
||||
static uint8_t ch = 0;
|
||||
//Reading 10bit conversion result
|
||||
uint16_t tmp = ADCL; //copy the first LSB bits
|
||||
tmp |= ADCH << 8; //copy remaing byte
|
||||
|
||||
ADC_reading[ch] = (((float)tmp * 0.3));
|
||||
//ADC_reading[ch] = (((float)tmp * 0.03)/0.092)-2.3;
|
||||
|
||||
ch = (ch + 1)%5;
|
||||
adc_set_channel(ch);
|
||||
|
||||
ADCSRA |= (1 << ADSC); //Start next conversion
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
#ifndef _TEMPERATURE_H_
|
||||
#define _TEMPERATURE_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern volatile float ADC_reading[5];
|
||||
void initADC(void);
|
||||
|
||||
#endif
|
||||
Reference in New Issue