背景
我需要一个在"Arduino兼容“的chipKit UNO32板上运行的数据日志应用程序,并带有一个连接的传感器。数据应该记录到在"Arduino无线SD屏蔽“上找到的SD卡。传感器通过I2C连接。
我的问题是,当我使用Arduino SD库时,编写速度很慢:每次打印()操作25 ms,与我的传感器的100-800 Hz数据速率相比,最高为40 Hz,这是可笑的。
我的错误解决方案
幸运的是,传感器配备了可存储32个传感器值的片上FIFO。这意味着我可以去至少200赫兹没有任何麻烦,因为填充FIFO的时间远远大于写到卡的时间。但我仍然很想达到至少400 the,所以我想我应该有以下设置:
不幸的是,这似乎不起作用,因为处理I2C使用中断的Arduino Wire库无法从中断处理程序中调用。我试过了,它冻结了微控制器。
我的问题
似乎还有其他不依赖中断的Arduino I2C库。我该试试那条路吗?
还是从一开始我的思维方式(在ISR中抓取大量数据)是不好的?我还有别的办法吗?
发布于 2012-10-25 08:28:02
只需使用中断设置一个标志并完成ISR。从主循环执行调用I2C,而不是直接从ISR调用。
boolean fifoFull = false;
void fifoISR() {
fifoFull = true;
}
void loop() {
if(fifoFull) {
// Do I2C
fifoFull = false;
}
}https://stackoverflow.com/questions/13016607
复制相似问题