Hola, quisiera saber si con Arduino Uno o Mega se puede tomar datos de un sensor cada 1mseg y enviarlos a una tarjeta de memoria vía SPI?
Estoy intentando utilizar el timer2 pero creo que pone muy lenta la comunicación SPI pero quisiera saber si hay alguna otra forma de hacerlo.
Gracias de antemano.
Acá adjunto el código
#include <EmonLib.h>
#include <SD.h>
#include <SPI.h>
File archivo; // objeto tipo archivo
float current, voltage; //vriable flotante para el sensor
const int cs =10;
EnergyMonitor emon1;
void setup() {
Serial.begin(9600);
emon1.voltage(A1, 244.26, 1.7); // Voltage: input pin, calibration, phase_shift
emon1.current(A0, 2.13);
pinMode(cs,OUTPUT);
Serial.println("Inicializando tarjeta...");
if(!SD.begin(cs)) {
Serial.println("Fallo en inicialización"); //si no está la SD insertada
}
else{
Serial.println("Inicialización correcta");
}
SREG = (SREG & 0b01111111); //Desabilitar interrupciones
TIMSK2 = TIMSK2|0b00000001; //Habilita la interrupcion por desbordamiento
TCCR2B = 0b00000010; //Configura preescala
SREG = (SREG & 0b01111111) | 0b10000000;
}
void loop() {
}
ISR(TIMER2_OVF_vect){
emon1.calcVI(24, 10); // Calculate all. No.of half wavelengths (crossings), time-out. Calcula todo. Número de medias longitudes de onda (cruces), tiempo de espera
float current = emon1.Irms;
float voltage = emon1.Vrms;
float FP = emon1.powerFactor;
Serial.println(current);
Serial.println(voltage);
archivo = SD.open("Datos2.txt", FILE_WRITE);
if (archivo) {
float current2 = float (current);
float voltage2 = float (voltage);
archivo.print(voltage2);
archivo.print("V");
archivo.print(", ");
archivo.print(current2);
archivo.println("A");
archivo.close();
}
else {
Serial.println("Error en apertura de archivo"); //si no está insertadala tarjeta
}
}