Materiales:
Arduino Uno
MCP4921
Librerias:
TimerOne
MCPXXXX
Código
#include <TimerOne.h>
#include <SPI.h> // Remember this line!
#include <DAC_MCP49xx.h>
#define SS_PIN 10
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921, SS_PIN);
int bandera;
int y; //
int muestra=0; // numero de muestra
float frecuencia=60; // frecuencia de senal a generar
float frecuenciadigital; // frecuencia digital
float frecuenciamuestreo=1000; // 1 K Hz
void ISR_timer(){
bandera=1;
}
void setup(){
Serial.begin(9600); // incializa comunicacions serial
Timer1.initialize(1000); // Dispara cada 1 ms f=1/10ms = 1kHz
Timer1.attachInterrupt(ISR_timer); // Activa la interrupcion y la asocia a ISR_timer
dac.setSPIDivider(SPI_CLOCK_DIV16);
// Use "port writes", see the manual page. In short, if you use pin 10 for
// SS (and pin 7 for LDAC, if used), this is much faster.
// Also not strictly required (no setup() code is needed at all).
dac.setPortWrite(true);
}
void loop(){
frecuenciadigital = frecuencia/frecuenciamuestreo;
if (bandera == 1) {
bandera=0;
y=floor((1*sin(2*3.1416*muestra*frecuenciadigital))*2048 + 2048); // calculo seno digital de 12 bits // calculo sino digital de 12 bits; // calculo sino digital de 12 bits
// y=1*sin(2*3.1416*muestra*frecuenciadigital); // calculo seno digital de 12 bits // calculo sino digital de 12 bits; // calculo sino digital de 12 bits
muestra=muestra+1;
dac.output(y);
//Serial.println(y);
}
}