Objetivos: Generar una señal seno con arduino y controlar por medio de dos potenciometros su amplitud y su frecuencia
Diagrama Proteus

#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 y; // salida
int muestra=0; // numero de muestra
int frecuencia_ld;
float frecuencia=1; // frecuencia de senal a generar
float frecuenciadigital; // frecuencia digital
float frecuenciamuestreo=10000;// 10 K Hz
int amplitud_dig;
float amplitud;
void ISR_timer(){
y=floor((amplitud*sin(2*3.1416*muestra*frecuenciadigital)) + 2048); // calculo seno digital de 12 bits // calculo sino digital de 12 bits; // calculo sino digital de 12 bits
muestra++; // aumenta la muestra
dac.output(y); // manda la salida al DAC
}
void setup(){
Serial.begin(9600); // incializa comunicacions serial
Timer1.initialize(100); // Periodo de muestreo // Dispara cada 1 ms =1000s
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;
amplitud_dig=analogRead(A0); /// conversión analogica digital
amplitud=amplitud_dig*2;
frecuencia_ld=analogRead(A1);
frecuencia=map(frecuencia_ld,0,1024,1,1000);
}


