【发布时间】:2015-05-15 16:00:25
【问题描述】:
我正在开发一个记录器和播放器项目。我想同时实现 ADC(模数)和 DAC(数模)转换器。代码应在 Arduino - Atmega 2560(Atmel 微控制器)中实现。我尝试实现 ADC,发现以下代码:
void setup()
{
Serial.begin (9600);
ADCSRA |= ((1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));
ADMUX |=(1<<REFS0);
ADCSRA |= (1<<ADEN);
ADCSRA |= (1<<ADSC);
}
int read_adc( int channel )
{
ADMUX &=0xE0;
ADMUX |= channel & 0x07l;
ADCSRB = channel & (1<<ADSC);
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC))
{
return ADCW;
}
}
void loop()
{
int w = read_adc(0);
Serial.write(w);
}
在这里,我将数字化信号发送到串行端口。我有两个问题: 1-如何修改此代码以用作 8 位 ADC? 2-如何以与以前相同的方式实现DAC?我的意思是如何从串口读取数字信号,然后将其转换为模拟信号,如上面的算法?
感谢您的帮助。
【问题讨论】:
-
Arduino Mega 2560 没有任何 DAC 外设。您将需要一些额外的硬件来实现它。而且和ADC完全没有关系。
-
你能指定哪个版本的Arduino有DAC外设吗?
-
我不确定有没有。但是您可以轻松找到带有某种 I2C DAC 的 Arduino 兼容分线板。
-
您还没有“实现 ADC”,您只是利用了芯片上的 ADC 硬件,您不能真正将这段代码描述为“算法”——它只是硬件初始化和 I/O .
-
我很确定
read_adc()中的return应该在循环之外 - 当代码按常规缩进时很容易发现错误。
标签: c arduino embedded atmega atmel