问题描述
我使用的是 Hamamatsu (C12880MA) 的高光谱传感器。到目前为止,我已经完成了适合 Atmega328p 的固件,时序等运行良好。
但现在,我遇到了一些关于读取 ADC 测量值的问题。
根据我的时钟信号生成(在 0.5 和 5 MHz 之间的变量 f),我需要读取精确“标志”值的 ADC 值。 我正在使用内部 TC1 定时器来生成时钟。在 CLK 信号的每次切换时,我通过 ISR 设置一个标志来为其他信号计时/重新启动程序。
现在问题来了:我知道(参考数据表),传感器的视频信号将按照生成的 CLK 的速度出现在标志“ADC_start”和“ADC_End”之间。我必须通过内部 Arduino ADC 在正确的标志上读取值,以便稍后与正确的底层波长匹配。
以下是代码的基本片段:
volatile uint16_t flag = 0;
uint16_t data[288]; // define 1d matrix for data storage
uint16_t ST_Start = 2; // starter flag for the programm
uint16_t ST_End = 134; // end flag for ST signal
uint16_t ADC_Start = 310; //starter flag for ADC readout
uint16_t ADC_End = 886; //end flag for ADC readout
uint16_t index; //index used for data storage
volatile uint16_t End = 1000; // end flag for programm restart and clearing cache
ISR(TIMER1_COMPA_vect){
if (flag <= End){
flag = flag+1;
} else
{
flag = 0;
//delayMicroseconds(2000);
}
这是我的 readData 函数。不幸的是,我还没有找到在所需的确切标志处读取 ADC 值的正确方法。假设我需要读取标志 300、302、304、...、900 处的值(每隔一个标志,在设置的间隔之间;ADC_Start 到 ADC_End)
void readData() {
if (flag >= ADC_Start && flag <= ADC_End ){
for (uint16_t i = ADC_Start; i < ADC_End; i = i+2)
{
index = i - ADC_Start;
data[index] = analogRead(VID);
}
} else { }
}
这是数据表:https://www.hamamatsu.com/resources/pdf/ssd/c12880ma_kacc1226e.pdf 有关时间安排,请参阅第 7 页。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)