我正在尝试从 ATMega128 开发板上的两个模拟红外传感器读取值,然后通过 PWM 输出缩放表示。当我将两个 PWM 波连接到示波器时,它们保持不变,但情况并非如此。我的 PWM 代码很好,所以我认为问题在于我从 ADC 的通道 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;
}
}