Files

copied
Last update 8 years 2 months by Raivo Laanemets
Filesavrsrc
..
adc.c
adjust.c
error.c
fans.c
hex.c
init.c
init_fans.c
main.c
measure.c
pearson.c
protocol.c
rpm.c
usart_buffer.c
usart_run.c
adc.c
#define ADC_REFERENCE 1.1 #define ADC_OFFSET 0.5 volatile uint8_t temperature_0 = 0; volatile uint8_t temperature_1 = 0; // Starts measurement. // Sensor 1 is ADC0 // Sensor 2 is ADC1 void adc_measure_channel(uint8_t channel) { // Clears MUX0..3 bits. ADMUX &= 0xF0; // Sets MUX0..3 bits from channel value. ADMUX |= 0x0F & channel; // Starts measurement. ADCSRA |= (1 << ADSC); } // Returns currently selected channel. uint8_t adc_channel() { return ADMUX & 0x0F; } // Handles conversion completion. // Starts new conversion if not all // channels have not been measured. ISR(ADC_vect) { uint8_t channel = adc_channel(); uint16_t adc = ADC; float voltage = ((float) adc / 1024) * ADC_REFERENCE; uint8_t temperature = (voltage - ADC_OFFSET) / 0.01; if (channel == 0) { temperature_0 = temperature; adc_measure_channel(channel + 1); } else { temperature_1 = temperature; } } // Starts measurement. // One measurement cycle // takes about 1ms. void adc_measure() { adc_measure_channel(0); }
Report a bug