我需要一个在“Arduino兼容”chipKit UNO32板上运行的数据记录应用程序,带有连接的传感器。数据应记录在“Arduino无线SD屏蔽”上的SD卡中。 传感器通过I2C连接。
我的问题是,当我使用Arduino SD库时,写入速度很慢:每次打印()操作25毫秒,这给我最大40赫兹,这与我的传感器的100-800Hz数据速率相比是可笑的。 / p>
幸运的是,传感器配备了片上FIFO,可存储32个传感器值。这意味着我可以在没有任何麻烦的情况下达到至少200Hz,因为填充FIFO的时间比写入卡的时间大。 但我仍然真的想要达到至少400Hz,所以我想我会有以下设置:
不幸的是,这似乎不起作用,因为处理I2C的Arduino Wire库使用中断,并且无法从中断处理程序中调用。我试过了,它冻结了微控制器。
似乎还有其他不依赖中断的Arduino I2C库。我应该试试那条路吗?
或者从一开始我的思维方式(在ISR中抓取大量数据)是不是很糟糕?我应该采取另一种方法吗?
答案 0 :(得分:0)
只需使用中断设置标志并完成ISR。从主循环执行调用I2C而不是直接从ISR调用。
boolean fifoFull = false;
void fifoISR() {
fifoFull = true;
}
void loop() {
if(fifoFull) {
// Do I2C
fifoFull = false;
}
}