Я пытаюсь считать значение с двух аналоговых инфракрасных датчиков на плате разработчика ATMega128, а затем вывести масштабированное представление через ШИМ. Когда я подключаю две волны ШИМ к осциллографу, они остаются идентичными, чего не должно быть. Мой код PWM в порядке, поэтому я думаю, что проблема в моем коде для чтения с каналов 0 и 1 АЦП.
int sens1,sens2,sens3;
volatile const uint8_t adc1 = (1<<ADLAR) | (0<<MUX0)|(0<<MUX1);
volatile const uint8_t adc2 = (1<<ADLAR) | (1<<MUX0)|(0<<MUX1);
void main(void)
{
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX |= (1 << REFS0); // Set ADC reference to AVCC
ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading
ADCSRA |= (1 << ADFR); // Set ADC to Free-Running Mode
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADIE); // Enable ADC Interrupt
sei(); // Enable Global Interrupts
ADCSRA |= (1 << ADSC); // Start A2D Conversions
while (1)
{
}
}
ISR(ADC_vect)
{
static uint8_t firstTime = 1;
static uint8_t val;
val = ADCH*100;
if (firstTime == 1){
firstTime = 0;
}
else if (ADMUX == adc1)
{
ADMUX = adc2;
OCR3A = val;
}
else if (ADMUX == adc2)
{
ADMUX = adc1;
OCR1C = val;
}
}