Objetivo:
Generar una señal senoidal digital con arduino de 60 Hz con una frecuencia de muestreo de 10 khz.
Desarrollo:
La forma matemámtica de una señal seno discreta es
y(n)=A*sin(2*pi*n*fd)
donde n es el número de muestra, A la amplitud, fd es la frecuencia digital
La frecuencia digital se define como
fd=f/fs
donde fs es la frecuencia de muestro.
Si fs=10kHz el periodo de muestreo es de 100 us (microsegundos)
Código en arduino
#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
float frecuencia=60; // frecuencia de senal a generar
float frecuenciadigital; // frecuencia digital
float frecuenciamuestreo=10000;// 1 K Hz
void ISR_timer(){
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
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;
}
Disponible también en Github
https://github.com/tecsolucion/proyectosPDS/blob/master/senoDAC/senoDAC.ino


necesito diseñar un programa que me entregue una onda senoidal en donde pueda jugar con el tiempo y con la amplitud, utilizando arduino due, si ya contiene los puertos dac, podria utilizarlos como salida de manera directa al osciloscopio?
Si se podría, conectar directamente al osciloscipio, pero tu señal solo estaría en un rango de 0 – 5V .
Con el tiempo te refieres a cambiar la frecuencia
Si se puede hacer el programa. En próximo lunes subo un articulo de eso.